|
- 'use strict';
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
-
- 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 _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 _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 _warning = require('warning');
-
- var _warning2 = _interopRequireDefault(_warning);
-
- var _toCss = require('../utils/toCss');
-
- var _toCss2 = _interopRequireDefault(_toCss);
-
- var _toCssValue = require('../utils/toCssValue');
-
- var _toCssValue2 = _interopRequireDefault(_toCssValue);
-
- 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 StyleRule = function () {
- function StyleRule(key, style, options) {
- _classCallCheck(this, StyleRule);
-
- this.type = 'style';
- this.isProcessed = false;
- var sheet = options.sheet,
- Renderer = options.Renderer,
- selector = options.selector;
-
- this.key = key;
- this.options = options;
- this.style = style;
- if (selector) this.selectorText = selector;
- this.renderer = sheet ? sheet.renderer : new Renderer();
- }
-
- /**
- * Set selector string.
- * Attention: use this with caution. Most browsers didn't implement
- * selectorText setter, so this may result in rerendering of entire Style Sheet.
- */
-
-
- _createClass(StyleRule, [{
- key: 'prop',
-
-
- /**
- * Get or set a style property.
- */
- value: function prop(name, value) {
- // It's a getter.
- if (value === undefined) return this.style[name];
-
- // Don't do anything if the value has not changed.
- if (this.style[name] === value) return this;
-
- value = this.options.jss.plugins.onChangeValue(value, name, this);
-
- var isEmpty = value == null || value === false;
- var isDefined = name in this.style;
-
- // Value is empty and wasn't defined before.
- if (isEmpty && !isDefined) return this;
-
- // We are going to remove this value.
- var remove = isEmpty && isDefined;
-
- if (remove) delete this.style[name];else this.style[name] = value;
-
- // Renderable is defined if StyleSheet option `link` is true.
- if (this.renderable) {
- if (remove) this.renderer.removeProperty(this.renderable, name);else this.renderer.setProperty(this.renderable, name, value);
- return this;
- }
-
- var sheet = this.options.sheet;
-
- if (sheet && sheet.attached) {
- (0, _warning2['default'])(false, 'Rule is not linked. Missing sheet option "link: true".');
- }
- return this;
- }
-
- /**
- * Apply rule to an element inline.
- */
-
- }, {
- key: 'applyTo',
- value: function applyTo(renderable) {
- var json = this.toJSON();
- for (var prop in json) {
- this.renderer.setProperty(renderable, prop, json[prop]);
- }return this;
- }
-
- /**
- * Returns JSON representation of the rule.
- * Fallbacks are not supported.
- * Useful for inline styles.
- */
-
- }, {
- key: 'toJSON',
- value: function toJSON() {
- var json = {};
- for (var prop in this.style) {
- var value = this.style[prop];
- if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== 'object') json[prop] = value;else if (Array.isArray(value)) json[prop] = (0, _toCssValue2['default'])(value);
- }
- return json;
- }
-
- /**
- * Generates a CSS string.
- */
-
- }, {
- key: 'toString',
- value: function toString(options) {
- var sheet = this.options.sheet;
-
- var link = sheet ? sheet.options.link : false;
- var opts = link ? _extends({}, options, { allowEmpty: true }) : options;
- return (0, _toCss2['default'])(this.selector, this.style, opts);
- }
- }, {
- key: 'selector',
- set: function set(selector) {
- if (selector === this.selectorText) return;
-
- this.selectorText = selector;
-
- if (!this.renderable) return;
-
- var hasChanged = this.renderer.setSelector(this.renderable, selector);
-
- // If selector setter is not implemented, rerender the rule.
- if (!hasChanged && this.renderable) {
- var renderable = this.renderer.replaceRule(this.renderable, this);
- if (renderable) this.renderable = renderable;
- }
- }
-
- /**
- * Get selector string.
- */
- ,
- get: function get() {
- return this.selectorText;
- }
- }]);
-
- return StyleRule;
- }();
-
- exports['default'] = StyleRule;
|