zss-engine
Version:
Zero-runtime StyleSheet Engine
40 lines (39 loc) • 1.38 kB
JavaScript
export function isHashInStyleSheets(hash) {
const sheets = Array.from(document.styleSheets);
function checkRule(rule) {
if (rule instanceof CSSStyleRule && rule.selectorText) {
return hasHashInSelector(rule.selectorText, hash);
}
if (rule instanceof CSSMediaRule) {
return Array.from(rule.cssRules).some(checkRule);
}
if (rule instanceof CSSContainerRule) {
return Array.from(rule.cssRules).some(checkRule);
}
if (rule instanceof CSSSupportsRule) {
return Array.from(rule.cssRules).some(checkRule);
}
if ('cssRules' in rule && rule.cssRules) {
return Array.from(rule.cssRules).some(checkRule);
}
return false;
}
function hasHashInSelector(selectorText, hash) {
const selectors = selectorText.split(',').map(s => s.trim());
return selectors.some(selector => {
const classPattern = new RegExp(`\\.${escapeRegExp(hash)}(?![\\w-])`);
return classPattern.test(selector);
});
}
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
return sheets.some(sheet => {
try {
return Array.from(sheet.cssRules).some(checkRule);
}
catch (_err) {
return false;
}
});
}