forgeplus-react/node_modules/jss/lib/Jss.js

211 lines
7.1 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _isInBrowser = require('is-in-browser');
var _isInBrowser2 = _interopRequireDefault(_isInBrowser);
var _StyleSheet = require('./StyleSheet');
var _StyleSheet2 = _interopRequireDefault(_StyleSheet);
var _PluginsRegistry = require('./PluginsRegistry');
var _PluginsRegistry2 = _interopRequireDefault(_PluginsRegistry);
var _rules = require('./plugins/rules');
var _rules2 = _interopRequireDefault(_rules);
var _observables = require('./plugins/observables');
var _observables2 = _interopRequireDefault(_observables);
var _functions = require('./plugins/functions');
var _functions2 = _interopRequireDefault(_functions);
var _sheets = require('./sheets');
var _sheets2 = _interopRequireDefault(_sheets);
var _StyleRule = require('./rules/StyleRule');
var _StyleRule2 = _interopRequireDefault(_StyleRule);
var _createGenerateClassName = require('./utils/createGenerateClassName');
var _createGenerateClassName2 = _interopRequireDefault(_createGenerateClassName);
var _createRule2 = require('./utils/createRule');
var _createRule3 = _interopRequireDefault(_createRule2);
var _DomRenderer = require('./renderers/DomRenderer');
var _DomRenderer2 = _interopRequireDefault(_DomRenderer);
var _VirtualRenderer = require('./renderers/VirtualRenderer');
var _VirtualRenderer2 = _interopRequireDefault(_VirtualRenderer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var defaultPlugins = _rules2['default'].concat([_observables2['default'], _functions2['default']]);
var instanceCounter = 0;
var Jss = function () {
function Jss(options) {
_classCallCheck(this, Jss);
this.id = instanceCounter++;
this.version = "9.8.7";
this.plugins = new _PluginsRegistry2['default']();
this.options = {
createGenerateClassName: _createGenerateClassName2['default'],
Renderer: _isInBrowser2['default'] ? _DomRenderer2['default'] : _VirtualRenderer2['default'],
plugins: []
};
this.generateClassName = (0, _createGenerateClassName2['default'])();
// eslint-disable-next-line prefer-spread
this.use.apply(this, defaultPlugins);
this.setup(options);
}
_createClass(Jss, [{
key: 'setup',
value: function setup() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (options.createGenerateClassName) {
this.options.createGenerateClassName = options.createGenerateClassName;
// $FlowFixMe
this.generateClassName = options.createGenerateClassName();
}
if (options.insertionPoint != null) this.options.insertionPoint = options.insertionPoint;
if (options.virtual || options.Renderer) {
this.options.Renderer = options.Renderer || (options.virtual ? _VirtualRenderer2['default'] : _DomRenderer2['default']);
}
// eslint-disable-next-line prefer-spread
if (options.plugins) this.use.apply(this, options.plugins);
return this;
}
/**
* Create a Style Sheet.
*/
}, {
key: 'createStyleSheet',
value: function createStyleSheet(styles) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var index = options.index;
if (typeof index !== 'number') {
index = _sheets2['default'].index === 0 ? 0 : _sheets2['default'].index + 1;
}
var sheet = new _StyleSheet2['default'](styles, _extends({}, options, {
jss: this,
generateClassName: options.generateClassName || this.generateClassName,
insertionPoint: this.options.insertionPoint,
Renderer: this.options.Renderer,
index: index
}));
this.plugins.onProcessSheet(sheet);
return sheet;
}
/**
* Detach the Style Sheet and remove it from the registry.
*/
}, {
key: 'removeStyleSheet',
value: function removeStyleSheet(sheet) {
sheet.detach();
_sheets2['default'].remove(sheet);
return this;
}
/**
* Create a rule without a Style Sheet.
*/
}, {
key: 'createRule',
value: function createRule(name) {
var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
// Enable rule without name for inline styles.
if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {
options = style;
style = name;
name = undefined;
}
// Cast from RuleFactoryOptions to RuleOptions
// https://stackoverflow.com/questions/41328728/force-casting-in-flow
var ruleOptions = options;
ruleOptions.jss = this;
ruleOptions.Renderer = this.options.Renderer;
if (!ruleOptions.generateClassName) ruleOptions.generateClassName = this.generateClassName;
if (!ruleOptions.classes) ruleOptions.classes = {};
var rule = (0, _createRule3['default'])(name, style, ruleOptions);
if (!ruleOptions.selector && rule instanceof _StyleRule2['default']) {
rule.selector = '.' + ruleOptions.generateClassName(rule);
}
this.plugins.onProcessRule(rule);
return rule;
}
/**
* Register plugin. Passed function will be invoked with a rule instance.
*/
}, {
key: 'use',
value: function use() {
var _this = this;
for (var _len = arguments.length, plugins = Array(_len), _key = 0; _key < _len; _key++) {
plugins[_key] = arguments[_key];
}
plugins.forEach(function (plugin) {
// Avoids applying same plugin twice, at least based on ref.
if (_this.options.plugins.indexOf(plugin) === -1) {
_this.options.plugins.push(plugin);
_this.plugins.use(plugin);
}
});
return this;
}
}]);
return Jss;
}();
exports['default'] = Jss;