MCPcopy
hub / github.com/winjs/winjs / scheduleWriteRules

Function scheduleWriteRules

src/js/WinJS/_Accents.ts:110–168  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

108//
109
110function scheduleWriteRules() {
111 if (rules.length === 0 || writeRulesTOHandle !== -1) {
112 return;
113 }
114 writeRulesTOHandle = _BaseUtils._setImmediate(() => {
115 writeRulesTOHandle = -1;
116 cleanup();
117
118 var inverseThemeSelector = isDarkTheme ? Constants.lightThemeSelector : Constants.darkThemeSelector;
119 var inverseThemeHoverSelector = Constants.hoverSelector + " " + inverseThemeSelector;
120
121 var style = _Global.document.createElement("style");
122 style.id = Constants.accentStyleId;
123 style.textContent = rules.map(rule => {
124 // example rule: { selector: " .foo, html.win-hoverable .bar:hover , div:hover ", props: [{ name: "color", value: 0 }, { name: "background-color", value: 1 } }
125
126 var body = " " + rule.props.map(prop => prop.name + ": " + colors[prop.value] + ";").join("\n ");
127 // body = color: *accent*; background-color: *listSelectHover*
128
129 var selectorSplit = rule.selector.split(",").map(str => sanitizeSpaces(str)); // [".foo", ".bar:hover", "div"]
130 var selector = selectorSplit.join(",\n"); // ".foo, html.win-hoverable .bar:hover, div:hover"
131 var css = selector + " {\n" + body + "\n}";
132 // css = .foo, html.win-hoverable .bar:hover, div:hover { *body* }
133
134 // Inverse Theme Selectors
135 var isThemedColor = rule.props.some(prop => prop.value !== ColorTypes.accent)
136 if (isThemedColor) {
137 var inverseBody = " " + rule.props.map(prop => prop.name + ": " + colors[(prop.value ? (prop.value + 3) : prop.value)] + ";").join("\n ");
138 // inverseBody = "color: *accent*; background-color: *listSelectHoverInverse"
139
140 var themedSelectors: string[] = [];
141 selectorSplit.forEach(sel => {
142 if (sel.indexOf(Constants.hoverSelector) !== -1 && sel.indexOf(inverseThemeHoverSelector) === -1) {
143 themedSelectors.push(sel.replace(Constants.hoverSelector, inverseThemeHoverSelector));
144 var selWithoutHover = sel.replace(Constants.hoverSelector, "").trim();
145 if (CSSSelectorTokens.indexOf(selWithoutHover[0]) !== -1) {
146 themedSelectors.push(sel.replace(Constants.hoverSelector + " ", inverseThemeHoverSelector));
147 }
148 } else {
149 themedSelectors.push(inverseThemeSelector + " " + sel);
150 if (CSSSelectorTokens.indexOf(sel[0]) !== -1) {
151 themedSelectors.push(inverseThemeSelector + sel);
152 }
153 }
154 css += "\n" + themedSelectors.join(",\n") + " {\n" + inverseBody + "\n}";
155 });
156 // css
157 //.foo, html.win-hoverable .bar:hover, div:hover, { *body* }
158 //.win-ui-light .foo,
159 //.win-ui-light.foo,
160 //html.win-hoverable .win-ui-light .bar:hover,
161 //html.win-hoverable .win-ui-light.bar:hover,
162 //.win-ui-light div:hover { *inverseBody* }
163 }
164 return css;
165 }).join("\n");
166 _Global.document.head.appendChild(style);
167 });

Callers 2

createAccentRuleFunction · 0.85
handleColorsChangedFunction · 0.85

Calls 13

sanitizeSpacesFunction · 0.85
createElementMethod · 0.80
trimMethod · 0.80
appendChildMethod · 0.80
cleanupFunction · 0.70
joinMethod · 0.65
mapMethod · 0.65
splitMethod · 0.65
someMethod · 0.65
forEachMethod · 0.65
indexOfMethod · 0.65
pushMethod · 0.65

Tested by

no test coverage detected