|
|
@@ -129,9 +129,9 @@ this.RulesMatcher = this.RulesMatcher || (() => {
|
|
|
|
|
|
function getMatchedElementsSelector(doc, ruleData, matchedElementsCache) {
|
|
|
let selectorText;
|
|
|
- const selectorContainsPseudo = containsPseudo(ruleData.selectorText);
|
|
|
- if (selectorContainsPseudo) {
|
|
|
- selectorText = getFilteredSelector(ruleData.selectorText);
|
|
|
+ const filteredSelectorText = getFilteredSelector(ruleData.selectorText);
|
|
|
+ if (filteredSelectorText != ruleData.selectorText) {
|
|
|
+ selectorText = filteredSelectorText;
|
|
|
} else {
|
|
|
selectorText = ruleData.selectorText;
|
|
|
}
|
|
|
@@ -141,7 +141,7 @@ this.RulesMatcher = this.RulesMatcher || (() => {
|
|
|
matchedElementsCache.set(selectorText, matchedElements);
|
|
|
}
|
|
|
if (matchedElements.length) {
|
|
|
- if (selectorContainsPseudo) {
|
|
|
+ if (filteredSelectorText != ruleData.selectorText) {
|
|
|
ruleData.mediaInfo.pseudoSelectors.add(ruleData.cssRule.selectorText);
|
|
|
matchedElements.forEach(element => addPseudoRule(element, ruleData));
|
|
|
} else {
|
|
|
@@ -297,19 +297,21 @@ this.RulesMatcher = this.RulesMatcher || (() => {
|
|
|
}
|
|
|
|
|
|
function getFilteredSelector(selector) {
|
|
|
+ if (selector.includes(":not(:focus")) {
|
|
|
+ debugger
|
|
|
+ }
|
|
|
const selectors = cssWhat.parse(selector);
|
|
|
return cssWhat.stringify(selectors.map(selector => filterPseudoClasses(selector)));
|
|
|
|
|
|
- function filterPseudoClasses(selector) {
|
|
|
+ function filterPseudoClasses(selector, negatedData) {
|
|
|
const tokens = selector.filter(token => {
|
|
|
if (token.data) {
|
|
|
if (Array.isArray(token.data)) {
|
|
|
- token.data = token.data.map(selector => filterPseudoClasses(selector));
|
|
|
+ token.data = token.data.map(selector => filterPseudoClasses(selector, token.name == "not" && token.type == "pseudo"));
|
|
|
}
|
|
|
}
|
|
|
- const test = ((token.type != "pseudo" || !PSEUDOS_CLASSES.includes(":" + token.name))
|
|
|
+ return negatedData || ((token.type != "pseudo" || !PSEUDOS_CLASSES.includes(":" + token.name))
|
|
|
&& (token.type != "pseudo-element"));
|
|
|
- return test;
|
|
|
});
|
|
|
let insertedTokens = 0;
|
|
|
tokens.forEach((token, index) => {
|
|
|
@@ -327,22 +329,6 @@ this.RulesMatcher = this.RulesMatcher || (() => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- function containsPseudo(selectorText) {
|
|
|
- let ignoredPseudo;
|
|
|
- if (selectorText.includes("::")) {
|
|
|
- ignoredPseudo = true;
|
|
|
- } else {
|
|
|
- let pseudoIndex = 0;
|
|
|
- while (pseudoIndex < PSEUDOS_CLASSES.length && !ignoredPseudo) {
|
|
|
- ignoredPseudo = selectorText.includes(PSEUDOS_CLASSES[pseudoIndex]);
|
|
|
- if (!ignoredPseudo) {
|
|
|
- pseudoIndex++;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return ignoredPseudo;
|
|
|
- }
|
|
|
-
|
|
|
function log(...args) {
|
|
|
console.log("S-File <css-mat>", ...args); // eslint-disable-line no-console
|
|
|
}
|