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.
69 lines
1.9 KiB
69 lines
1.9 KiB
import { keyword as resolveKeyword } from 'css-tree'; |
|
import { hasNoChildren } from './utils.js'; |
|
|
|
export default 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 (hasNoChildren(node.block)) { |
|
list.remove(item); |
|
return; |
|
} |
|
} |
|
|
|
switch (node.name) { |
|
case 'charset': |
|
if (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 = resolveKeyword(node.name).basename; |
|
|
|
if (name === 'keyframes' || |
|
name === 'media' || |
|
name === 'supports') { |
|
|
|
// drop at-rule with no prelude |
|
if (hasNoChildren(node.prelude) || hasNoChildren(node.block)) { |
|
list.remove(item); |
|
} |
|
} |
|
} |
|
} |
|
};
|
|
|