|
112 | 112 | "options.ui.look.colors.messages.link-visited" : cssLinkVisited
|
113 | 113 | }
|
114 | 114 |
|
| 115 | + var sstyle = document.getElementById('scrollStyle'); |
| 116 | + if (sstyle && document.body.contains(sstyle)) { |
| 117 | + document.body.removeChild(sstyle); |
| 118 | + } |
| 119 | + var scrollStyle = document.createElement('style'); |
| 120 | + scrollStyle.type = 'text/css'; |
| 121 | + scrollStyle.id = 'scrollStyle'; |
| 122 | + |
| 123 | + function setScrollBarElemStyle(element, style) { |
| 124 | + return element + " { background-color: " + style.backgroundColor +"; border: " + style.border + "; border-radius: " + style.borderRadius + "; } "; |
| 125 | + } |
| 126 | + |
115 | 127 | var applyPsiSettings = function() {
|
116 | 128 | util.getFont(function(cssFont){util.updateObject(cssBody, cssFont)});
|
117 | 129 | util.getPaletteColor("Base", function(color){cssBody.backgroundColor = color});
|
|
136 | 148 | shared.chatElement.removeChild(d);
|
137 | 149 | }
|
138 | 150 | });
|
139 |
| - } |
140 |
| - |
141 |
| - // This function converts string to CSSStyleSheet |
142 |
| - function CSSString2CSSStyleSheet ( css ) { |
143 |
| - const style = document.createElement ( 'style' ); |
144 |
| - style.innerText = css; |
145 |
| - document.head.appendChild ( style ); |
146 |
| - const {sheet} = style; |
147 |
| - document.head.removeChild ( style ); |
148 |
| - return sheet; |
149 |
| - } |
150 | 151 |
|
151 |
| - function setScrollBarElemStyle(element, style) { |
152 |
| - return element + " { background-color: " + style.backgroundColor +"; border: " + style.border + "; border-radius: " + style.borderRadius + "; }"; |
153 |
| - } |
154 |
| - |
155 |
| - //set chat scrollbar style from qstylesheet |
156 |
| - util.psiOption("options.ui.chat.css", function(val) { |
157 |
| - if (!val) { return; } |
158 |
| - //replace :: symbols by _ to parse qss |
159 |
| - var fixedText = val.replace(/::/g, "_"); |
160 |
| - const opCSSRules = CSSString2CSSStyleSheet(fixedText.toLowerCase()); |
161 |
| - for (let i=0; i < opCSSRules.cssRules.length; i++) { |
162 |
| - const rule = opCSSRules.cssRules[i]; |
163 |
| - const ruleText = rule.cssText; |
164 |
| - const ruleStyle = rule.style; |
165 |
| - if (ruleText.startsWith("qscrollbar_handle:hover")) { |
166 |
| - var newRule = setScrollBarElemStyle("body::-webkit-scrollbar-thumb:hover", ruleStyle); |
167 |
| - themeStyle.insertRule(newRule, themeStyle.cssRules.length); |
168 |
| - } else |
169 |
| - if (ruleText.startsWith("qscrollbar_handle") && !ruleText.includes("hover")) { |
170 |
| - var newRule = setScrollBarElemStyle("body::-webkit-scrollbar-thumb", ruleStyle); |
171 |
| - themeStyle.insertRule(newRule, themeStyle.cssRules.length); |
172 |
| - } else |
173 |
| - if (ruleText.startsWith("qscrollbar:vertical") && !ruleText.includes("hover")) { |
174 |
| - //count scrollbar width in pexels: width - left margin - right margin |
175 |
| - var cssWidth = parseInt(ruleStyle.width) - (parseInt(ruleStyle.marginLeft) + parseInt(ruleStyle.marginRight)); |
176 |
| - var newRule = "body::-webkit-scrollbar { width: " + cssWidth + "px; }"; |
177 |
| - themeStyle.insertRule(newRule, themeStyle.cssRules.length); |
178 |
| - } else |
179 |
| - if (ruleText.startsWith("qscrollbar:vertical:hover")) { |
180 |
| - var newRule = setScrollBarElemStyle("body::-webkit-scrollbar-track:hover", ruleStyle); |
181 |
| - themeStyle.insertRule(newRule, themeStyle.cssRules.length); |
182 |
| - } else |
183 |
| - if (ruleText.startsWith("qscrollbar") && !ruleText.includes("horizontal") && !ruleText.includes("_")) { |
184 |
| - var newRule = setScrollBarElemStyle("body::-webkit-scrollbar-track, body::-webkit-scrollbar", ruleStyle); |
185 |
| - themeStyle.insertRule(newRule, themeStyle.cssRules.length); |
| 152 | + //set chat scrollbar style from qstylesheet |
| 153 | + util.psiOption("options.ui.chat.css", function(val) { |
| 154 | + scrollStyle.innerText = ""; |
| 155 | + if (!val) { return; } |
| 156 | + //replace :: symbols by _ to parse qss |
| 157 | + var tmpText = val.replace(/::/g, "_"); |
| 158 | + var fixedText = tmpText.replace(/qframe#log/gi, "qframe_log"); |
| 159 | + const opCSSRules = util.CSSString2CSSStyleSheet(fixedText.toLowerCase()); |
| 160 | + var scrollCSS = ""; |
| 161 | + for (let i=0; i < opCSSRules.cssRules.length; i++) { |
| 162 | + const rule = opCSSRules.cssRules[i]; |
| 163 | + const ruleText = rule.cssText; |
| 164 | + const ruleStyle = rule.style; |
| 165 | + if (ruleText.startsWith("qscrollbar_handle:hover")) { |
| 166 | + scrollCSS += setScrollBarElemStyle("body::-webkit-scrollbar-thumb:hover", ruleStyle); |
| 167 | + } else |
| 168 | + if (ruleText.startsWith("qscrollbar_handle") && !ruleText.includes("hover")) { |
| 169 | + scrollCSS += setScrollBarElemStyle("body::-webkit-scrollbar-thumb", ruleStyle); |
| 170 | + } else |
| 171 | + if (ruleText.startsWith("qscrollbar:vertical") && !ruleText.includes("hover")) { |
| 172 | + //count scrollbar width in pexels: width - left margin - right margin |
| 173 | + var cssWidth = parseInt(ruleStyle.width) - (parseInt(ruleStyle.marginLeft) + parseInt(ruleStyle.marginRight)); |
| 174 | + scrollCSS += "body::-webkit-scrollbar { width: " + cssWidth + "px; } "; |
| 175 | + } else |
| 176 | + if (ruleText.startsWith("qscrollbar:vertical:hover")) { |
| 177 | + scrollCSS += setScrollBarElemStyle("body::-webkit-scrollbar-track:hover", ruleStyle); |
| 178 | + } else |
| 179 | + if (ruleText.startsWith("qscrollbar") && !ruleText.includes("horizontal") && !ruleText.includes("_")) { |
| 180 | + scrollCSS += setScrollBarElemStyle("body::-webkit-scrollbar-track, body::-webkit-scrollbar", ruleStyle); |
| 181 | + } |
| 182 | + if (ruleText.startsWith("qframe_log")) { |
| 183 | + var chatBgColor = ruleStyle.backgroundColor; |
| 184 | + var chatBrdColor = ruleStyle.borderColor; |
| 185 | + var trackbarTmp = "hr { height:1px; border:1px solid black; border-color:" + chatBgColor + " " + chatBrdColor + " " + chatBrdColor + " " + chatBgColor + ";} "; |
| 186 | + scrollCSS += trackbarTmp; |
| 187 | + } |
186 | 188 | }
|
187 |
| - } |
188 |
| - }); |
| 189 | + scrollStyle.innerText = scrollCSS; |
| 190 | + }); |
| 191 | + } |
189 | 192 |
|
190 | 193 | shared.initTheme({
|
191 | 194 | chatElement : document.body,
|
|
275 | 278 | });
|
276 | 279 |
|
277 | 280 | applyPsiSettings();
|
| 281 | + document.body.appendChild(scrollStyle); |
278 | 282 |
|
279 | 283 | shared.session.signalInited();
|
280 | 284 |
|
|
0 commit comments