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.
73 lines
1.9 KiB
73 lines
1.9 KiB
'use strict'; |
|
|
|
const cssTree = require('css-tree'); |
|
const utils = require('./utils.cjs'); |
|
|
|
function cleanAtrule(node, item, list) { |
|
if (node.block) { |
|
// otherwise removed at-rule don't prevent @import for removal |
|
if (this.stylesheet !== null) { |
|
this.stylesheet.firstAtrulesAllowed = false; |
|
} |
|
|
|
if (utils.hasNoChildren(node.block)) { |
|
list.remove(item); |
|
return; |
|
} |
|
} |
|
|
|
switch (node.name) { |
|
case 'charset': |
|
if (utils.hasNoChildren(node.prelude)) { |
|
list.remove(item); |
|
return; |
|
} |
|
|
|
// if there is any rule before @charset -> remove it |
|
if (item.prev) { |
|
list.remove(item); |
|
return; |
|
} |
|
|
|
break; |
|
|
|
case 'import': |
|
if (this.stylesheet === null || !this.stylesheet.firstAtrulesAllowed) { |
|
list.remove(item); |
|
return; |
|
} |
|
|
|
// if there are some rules that not an @import or @charset before @import |
|
// remove it |
|
list.prevUntil(item.prev, function(rule) { |
|
if (rule.type === 'Atrule') { |
|
if (rule.name === 'import' || rule.name === 'charset') { |
|
return; |
|
} |
|
} |
|
|
|
this.root.firstAtrulesAllowed = false; |
|
list.remove(item); |
|
|
|
return true; |
|
}, this); |
|
|
|
break; |
|
|
|
default: { |
|
const name = cssTree.keyword(node.name).basename; |
|
|
|
if (name === 'keyframes' || |
|
name === 'media' || |
|
name === 'supports') { |
|
|
|
// drop at-rule with no prelude |
|
if (utils.hasNoChildren(node.prelude) || utils.hasNoChildren(node.block)) { |
|
list.remove(item); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
module.exports = cleanAtrule;
|
|
|