UNPKG

@smidswater/postcss-conditionals

Version:

PostCSS plugin that enables @if statements in your CSS

53 lines (41 loc) 1.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = process; var _evaluate = _interopRequireDefault(require("./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' }); var passed = (0, _evaluate.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;