b8ca4350cb57410ddd6596fc80cff0a7182edfdcda7f4b338e3d62a2e03361cf2841790c9c0fe749eca4b5b1b9fe18f38ba7235f36feecfe565a2ff3ff60ce 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. 'use strict';
  2. exports.__esModule = true;
  3. exports.default = colorMerge;
  4. var _getDecls = require('./getDecls');
  5. var _getDecls2 = _interopRequireDefault(_getDecls);
  6. var _hasAllProps = require('./hasAllProps');
  7. var _hasAllProps2 = _interopRequireDefault(_hasAllProps);
  8. var _insertCloned = require('./insertCloned');
  9. var _insertCloned2 = _interopRequireDefault(_insertCloned);
  10. var _remove = require('./remove');
  11. var _remove2 = _interopRequireDefault(_remove);
  12. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  13. function getAllRules(props, properties) {
  14. return properties.reduce(function (list, property) {
  15. props.filter(function (n) {
  16. return n.prop && ~n.prop.indexOf(property);
  17. }).forEach(function (result, index) {
  18. if (!list[index]) {
  19. list.push([]);
  20. }
  21. list[index].push(result);
  22. });
  23. return list;
  24. }, [[]]);
  25. }
  26. function colorMerge(_ref) {
  27. var rule = _ref.rule;
  28. var properties = _ref.properties;
  29. var prop = _ref.prop;
  30. var value = _ref.value;
  31. var decls = (0, _getDecls2.default)(rule, properties);
  32. var _loop = function _loop() {
  33. var lastNode = decls[decls.length - 1];
  34. var props = decls.filter(function (node) {
  35. return node.important === lastNode.important;
  36. });
  37. if (_hasAllProps2.default.apply(undefined, [props].concat(properties))) {
  38. getAllRules(props, properties).reverse().forEach(function (group) {
  39. (0, _insertCloned2.default)(rule, lastNode, {
  40. prop: prop,
  41. value: value(group)
  42. });
  43. });
  44. props.forEach(_remove2.default);
  45. }
  46. decls = decls.filter(function (node) {
  47. return !~props.indexOf(node);
  48. });
  49. };
  50. while (decls.length) {
  51. _loop();
  52. }
  53. }
  54. module.exports = exports['default'];