|
- {"ast":null,"code":"'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nexports['default'] = jssGlobal;\n\nvar _jss = require('jss');\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nvar propKey = '@global';\nvar prefixKey = '@global ';\n\nvar GlobalContainerRule = function () {\n function GlobalContainerRule(key, styles, options) {\n _classCallCheck(this, GlobalContainerRule);\n\n this.type = 'global';\n this.key = key;\n this.options = options;\n this.rules = new _jss.RuleList(_extends({}, options, {\n parent: this\n }));\n\n for (var selector in styles) {\n this.rules.add(selector, styles[selector], {\n selector: selector\n });\n }\n\n this.rules.process();\n }\n /**\n * Get a rule.\n */\n\n\n _createClass(GlobalContainerRule, [{\n key: 'getRule',\n value: function getRule(name) {\n return this.rules.get(name);\n }\n /**\n * Create and register rule, run plugins.\n */\n\n }, {\n key: 'addRule',\n value: function addRule(name, style, options) {\n var rule = this.rules.add(name, style, options);\n this.options.jss.plugins.onProcessRule(rule);\n return rule;\n }\n /**\n * Get index of a rule.\n */\n\n }, {\n key: 'indexOf',\n value: function indexOf(rule) {\n return this.rules.indexOf(rule);\n }\n /**\n * Generates a CSS string.\n */\n\n }, {\n key: 'toString',\n value: function toString() {\n return this.rules.toString();\n }\n }]);\n\n return GlobalContainerRule;\n}();\n\nvar GlobalPrefixedRule = function () {\n function GlobalPrefixedRule(name, style, options) {\n _classCallCheck(this, GlobalPrefixedRule);\n\n this.name = name;\n this.options = options;\n var selector = name.substr(prefixKey.length);\n this.rule = options.jss.createRule(selector, style, _extends({}, options, {\n parent: this,\n selector: selector\n }));\n }\n\n _createClass(GlobalPrefixedRule, [{\n key: 'toString',\n value: function toString(options) {\n return this.rule.toString(options);\n }\n }]);\n\n return GlobalPrefixedRule;\n}();\n\nvar separatorRegExp = /\\s*,\\s*/g;\n\nfunction addScope(selector, scope) {\n var parts = selector.split(separatorRegExp);\n var scoped = '';\n\n for (var i = 0; i < parts.length; i++) {\n scoped += scope + ' ' + parts[i].trim();\n if (parts[i + 1]) scoped += ', ';\n }\n\n return scoped;\n}\n\nfunction handleNestedGlobalContainerRule(rule) {\n var options = rule.options,\n style = rule.style;\n var rules = style[propKey];\n if (!rules) return;\n\n for (var name in rules) {\n options.sheet.addRule(name, rules[name], _extends({}, options, {\n selector: addScope(name, rule.selector)\n }));\n }\n\n delete style[propKey];\n}\n\nfunction handlePrefixedGlobalRule(rule) {\n var options = rule.options,\n style = rule.style;\n\n for (var prop in style) {\n if (prop.substr(0, propKey.length) !== propKey) continue;\n var selector = addScope(prop.substr(propKey.length), rule.selector);\n options.sheet.addRule(selector, style[prop], _extends({}, options, {\n selector: selector\n }));\n delete style[prop];\n }\n}\n/**\n * Convert nested rules to separate, remove them from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\n\n\nfunction jssGlobal() {\n function onCreateRule(name, styles, options) {\n if (name === propKey) {\n return new GlobalContainerRule(name, styles, options);\n }\n\n if (name[0] === '@' && name.substr(0, prefixKey.length) === prefixKey) {\n return new GlobalPrefixedRule(name, styles, options);\n }\n\n var parent = options.parent;\n\n if (parent) {\n if (parent.type === 'global' || parent.options.parent.type === 'global') {\n options.global = true;\n }\n }\n\n if (options.global) options.selector = name;\n return null;\n }\n\n function onProcessRule(rule) {\n if (rule.type !== 'style') return;\n handleNestedGlobalContainerRule(rule);\n handlePrefixedGlobalRule(rule);\n }\n\n return {\n onCreateRule: onCreateRule,\n onProcessRule: onProcessRule\n };\n}","map":null,"metadata":{},"sourceType":"script"}
|