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.
40 lines
1.2 KiB
40 lines
1.2 KiB
4 years ago
|
'use strict';
|
||
|
|
||
|
var postcss = require('postcss');
|
||
|
|
||
|
module.exports = postcss.plugin('postcss-zindex', function (opts) {
|
||
|
opts = opts || {};
|
||
|
return function (css) {
|
||
|
var cache = require('./lib/layerCache')(opts);
|
||
|
var nodes = [];
|
||
|
var abort = false;
|
||
|
// First pass; cache all z indexes
|
||
|
css.walkDecls('z-index', function (decl) {
|
||
|
// Check that no negative values exist. Rebasing is only
|
||
|
// safe if all indices are positive numbers.
|
||
|
if (decl.value[0] === '-') {
|
||
|
abort = true;
|
||
|
// Stop PostCSS iterating through the rest of the decls
|
||
|
return false;
|
||
|
}
|
||
|
nodes.push(decl);
|
||
|
cache.addValue(decl.value);
|
||
|
});
|
||
|
|
||
|
// Abort if we found any negative values
|
||
|
// or there are no z-index declarations
|
||
|
if (abort || !nodes.length) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
cache.optimizeValues();
|
||
|
|
||
|
// Second pass; optimize
|
||
|
nodes.forEach(function (decl) {
|
||
|
// Need to coerce to string so that the
|
||
|
// AST is updated correctly
|
||
|
decl.value = cache.getValue(decl.value).toString();
|
||
|
});
|
||
|
};
|
||
|
});
|