feature(zenThemesImporter): add string type theme property writing to dom on startup

This commit is contained in:
Bryan Galdámez 2024-09-16 01:21:00 -06:00
parent b9c35455ad
commit a1072db227

View file

@ -145,7 +145,9 @@ var gZenThemeImporter = new (class {
const browser = this._getBrowser(); const browser = this._getBrowser();
for (const theme of Object.values(await this.getThemes())) { for (const theme of Object.values(await this.getThemes())) {
const { preferences, areOldPreferences } = await this._getThemePreferences(theme); const { preferences, areOldPreferences } = (await this._getThemePreferences(theme)).filter(
({ type }) => type !== 'checkbox'
);
const sanitizedName = `theme-${theme.name?.replaceAll(/\s/g, '-')?.replaceAll(/[^A-z_-]+/g, '')}`; const sanitizedName = `theme-${theme.name?.replaceAll(/\s/g, '-')?.replaceAll(/[^A-z_-]+/g, '')}`;
if (!theme.enabled) { if (!theme.enabled) {
@ -155,6 +157,10 @@ var gZenThemeImporter = new (class {
element.remove(); element.remove();
} }
if (document.querySelector(':root').style.hasProperty(`--${sanitizedProperty}`)) {
document.querySelector(':root').style.removeProperty(`--${sanitizedProperty}`);
}
continue; continue;
} }
@ -162,11 +168,12 @@ var gZenThemeImporter = new (class {
continue; continue;
} }
const themePreferences = preferences.filter(({ type }) => type === 'dropdown'); for (const { property, type } of preferences) {
for (const { property } of themePreferences) {
const value = Services.prefs.getStringPref(property, ''); const value = Services.prefs.getStringPref(property, '');
const sanitizedProperty = property?.replaceAll(/\./g, '-');
switch (type) {
case 'dropdown': {
if (value !== '') { if (value !== '') {
let element = browser.document.getElementById(sanitizedName); let element = browser.document.getElementById(sanitizedName);
@ -179,7 +186,22 @@ var gZenThemeImporter = new (class {
browser.document.body.appendChild(element); browser.document.body.appendChild(element);
} }
element.setAttribute(property?.replaceAll(/\./g, '-'), value); element.setAttribute(sanitizedProperty, value);
}
break;
}
case 'string': {
if (value === '') {
document.querySelector(':root').style.removeProperty(`--${sanitizedProperty}`);
} else {
document.querySelector(':root').style.setProperty(`--${sanitizedProperty}`, value);
}
break;
}
default: {
}
} }
} }
} }