36 lines
1.0 KiB
JavaScript
36 lines
1.0 KiB
JavaScript
var postcss = require('postcss');
|
|
var makeFallbackFunction = require('./lib/rules-fabric');
|
|
|
|
module.exports = postcss.plugin('postcss-initial', function (opts) {
|
|
opts = opts || {};
|
|
opts.reset = opts.reset || 'all';
|
|
opts.replace = opts.replace || false;
|
|
var getFallback = makeFallbackFunction(opts.reset === 'inherited');
|
|
var getPropPrevTo = function (prop, decl) {
|
|
var foundPrev = false;
|
|
decl.parent.walkDecls(function (child) {
|
|
if (child.prop === decl.prop && child.value !== decl.value) {
|
|
foundPrev = true;
|
|
}
|
|
});
|
|
return foundPrev;
|
|
};
|
|
return function (css) {
|
|
css.walkDecls(function (decl) {
|
|
if (!/\binitial\b/.test(decl.value)) {
|
|
return;
|
|
}
|
|
var fallBackRules = getFallback(decl.prop, decl.value);
|
|
if (fallBackRules.length === 0) return;
|
|
fallBackRules.forEach(function (rule) {
|
|
if ( !getPropPrevTo(decl.prop, decl) ) {
|
|
decl.cloneBefore(rule);
|
|
}
|
|
});
|
|
if (opts.replace === true) {
|
|
decl.remove();
|
|
}
|
|
});
|
|
};
|
|
});
|