git.iko.soy/typeable/elm-ui
on 04efdd2 help sign in
47 lines 1.2 kB history raw
1(function () {
2 var ruleCache = new Set()
4 function createStyleNode() {
5 const node = document.createElement('style')
6 // Without it, IE will have a broken source order specificity if we
7 // insert rules after we insert the style tag.
8 // It seems to kick-off the source order specificity algorithm.
9 node.textContent = '\n'
10 document.head.appendChild(node);
11 return node
12 }
14 var staticSheet = createStyleNode();
15 var sheet = createStyleNode().sheet;
17 function sync_static(newStyleString) {
18 staticSheet.textContent = newStyleString
19 }
21 function sync(newStyles) {
22 Object.keys(newStyles).forEach((key) => {
23 if (!ruleCache.has(key)) {
24 const newRule = newStyles[key]
25 for (var i = 0; i < newRule.length; i++) {
26 sheet.insertRule(newRule[i])
27 }
28 ruleCache.add(key)
29 }
30 });
31 }
33 class CssRulesNode extends HTMLElement {
34 set rules(rules) {
35 sync(rules);
36 }
37 }
38 customElements.define('elm-ui-rules', CssRulesNode);
40 class CssStaticRulesNode extends HTMLElement {
41 set rules(rules) {
42 sync_static(rules);
43 }
44 }
45 customElements.define('elm-ui-static-rules', CssStaticRulesNode);
47}())