Sha256: 614d465bcfb798be3acbd13df26cdfcb394c2ffdd68444efdb62c97ecd111f76

Contents?: true

Size: 1.73 KB

Versions: 26

Compression:

Stored size: 1.73 KB

Contents

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = mergeRules;

var _hasAllProps = require('./hasAllProps');

var _hasAllProps2 = _interopRequireDefault(_hasAllProps);

var _getDecls = require('./getDecls');

var _getDecls2 = _interopRequireDefault(_getDecls);

var _getRules = require('./getRules');

var _getRules2 = _interopRequireDefault(_getRules);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function isConflictingProp(propA, propB) {
    if (!propB.prop || propB.important !== propA.important) {
        return;
    }

    const parts = propA.prop.split('-');

    return parts.some(() => {
        parts.pop();

        return parts.join('-') === propB.prop;
    });
}

function hasConflicts(match, nodes) {
    const firstNode = Math.min.apply(null, match.map(n => nodes.indexOf(n)));
    const lastNode = Math.max.apply(null, match.map(n => nodes.indexOf(n)));
    const between = nodes.slice(firstNode + 1, lastNode);

    return match.some(a => between.some(b => isConflictingProp(a, b)));
}

function mergeRules(rule, properties, callback) {
    let decls = (0, _getDecls2.default)(rule, properties);

    while (decls.length) {
        const last = decls[decls.length - 1];
        const props = decls.filter(node => node.important === last.important);
        const rules = (0, _getRules2.default)(props, properties);

        if ((0, _hasAllProps2.default)(rules, ...properties) && !hasConflicts(rules, rule.nodes)) {
            if (callback(rules, last, props)) {
                decls = decls.filter(node => !~rules.indexOf(node));
            }
        }

        decls = decls.filter(node => node !== last);
    }
}
module.exports = exports['default'];

Version data entries

26 entries across 25 versions & 8 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
disco_app-0.18.0 test/dummy/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
disco_app-0.18.2 test/dummy/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
disco_app-0.16.1 test/dummy/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
disco_app-0.15.2 test/dummy/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
disco_app-0.18.4 test/dummy/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
disco_app-0.18.1 test/dummy/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
disco_app-0.14.0 test/dummy/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
tang-0.2.1 spec/tang_app/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
groonga-client-model-6.0.0 test/apps/rails6.1.3/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
tang-0.2.0 spec/tang_app/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
tang-0.1.0 spec/tang_app/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
tang-0.0.9 spec/tang_app/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
enju_library-0.3.8 spec/dummy/node_modules/postcss-merge-longhand/dist/lib/mergeRules.js
jester-data-8.0.0 node_modules/postcss-merge-longhand/dist/lib/mergeRules.js