postcss-conditionals-renewed
Version:
PostCSS plugin that enables @if statements in your CSS
57 lines (40 loc) • 1.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = process;
var _evaluate = require('./evaluate');
var _evaluate2 = _interopRequireDefault(_evaluate);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function processIfRule(rule) {
processExpression(rule, rule.params);
}
function processExpression(node, expr) {
process(node);
if (!expr) throw node.error('Missing condition', { plugin: 'postcss-conditionals-renewed' });
var passed = (0, _evaluate2.default)(expr);
if (passed) node.before(node.nodes);
processNextNode(node, !passed);
node.remove();
}
function processNextNode(rule, evaluateNext) {
var node = rule.next();
if (typeof node === 'undefined') return;
if (node.type !== 'atrule') return;
if (node.name !== 'else') return;
if (evaluateNext) {
if (node.params.substr(0, 2) === 'if') processElseIfRule(node);else processElseRule(node);
} else processNextNode(node, false);
node.remove();
}
function processElseIfRule(rule) {
processExpression(rule, rule.params.substr(3));
}
function processElseRule(rule) {
process(rule);
rule.before(rule.nodes);
}
function process(node) {
node.walkAtRules('if', processIfRule);
}
module.exports = exports.default;