logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://anongit.hacktivis.me/git/pleroma-fe.git/
commit: 6a1a3ebf13f1869d652669b424fbbf72749a4559
parent 6bf6d102ef56cafd880bdbe732ae3f2300464d9a
Author: Henry Jameson <me@hjkos.com>
Date:   Thu, 26 Dec 2024 23:45:43 +0200

update to palettes GUI + disable theme-setting stuff while change is in progress

Diffstat:

Msrc/components/palette_editor/palette_editor.vue4+++-
Msrc/components/settings_modal/tabs/appearance_tab.js3+++
Msrc/components/settings_modal/tabs/appearance_tab.scss30+++++++++++++++++++++---------
Msrc/components/settings_modal/tabs/appearance_tab.vue110++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Msrc/modules/interface.js7++++++-
5 files changed, 94 insertions(+), 60 deletions(-)

diff --git a/src/components/palette_editor/palette_editor.vue b/src/components/palette_editor/palette_editor.vue @@ -30,6 +30,8 @@ v-if="apply" class="btn button-default palette-apply-button" @click="applyPalette" + :disabled="disabled" + :class="{ disabled }" > {{ $t('settings.style.themes3.palette.apply') }} </button> @@ -67,7 +69,7 @@ const paletteKeys = [ 'wallpaper' ] -const props = defineProps(['modelValue', 'compact', 'apply']) +const props = defineProps(['modelValue', 'compact', 'apply', 'disabled']) const emit = defineEmits(['update:modelValue', 'applyPalette']) const getExportedObject = () => paletteKeys.reduce((acc, key) => { const value = props.modelValue[key] diff --git a/src/components/settings_modal/tabs/appearance_tab.js b/src/components/settings_modal/tabs/appearance_tab.js @@ -186,6 +186,9 @@ const AppearanceTab = { } }, computed: { + switchInProgress () { + return this.$store.state.interface.themeChangeInProgress + }, paletteDataUsed () { return this.$store.state.interface.paletteDataUsed }, diff --git a/src/components/settings_modal/tabs/appearance_tab.scss b/src/components/settings_modal/tabs/appearance_tab.scss @@ -20,14 +20,25 @@ } } + h4 { + margin: 0.5em 0; + } + .palettes { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 0.5em; + height: 15em; + overflow-y: auto; + overflow-x: hidden; + scrollbar-gutter: stable; + border-radius: var(--roundness); + border: 1px solid var(--border); + margin: -0.5em; + padding: 0.5em; - h4, - .unsupported-theme-v2, - .userPalette { + h4 { + margin: 0; grid-column: 1 / span 2; } } @@ -37,6 +48,7 @@ align-items: center; justify-content: space-between; padding: 0 0.5em; + height: 2.5em; .palette-label label { text-align: center; @@ -73,13 +85,13 @@ margin-top: 0.5em; width: 100%; } + } - .palette-preview { - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; - grid-template-rows: 1em 1em; - margin-bottom: 0.5em; - } + .palette-preview { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-template-rows: 1em 1em; + margin: 0.5em 0; } .theme-list { diff --git a/src/components/settings_modal/tabs/appearance_tab.vue b/src/components/settings_modal/tabs/appearance_tab.vue @@ -12,8 +12,9 @@ <button class="button-default theme-preview" data-theme-key="stock" - :class="{ toggled: isStyleActive('stock') }" @click="resetTheming" + :class="{ toggled: isStyleActive('stock'), disabled: switchInProgress }" + :disabled="switchInProgress" > <!-- eslint-disable vue/no-v-text-v-html-on-component --> <!-- eslint-disable vue/no-v-html --> @@ -56,8 +57,9 @@ :key="style.key" :data-theme-key="style.key" class="button-default theme-preview" - :class="{ toggled: isStyleActive(style.key) }" + :class="{ toggled: isStyleActive(style.key), disabled: switchInProgress }" @click="style.version === 'v2' ? setTheme(style.key) : setStyle(style.key)" + :disabled="switchInProgress" > <!-- eslint-disable vue/no-v-text-v-html-on-component --> <!-- eslint-disable vue/no-v-html --> @@ -80,6 +82,8 @@ <button class="btn button-default" @click="importFile" + :class="{ disabled: switchInProgress }" + :disabled="switchInProgress" > <FAIcon icon="folder-open" /> {{ $t('settings.style.themes3.editor.load_style') }} @@ -87,54 +91,61 @@ </div> <div class="setting-item"> <h2>{{ $t('settings.style.themes3.palette.label') }}</h2> - <div class="palettes"> + <div + v-if="customThemeVersion === 'v3'" + class="palettes" + > + <h4 v-if="stylePalettes?.length > 0"> + {{ $t('settings.style.themes3.palette.style') }} + </h4> + <button + v-for="p in stylePalettes || []" + :key="p.name" + class="btn button-default palette-entry" + :class="{ toggled: isPaletteActive(p.key), disabled: switchInProgress }" + :disabled="switchInProgress" + @click="() => setPalette(p.key, p)" + > + <div class="palette-label"> + <label> + {{ p.name ?? $t('settings.style.themes3.palette.user') }} + </label> + </div> + <div class="palette-preview"> + <span + v-for="c in palettesKeys" + :key="c" + class="palette-square" + :style="{ backgroundColor: p[c], border: '1px solid ' + (p[c] ?? 'var(--text)') }" + /> + </div> + </button> + <h4>{{ $t('settings.style.themes3.palette.bundled') }}</h4> + <button + v-for="p in bundledPalettes" + :key="p.name" + class="btn button-default palette-entry" + :class="{ toggled: isPaletteActive(p.key), disabled: switchInProgress }" + :disabled="switchInProgress" + @click="() => setPalette(p.key, p)" + > + <div class="palette-label"> + <label> + {{ p.name }} + </label> + </div> + <div class="palette-preview"> + <span + v-for="c in palettesKeys" + :key="c" + class="palette-square" + :style="{ backgroundColor: p[c], border: '1px solid ' + (p[c] ?? 'var(--text)') }" + /> + </div> + </button> + </div> + <div> <template v-if="customThemeVersion === 'v3'"> - <h4>{{ $t('settings.style.themes3.palette.bundled') }}</h4> - <button - v-for="p in bundledPalettes" - :key="p.name" - class="btn button-default palette-entry" - :class="{ toggled: isPaletteActive(p.key) }" - @click="() => setPalette(p.key, p)" - > - <div class="palette-label"> - <label> - {{ p.name }} - </label> - </div> - <div class="palette-preview"> - <span - v-for="c in palettesKeys" - :key="c" - class="palette-square" - :style="{ backgroundColor: p[c], border: '1px solid ' + (p[c] ?? 'var(--text)') }" - /> - </div> - </button> - <h4 v-if="stylePalettes?.length > 0"> - {{ $t('settings.style.themes3.palette.style') }} - </h4> - <button - v-for="p in stylePalettes || []" - :key="p.name" - class="btn button-default palette-entry" - :class="{ toggled: isPaletteActive(p.key) }" - @click="() => setPalette(p.key, p)" - > - <div class="palette-label"> - <label> - {{ p.name ?? $t('settings.style.themes3.palette.user') }} - </label> - </div> - <div class="palette-preview"> - <span - v-for="c in palettesKeys" - :key="c" - class="palette-square" - :style="{ backgroundColor: p[c], border: '1px solid ' + (p[c] ?? 'var(--text)') }" - /> - </div> - </button> <h4 v-if="expertLevel > 0"> {{ $t('settings.style.themes3.palette.user') }} </h4> @@ -145,6 +156,7 @@ :compact="true" :apply="true" @applyPalette="data => setPaletteCustom(data)" + :disabled="switchInProgress" /> </template> <template v-else-if="customThemeVersion === 'v2'"> diff --git a/src/modules/interface.js b/src/modules/interface.js @@ -10,6 +10,7 @@ const toValue = (x) => JSON.parse(JSON.stringify(x === undefined ? 'null' : x)) const defaultState = { localFonts: null, themeApplied: false, + themeChangeInProgress: false, themeVersion: 'v3', styleNameUsed: null, styleDataUsed: null, @@ -556,11 +557,13 @@ const interfaceMod = { themeDebug, theme3hacks } = rootState.config + state.themeChangeInProgress = true // If we're not not forced to recompile try using // cache (tryLoadCache return true if load successful) const forceRecompile = forceThemeRecompilation || recompile if (!forceRecompile && !themeDebug && await tryLoadCache()) { + state.themeChangeInProgress = false return commit('setThemeApplied') } window.splashUpdate('splash.theme') @@ -669,7 +672,9 @@ const interfaceMod = { return applyTheme( rulesetArray.flat(), () => commit('setThemeApplied'), - () => {}, + () => { + state.themeChangeInProgress = false + }, themeDebug ) } catch (e) {