You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

136 lines
3.7 KiB

  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. 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; }; }();
  6. var _warning = require('warning');
  7. var _warning2 = _interopRequireDefault(_warning);
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  9. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  10. var PluginsRegistry = function () {
  11. function PluginsRegistry() {
  12. _classCallCheck(this, PluginsRegistry);
  13. this.hooks = {
  14. onCreateRule: [],
  15. onProcessRule: [],
  16. onProcessStyle: [],
  17. onProcessSheet: [],
  18. onChangeValue: [],
  19. onUpdate: []
  20. /**
  21. * Call `onCreateRule` hooks and return an object if returned by a hook.
  22. */
  23. };
  24. }
  25. _createClass(PluginsRegistry, [{
  26. key: 'onCreateRule',
  27. value: function onCreateRule(name, decl, options) {
  28. for (var i = 0; i < this.hooks.onCreateRule.length; i++) {
  29. var rule = this.hooks.onCreateRule[i](name, decl, options);
  30. if (rule) return rule;
  31. }
  32. return null;
  33. }
  34. /**
  35. * Call `onProcessRule` hooks.
  36. */
  37. }, {
  38. key: 'onProcessRule',
  39. value: function onProcessRule(rule) {
  40. if (rule.isProcessed) return;
  41. var sheet = rule.options.sheet;
  42. for (var i = 0; i < this.hooks.onProcessRule.length; i++) {
  43. this.hooks.onProcessRule[i](rule, sheet);
  44. }
  45. // $FlowFixMe
  46. if (rule.style) this.onProcessStyle(rule.style, rule, sheet);
  47. rule.isProcessed = true;
  48. }
  49. /**
  50. * Call `onProcessStyle` hooks.
  51. */
  52. }, {
  53. key: 'onProcessStyle',
  54. value: function onProcessStyle(style, rule, sheet) {
  55. var nextStyle = style;
  56. for (var i = 0; i < this.hooks.onProcessStyle.length; i++) {
  57. nextStyle = this.hooks.onProcessStyle[i](nextStyle, rule, sheet);
  58. // $FlowFixMe
  59. rule.style = nextStyle;
  60. }
  61. }
  62. /**
  63. * Call `onProcessSheet` hooks.
  64. */
  65. }, {
  66. key: 'onProcessSheet',
  67. value: function onProcessSheet(sheet) {
  68. for (var i = 0; i < this.hooks.onProcessSheet.length; i++) {
  69. this.hooks.onProcessSheet[i](sheet);
  70. }
  71. }
  72. /**
  73. * Call `onUpdate` hooks.
  74. */
  75. }, {
  76. key: 'onUpdate',
  77. value: function onUpdate(data, rule, sheet) {
  78. for (var i = 0; i < this.hooks.onUpdate.length; i++) {
  79. this.hooks.onUpdate[i](data, rule, sheet);
  80. }
  81. }
  82. /**
  83. * Call `onChangeValue` hooks.
  84. */
  85. }, {
  86. key: 'onChangeValue',
  87. value: function onChangeValue(value, prop, rule) {
  88. var processedValue = value;
  89. for (var i = 0; i < this.hooks.onChangeValue.length; i++) {
  90. processedValue = this.hooks.onChangeValue[i](processedValue, prop, rule);
  91. }
  92. return processedValue;
  93. }
  94. /**
  95. * Register a plugin.
  96. * If function is passed, it is a shortcut for `{onProcessRule}`.
  97. */
  98. }, {
  99. key: 'use',
  100. value: function use(plugin) {
  101. for (var name in plugin) {
  102. if (this.hooks[name]) this.hooks[name].push(plugin[name]);else (0, _warning2['default'])(false, '[JSS] Unknown hook "%s".', name);
  103. }
  104. }
  105. }]);
  106. return PluginsRegistry;
  107. }();
  108. exports['default'] = PluginsRegistry;