-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcssr.js
More file actions
56 lines (48 loc) · 1.4 KB
/
Copy pathcssr.js
File metadata and controls
56 lines (48 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
(() => {
if (document.__cssr_mo) return;
let styleEl = document.head.appendChild(document.createElement("style"));
let gen = new Set();
let newRules = [];
let processNode = (node) => {
(node.getAttribute("class") || "")
.split(/\s+/)
.filter((t) => t.includes(":"))
.forEach((token) => {
if (gen.has(token)) return;
let [prop, val] = token.split(/:(.+)/);
let cssValue = val.replace(/_/g, " ");
if (!CSS.supports(prop, cssValue)) {
console.warn(`Unsupported CSS: ${prop}: ${cssValue}`);
return;
}
let rule = `.${CSS.escape(token)} { ${prop}: ${cssValue}; }`;
newRules.push(rule);
gen.add(token);
});
};
let updateStyle = () => {
if (newRules.length > 0) {
styleEl.textContent += "\n" + newRules.join("\n");
newRules = [];
}
};
let processTree = (root) => {
root.querySelectorAll('[class*=":"]').forEach((node) => processNode(node));
updateStyle();
};
document.__cssr_mo = new MutationObserver((muts) => {
muts.forEach((m) =>
m.addedNodes.forEach(
(n) => n.nodeType === 1 && (processNode(n), processTree(n))
)
);
updateStyle();
});
document.addEventListener("DOMContentLoaded", () => {
processTree(document.body);
document.__cssr_mo.observe(document.body, {
childList: true,
subtree: true,
});
});
})();