@smidswater/postcss-conditionals
Version:
PostCSS plugin that enables @if statements in your CSS
53 lines (41 loc) • 1.27 kB
JavaScript
;
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;