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.
35 lines
1.0 KiB
35 lines
1.0 KiB
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 (decl.value.indexOf('initial') < 0) { |
|
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(); |
|
} |
|
}); |
|
}; |
|
});
|
|
|