From fb054ee846a61ee10ac808aed86e749fb52a341f Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 2 Jul 2025 18:04:50 +0300 Subject: [PATCH] unifification and testing --- index.html | 11 --- .../tabs/style_tab/style_tab.js | 2 +- src/services/style_setter/style_setter.js | 89 +++++++++---------- 3 files changed, 45 insertions(+), 57 deletions(-) diff --git a/index.html b/index.html index 899a0efd3..9e0d58c66 100644 --- a/index.html +++ b/index.html @@ -11,17 +11,6 @@ - - - - - - - - - - - diff --git a/src/components/settings_modal/tabs/style_tab/style_tab.js b/src/components/settings_modal/tabs/style_tab/style_tab.js index bdab78a5a..08a3ab366 100644 --- a/src/components/settings_modal/tabs/style_tab/style_tab.js +++ b/src/components/settings_modal/tabs/style_tab/style_tab.js @@ -695,7 +695,7 @@ export default { return } - const styleSheet = createStyleSheet('editor-overall-holder') + const styleSheet = createStyleSheet('editor-overall-holder').sheet styleSheet.insertRule([ '#edited-style-preview {\n', diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index a68978a9d..11831acf7 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -8,8 +8,6 @@ import localforage from 'localforage' // Otherwise it will return an array const supportsAdoptedStyleSheets = false //!!document.adoptedStyleSheets -const adoptedStyleSheets = {} - export const createStyleSheet = (id) => { if (supportsAdoptedStyleSheets) { return { @@ -23,15 +21,47 @@ export const createStyleSheet = (id) => { if (!el?.sheet) { el = document.getElementById(id + '-link') } + console.log(el) + const sheet = el.sheet // Clear all rules in it - for (let i = el.sheet.cssRules.length - 1; i >= 0; --i) { - el.sheet.deleteRule(i) + for (let i = sheet.cssRules.length - 1; i >= 0; --i) { + sheet.deleteRule(i) } + const rules = [] return { el, - sheet: el.sheet, - rules: [] + rules, + sheet, + add (rule) { + try { + try { + sheet.insertRule(rule, 'index-max') + rules.push(rule) + } catch { + // Fallback for older browsers that don't support 'index-max' + sheet.insertRule(rule, sheet.cssRules.length) + rules.push(rule) + } + } catch (e) { + console.warn('Can\'t insert rule due to lack of support', e, rule) + + // Try to sanitize the rule for better compatibility + try { + // Remove any potentially problematic CSS features + let sanitizedRule = rule + .replace(/backdrop-filter:[^;]+;/g, '') // Remove backdrop-filter + .replace(/var\(--shadowFilter\)[^;]*;/g, '') // Remove shadowFilter references + + if (sanitizedRule !== rule) { + sheet.insertRule(sanitizedRule, sheet.cssRules.length) + rules.push(sanitizedRule) + } + } catch (e2) { + console.error('Failed to insert even sanitized rule', e2) + } + } + } } } @@ -103,8 +133,8 @@ export const tryLoadCache = async () => { const eagerStyles = createStyleSheet(EAGER_STYLE_ID) const lazyStyles = createStyleSheet(LAZY_STYLE_ID) - cache.data[0].forEach(rule => eagerStyles.sheet.insertRule(rule, 'index-max')) - cache.data[1].forEach(rule => lazyStyles.sheet.insertRule(rule, 'index-max')) + cache.data[0].forEach(rule => eagerStyles.add(rule)) + cache.data[1].forEach(rule => lazyStyles.add(rule)) adoptStyleSheets([eagerStyles, lazyStyles]) @@ -129,45 +159,14 @@ export const applyTheme = ( const eagerStyles = createStyleSheet(EAGER_STYLE_ID) const lazyStyles = createStyleSheet(LAZY_STYLE_ID) - const insertRule = (styles, rule) => { - try { - // Try to use modern syntax first - try { - styles.sheet.insertRule(rule, 'index-max') - styles.rules.push(rule) - } catch { - // Fallback for older browsers that don't support 'index-max' - styles.sheet.insertRule(rule, styles.sheet.cssRules.length) - styles.rules.push(rule) - } - } catch (e) { - console.warn('Can\'t insert rule due to lack of support', e, rule) - - // Try to sanitize the rule for better compatibility - try { - // Remove any potentially problematic CSS features - let sanitizedRule = rule - .replace(/backdrop-filter:[^;]+;/g, '') // Remove backdrop-filter - .replace(/var\(--shadowFilter\)[^;]*;/g, '') // Remove shadowFilter references - - if (sanitizedRule !== rule) { - styles.sheet.insertRule(sanitizedRule, styles.sheet.cssRules.length) - styles.rules.push(sanitizedRule) - } - } catch (e2) { - console.error('Failed to insert even sanitized rule', e2) - } - } - } - const { lazyProcessFunc } = generateTheme( input, { onNewRule (rule, isLazy) { if (isLazy) { - insertRule(lazyStyles, rule) + lazyStyles.add(rule) } else { - insertRule(eagerStyles, rule) + eagerStyles.add(rule) } }, onEagerFinished () { @@ -245,15 +244,15 @@ export const applyConfig = (input) => { .filter(([, v]) => v) .map(([k, v]) => `--${k}: ${v}`).join(';') - const styleSheet = createStyleSheet(THEME_HOLDER_ID).sheet + const styleSheet = createStyleSheet(THEME_HOLDER_ID) - styleSheet.insertRule(`:root { ${rules} }`, 'index-max') + styleSheet.add(`:root { ${rules} }`) // TODO find a way to make this not apply to theme previews if (Object.prototype.hasOwnProperty.call(config, 'forcedRoundness')) { - styleSheet.insertRule(` *:not(.preview-block) { + styleSheet.add(` *:not(.preview-block) { --roundness: var(--forcedRoundness) !important; - }`, 'index-max') + }`) } }