mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-01 01:38:07 +08:00
These packages will be used to dynamically optimize SVG images during the build. R=jacktfranklin@chromium.org Bug: 1216402 Change-Id: I04e95aa7d79c9d67beaf8a7861182c52b16b7d0f Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2939992 Reviewed-by: Jack Franklin <jacktfranklin@chromium.org> Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
module.exports = function specificity(simpleSelector) {
|
|
var A = 0;
|
|
var B = 0;
|
|
var C = 0;
|
|
|
|
simpleSelector.children.each(function walk(node) {
|
|
switch (node.type) {
|
|
case 'SelectorList':
|
|
case 'Selector':
|
|
node.children.each(walk);
|
|
break;
|
|
|
|
case 'IdSelector':
|
|
A++;
|
|
break;
|
|
|
|
case 'ClassSelector':
|
|
case 'AttributeSelector':
|
|
B++;
|
|
break;
|
|
|
|
case 'PseudoClassSelector':
|
|
switch (node.name.toLowerCase()) {
|
|
case 'not':
|
|
node.children.each(walk);
|
|
break;
|
|
|
|
case 'before':
|
|
case 'after':
|
|
case 'first-line':
|
|
case 'first-letter':
|
|
C++;
|
|
break;
|
|
|
|
// TODO: support for :nth-*(.. of <SelectorList>), :matches(), :has()
|
|
default:
|
|
B++;
|
|
}
|
|
break;
|
|
|
|
case 'PseudoElementSelector':
|
|
C++;
|
|
break;
|
|
|
|
case 'TypeSelector':
|
|
// ignore universal selector
|
|
if (node.name.charAt(node.name.length - 1) !== '*') {
|
|
C++;
|
|
}
|
|
break;
|
|
|
|
}
|
|
});
|
|
|
|
return [A, B, C];
|
|
};
|