From dbdec60110de1cc59336c926b7b2d6846580a7d9 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 27 Feb 2026 14:46:01 +0200 Subject: [PATCH 1/4] fix emoji size setting not working --- src/components/settings_modal/helpers/setting.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/settings_modal/helpers/setting.js b/src/components/settings_modal/helpers/setting.js index a064e10f4..b17767b3f 100644 --- a/src/components/settings_modal/helpers/setting.js +++ b/src/components/settings_modal/helpers/setting.js @@ -260,7 +260,7 @@ export default { this.$store.dispatch('pushAdminSetting', { path: k, value: v }) default: return (readPath, value) => { - const writePath = `simple.${readPath}` + const writePath = `${readPath}` if (!this.timedApplyMode) { if (this.local) { From 24be3da17ed66b8b08acfe498c4f588e7fab8a42 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 27 Feb 2026 15:08:41 +0200 Subject: [PATCH 2/4] take local config into account for mergedConfig --- src/stores/sync_config.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/stores/sync_config.js b/src/stores/sync_config.js index 479b7a536..c5fa8eada 100644 --- a/src/stores/sync_config.js +++ b/src/stores/sync_config.js @@ -17,7 +17,8 @@ import { toRaw } from 'vue' import { CURRENT_UPDATE_COUNTER } from 'src/components/update_notification/update_notification.js' -import { useInstanceStore } from 'src/stores/instance' +import { useInstanceStore } from 'src/stores/instance.js' +import { useLocalConfigStore } from 'src/stores/local_config.js' import { defaultState as configDefaultState } from 'src/modules/default_config_state' @@ -689,10 +690,11 @@ export const useSyncConfigStore = defineStore('sync_config', { getters: { mergedConfig: (state) => { const instancePrefs = useInstanceStore().prefsStorage + const localPrefs = useLocalConfigStore().prefsStorage const result = Object.fromEntries( Object.entries(state.prefsStorage.simple).map(([k, v]) => [ k, - v ?? instancePrefs[k], + localPrefs[k] ?? v ?? instancePrefs[k], ]), ) return result From 449c244d110dc22d5262fdb5c5386d9e808e9d95 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 27 Feb 2026 15:49:44 +0200 Subject: [PATCH 3/4] work on local-only settings --- .../settings_modal/helpers/setting.js | 1 + .../settings_modal/tabs/general_tab.vue | 1 + src/lib/style.js | 48 ++++++++++++------- src/stores/interface.js | 2 +- src/stores/local_config.js | 12 ----- src/stores/sync_config.js | 3 +- 6 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/components/settings_modal/helpers/setting.js b/src/components/settings_modal/helpers/setting.js index b17767b3f..daa5f9198 100644 --- a/src/components/settings_modal/helpers/setting.js +++ b/src/components/settings_modal/helpers/setting.js @@ -7,6 +7,7 @@ import ProfileSettingIndicator from './profile_setting_indicator.vue' import { useInstanceStore } from 'src/stores/instance.js' import { useInterfaceStore } from 'src/stores/interface.js' import { useSyncConfigStore } from 'src/stores/sync_config.js' +import { useLocalConfigStore } from 'src/stores/local_config.js' export default { components: { diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue index 5aefdc408..3432090f6 100644 --- a/src/components/settings_modal/tabs/general_tab.vue +++ b/src/components/settings_modal/tabs/general_tab.vue @@ -44,6 +44,7 @@ :units="['px', 'rem']" :reset-default="{ 'px': 14, 'rem': 1 }" timed-apply-mode + :local="true" > {{ $t('settings.text_size') }} diff --git a/src/lib/style.js b/src/lib/style.js index 96603925a..3b2d9dad4 100644 --- a/src/lib/style.js +++ b/src/lib/style.js @@ -1,27 +1,39 @@ import { applyStyleConfig } from 'src/services/style_setter/style_setter.js' +import { useSyncConfigStore } from 'src/stores/sync_config.js' -const APPEARANCE_SETTINGS_KEYS = new Set( - [ - 'sidebarColumnWidth', - 'contentColumnWidth', - 'notifsColumnWidth', - 'themeEditorMinWidth', - 'textSize', - 'navbarSize', - 'panelHeaderSize', - 'forcedRoundness', - 'emojiSize', - 'emojiReactionsScale', - ].map((x) => 'simple.' + x), -) +const ACTIONS = new Set([ + 'setPreference', + 'unsetPreference', + 'set', + 'unset', + 'setTemporarily', + 'unsetTemporarily', +]) + +const APPEARANCE_SETTINGS_KEYS = [ + 'sidebarColumnWidth', + 'contentColumnWidth', + 'notifsColumnWidth', + 'themeEditorMinWidth', + 'textSize', + 'navbarSize', + 'panelHeaderSize', + 'forcedRoundness', + 'emojiSize', + 'emojiReactionsScale', +] +const MIXED_KEYS = new Set([ + ...APPEARANCE_SETTINGS_KEYS, + ...APPEARANCE_SETTINGS_KEYS.map((x) => 'simple.' + x), +]) export const piniaStylePlugin = ({ store, options }) => { - if (store.$id === 'sync_config') { + if (store.$id === 'sync_config' || store.$id === 'local_config') { store.$onAction(({ name, args, after }) => { - if (name === 'setPreference') { + if (ACTIONS.has(name)) { const { path } = args[0] - if (APPEARANCE_SETTINGS_KEYS.has(path)) { - after(() => applyStyleConfig(store.mergedConfig)) + if (MIXED_KEYS.has(path)) { + after(() => applyStyleConfig(useSyncConfigStore().mergedConfig)) } } }) diff --git a/src/stores/interface.js b/src/stores/interface.js index 77982f927..ef97011ae 100644 --- a/src/stores/interface.js +++ b/src/stores/interface.js @@ -66,7 +66,7 @@ export const useInterfaceStore = defineStore('interface', { this.temporaryChangesConfirm = confirm this.temporaryChangesRevert = revert const countdownFunc = () => { - if (this.temporaryChangesCountdown === 1) { + if (this.temporaryChangesCountdown <= 1) { this.temporaryChangesRevert() this.clearTemporaryChanges() } else { diff --git a/src/stores/local_config.js b/src/stores/local_config.js index 7b2c5f650..bcf3b1c87 100644 --- a/src/stores/local_config.js +++ b/src/stores/local_config.js @@ -39,18 +39,6 @@ export const useLocalConfigStore = defineStore('local_config', { }) }, }, - getters: { - mergedConfig: (state) => { - const instancePrefs = useInstanceStore().prefsStorage - const result = Object.fromEntries( - Object.entries(state.prefsStorage).map(([k, v]) => [ - k, - state.tempStorage[k] ?? v ?? instancePrefs[k], - ]), - ) - return result - }, - }, persist: { afterLoad(state) { return { diff --git a/src/stores/sync_config.js b/src/stores/sync_config.js index c5fa8eada..b915018d3 100644 --- a/src/stores/sync_config.js +++ b/src/stores/sync_config.js @@ -691,10 +691,11 @@ export const useSyncConfigStore = defineStore('sync_config', { mergedConfig: (state) => { const instancePrefs = useInstanceStore().prefsStorage const localPrefs = useLocalConfigStore().prefsStorage + const tempPrefs = useLocalConfigStore().tempStorage const result = Object.fromEntries( Object.entries(state.prefsStorage.simple).map(([k, v]) => [ k, - localPrefs[k] ?? v ?? instancePrefs[k], + tempPrefs[k] ?? localPrefs[k] ?? v ?? instancePrefs[k], ]), ) return result From 463cc2ef5c70db139cad6948c4d1b6eb2b53dcf8 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 27 Feb 2026 16:18:27 +0200 Subject: [PATCH 4/4] local indicator --- .../interface_language_switcher.js | 2 -- .../helpers/attachment_setting.vue | 2 +- .../settings_modal/helpers/boolean_setting.vue | 2 +- .../settings_modal/helpers/choice_setting.vue | 2 +- .../settings_modal/helpers/color_setting.vue | 2 +- .../settings_modal/helpers/group_setting.vue | 2 +- .../settings_modal/helpers/list_setting.vue | 2 +- .../helpers/list_tuple_setting.vue | 1 - ...dicator.vue => local_setting_indicator.vue} | 18 +++++++++--------- .../settings_modal/helpers/map_setting.vue | 2 +- .../settings_modal/helpers/number_setting.vue | 2 +- .../settings_modal/helpers/proxy_setting.vue | 1 - .../helpers/pwa_manifest_icons_setting.vue | 1 - .../settings_modal/helpers/rate_setting.vue | 2 +- .../settings_modal/helpers/setting.js | 7 +++++-- .../settings_modal/helpers/string_setting.vue | 2 +- .../settings_modal/helpers/tuple_setting.vue | 2 +- .../settings_modal/helpers/unit_setting.vue | 1 + .../settings_modal/settings_modal.scss | 2 +- .../settings_modal/tabs/appearance_tab.js | 2 -- .../settings_modal/tabs/composing_tab.js | 2 -- .../settings_modal/tabs/composing_tab.vue | 5 ----- .../settings_modal/tabs/general_tab.js | 2 -- .../settings_modal/tabs/general_tab.vue | 5 ----- .../settings_modal/tabs/layout_tab.js | 2 -- .../settings_modal/tabs/posts_tab.js | 2 -- .../settings_modal/tabs/profile_tab.js | 2 -- .../settings_modal/tabs/profile_tab.vue | 1 - src/i18n/en.json | 1 + 29 files changed, 28 insertions(+), 51 deletions(-) rename src/components/settings_modal/helpers/{profile_setting_indicator.vue => local_setting_indicator.vue} (66%) diff --git a/src/components/interface_language_switcher/interface_language_switcher.js b/src/components/interface_language_switcher/interface_language_switcher.js index 1cdedadd3..becf5677f 100644 --- a/src/components/interface_language_switcher/interface_language_switcher.js +++ b/src/components/interface_language_switcher/interface_language_switcher.js @@ -1,13 +1,11 @@ import { v4 as uuidv4 } from 'uuid' -import ProfileSettingIndicator from 'src/components/settings_modal/helpers/profile_setting_indicator.vue' import localeService from '../../services/locale/locale.service.js' import Select from '../select/select.vue' export default { components: { Select, - ProfileSettingIndicator, }, props: { // List of languages (or just one language) diff --git a/src/components/settings_modal/helpers/attachment_setting.vue b/src/components/settings_modal/helpers/attachment_setting.vue index a7804d78f..c8e0e4ea0 100644 --- a/src/components/settings_modal/helpers/attachment_setting.vue +++ b/src/components/settings_modal/helpers/attachment_setting.vue @@ -40,7 +40,7 @@ :changed="isChanged" :onclick="reset" /> - +
{{ $t('settings.preview') }}
- + {{ ' ' }} diff --git a/src/components/settings_modal/helpers/list_tuple_setting.vue b/src/components/settings_modal/helpers/list_tuple_setting.vue index eb2f6e16e..6719c213e 100644 --- a/src/components/settings_modal/helpers/list_tuple_setting.vue +++ b/src/components/settings_modal/helpers/list_tuple_setting.vue @@ -77,7 +77,6 @@ :changed="isChanged" :onclick="reset" /> - diff --git a/src/components/settings_modal/helpers/profile_setting_indicator.vue b/src/components/settings_modal/helpers/local_setting_indicator.vue similarity index 66% rename from src/components/settings_modal/helpers/profile_setting_indicator.vue rename to src/components/settings_modal/helpers/local_setting_indicator.vue index 3b45b125d..e22e36fb2 100644 --- a/src/components/settings_modal/helpers/profile_setting_indicator.vue +++ b/src/components/settings_modal/helpers/local_setting_indicator.vue @@ -1,7 +1,7 @@ @@ -26,18 +26,18 @@ import Popover from 'src/components/popover/popover.vue' import { library } from '@fortawesome/fontawesome-svg-core' -import { faServer } from '@fortawesome/free-solid-svg-icons' +import { faDesktop } from '@fortawesome/free-solid-svg-icons' -library.add(faServer) +library.add(faDesktop) export default { components: { Popover }, - props: ['isProfile'], + props: ['isLocal'], }