Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

167 строки
5.3 KiB

  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. 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; };
  6. 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; };
  7. 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; }; }();
  8. var _warning = require('warning');
  9. var _warning2 = _interopRequireDefault(_warning);
  10. var _toCss = require('../utils/toCss');
  11. var _toCss2 = _interopRequireDefault(_toCss);
  12. var _toCssValue = require('../utils/toCssValue');
  13. var _toCssValue2 = _interopRequireDefault(_toCssValue);
  14. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  15. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  16. var StyleRule = function () {
  17. function StyleRule(key, style, options) {
  18. _classCallCheck(this, StyleRule);
  19. this.type = 'style';
  20. this.isProcessed = false;
  21. var sheet = options.sheet,
  22. Renderer = options.Renderer,
  23. selector = options.selector;
  24. this.key = key;
  25. this.options = options;
  26. this.style = style;
  27. if (selector) this.selectorText = selector;
  28. this.renderer = sheet ? sheet.renderer : new Renderer();
  29. }
  30. /**
  31. * Set selector string.
  32. * Attention: use this with caution. Most browsers didn't implement
  33. * selectorText setter, so this may result in rerendering of entire Style Sheet.
  34. */
  35. _createClass(StyleRule, [{
  36. key: 'prop',
  37. /**
  38. * Get or set a style property.
  39. */
  40. value: function prop(name, value) {
  41. // It's a getter.
  42. if (value === undefined) return this.style[name];
  43. // Don't do anything if the value has not changed.
  44. if (this.style[name] === value) return this;
  45. value = this.options.jss.plugins.onChangeValue(value, name, this);
  46. var isEmpty = value == null || value === false;
  47. var isDefined = name in this.style;
  48. // Value is empty and wasn't defined before.
  49. if (isEmpty && !isDefined) return this;
  50. // We are going to remove this value.
  51. var remove = isEmpty && isDefined;
  52. if (remove) delete this.style[name];else this.style[name] = value;
  53. // Renderable is defined if StyleSheet option `link` is true.
  54. if (this.renderable) {
  55. if (remove) this.renderer.removeProperty(this.renderable, name);else this.renderer.setProperty(this.renderable, name, value);
  56. return this;
  57. }
  58. var sheet = this.options.sheet;
  59. if (sheet && sheet.attached) {
  60. (0, _warning2['default'])(false, 'Rule is not linked. Missing sheet option "link: true".');
  61. }
  62. return this;
  63. }
  64. /**
  65. * Apply rule to an element inline.
  66. */
  67. }, {
  68. key: 'applyTo',
  69. value: function applyTo(renderable) {
  70. var json = this.toJSON();
  71. for (var prop in json) {
  72. this.renderer.setProperty(renderable, prop, json[prop]);
  73. }return this;
  74. }
  75. /**
  76. * Returns JSON representation of the rule.
  77. * Fallbacks are not supported.
  78. * Useful for inline styles.
  79. */
  80. }, {
  81. key: 'toJSON',
  82. value: function toJSON() {
  83. var json = {};
  84. for (var prop in this.style) {
  85. var value = this.style[prop];
  86. if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== 'object') json[prop] = value;else if (Array.isArray(value)) json[prop] = (0, _toCssValue2['default'])(value);
  87. }
  88. return json;
  89. }
  90. /**
  91. * Generates a CSS string.
  92. */
  93. }, {
  94. key: 'toString',
  95. value: function toString(options) {
  96. var sheet = this.options.sheet;
  97. var link = sheet ? sheet.options.link : false;
  98. var opts = link ? _extends({}, options, { allowEmpty: true }) : options;
  99. return (0, _toCss2['default'])(this.selector, this.style, opts);
  100. }
  101. }, {
  102. key: 'selector',
  103. set: function set(selector) {
  104. if (selector === this.selectorText) return;
  105. this.selectorText = selector;
  106. if (!this.renderable) return;
  107. var hasChanged = this.renderer.setSelector(this.renderable, selector);
  108. // If selector setter is not implemented, rerender the rule.
  109. if (!hasChanged && this.renderable) {
  110. var renderable = this.renderer.replaceRule(this.renderable, this);
  111. if (renderable) this.renderable = renderable;
  112. }
  113. }
  114. /**
  115. * Get selector string.
  116. */
  117. ,
  118. get: function get() {
  119. return this.selectorText;
  120. }
  121. }]);
  122. return StyleRule;
  123. }();
  124. exports['default'] = StyleRule;