From ca2dc0a9b7807e95a4894819e83018f20f36ac60 Mon Sep 17 00:00:00 2001 From: Yonle Date: Fri, 27 Mar 2026 04:51:55 +0700 Subject: [PATCH 1/7] entity_normalizer: treat gifv attachment like it is video as we have handled this already. --- src/components/emoji_reactions/emoji_reactions.scss | 4 ++-- src/components/rich_content/rich_content.scss | 2 +- src/services/entity_normalizer/entity_normalizer.service.js | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/emoji_reactions/emoji_reactions.scss b/src/components/emoji_reactions/emoji_reactions.scss index 8ea45e1b4..f4b7d3fb0 100644 --- a/src/components/emoji_reactions/emoji_reactions.scss +++ b/src/components/emoji_reactions/emoji_reactions.scss @@ -41,7 +41,7 @@ margin: 0; .reaction-emoji { - width: var(--emoji-size); + width: auto; height: var(--emoji-size); margin-right: 0.25em; line-height: var(--emoji-size); @@ -55,7 +55,7 @@ .reaction-emoji-content { max-width: 100%; max-height: 100%; - width: var(--emoji-size); + width: auto; height: var(--emoji-size); line-height: inherit; overflow: hidden; diff --git a/src/components/rich_content/rich_content.scss b/src/components/rich_content/rich_content.scss index d2ec77dcb..b1a9337e0 100644 --- a/src/components/rich_content/rich_content.scss +++ b/src/components/rich_content/rich_content.scss @@ -73,7 +73,7 @@ .emoji { display: inline-block; - width: var(--emoji-size, 32px); + width: auto; height: var(--emoji-size, 32px); } diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js index 909a014ce..9864cb302 100644 --- a/src/services/entity_normalizer/entity_normalizer.service.js +++ b/src/services/entity_normalizer/entity_normalizer.service.js @@ -299,7 +299,8 @@ export const parseAttachment = (data) => { } if (data.type !== 'unknown') { - output.type = data.type + // treat gifv like it is "video" + output.type = data.type === 'gifv' ? 'video' : data.type } else { output.type = fileTypeService.fileType(output.mimetype) } From 2aee91662d1f0ae090aadb2504ffea5e80946b9e Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 1 Jun 2026 21:56:09 +0300 Subject: [PATCH 2/7] user profile's backgrounds support --- src/App.js | 5 ++++- src/App.scss | 1 + src/components/settings_modal/tabs/appearance_tab.vue | 5 +++++ src/components/user_profile/user_profile.js | 6 ++++++ src/i18n/en.json | 1 + src/modules/default_config_state.js | 4 ++++ src/stores/interface.js | 4 ++++ 7 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/App.js b/src/App.js index 9fb4d32e5..36df2d84e 100644 --- a/src/App.js +++ b/src/App.js @@ -149,13 +149,16 @@ export default { userBackground() { return this.currentUser.background_image }, + foreignProfileBackground() { + return useMergedConfigStore().mergedConfig.allowForeignUserBackground && useInterfaceStore().foreignProfileBackground + }, instanceBackground() { return useMergedConfigStore().mergedConfig.hideInstanceWallpaper ? null : this.instanceBackgroundUrl }, background() { - return this.userBackground || this.instanceBackground + return this.foreignProfileBackground || this.userBackground || this.instanceBackground }, bgStyle() { if (this.background) { diff --git a/src/App.scss b/src/App.scss index 56fef9d11..952af5b47 100644 --- a/src/App.scss +++ b/src/App.scss @@ -200,6 +200,7 @@ nav { background-color: var(--wallpaper); background-image: var(--body-background-image); background-position: 50%; + transition: background-image 1s; } .underlay { diff --git a/src/components/settings_modal/tabs/appearance_tab.vue b/src/components/settings_modal/tabs/appearance_tab.vue index f0ccf71f3..1343a36d5 100644 --- a/src/components/settings_modal/tabs/appearance_tab.vue +++ b/src/components/settings_modal/tabs/appearance_tab.vue @@ -263,6 +263,11 @@ {{ $t('settings.hide_wallpaper') }} +
  • + + {{ $t('settings.foreign_user_background') }} + +
  • {{ $t('settings.compact_profiles') }} diff --git a/src/components/user_profile/user_profile.js b/src/components/user_profile/user_profile.js index 17d69f49b..ed574d7bb 100644 --- a/src/components/user_profile/user_profile.js +++ b/src/components/user_profile/user_profile.js @@ -11,6 +11,7 @@ import Timeline from '../timeline/timeline.vue' import UserCard from '../user_card/user_card.vue' import { useInstanceStore } from 'src/stores/instance.js' +import { useInterfaceStore } from 'src/stores/interface.js' import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js' import { useMergedConfigStore } from 'src/stores/merged_config.js' @@ -56,9 +57,14 @@ const UserProfile = { const routeParams = this.$route.params this.load({ name: routeParams.name, id: routeParams.id }) this.tab = get(this.$route, 'query.tab', defaultTabKey) + useInterfaceStore().setForeignProfileBackground(this.user?.background_image) + }, + updated() { + useInterfaceStore().setForeignProfileBackground(this.user?.background_image) }, unmounted() { this.stopFetching() + useInterfaceStore().setForeignProfileBackground(null) }, computed: { timeline() { diff --git a/src/i18n/en.json b/src/i18n/en.json index 95f02507b..e03e21403 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -636,6 +636,7 @@ "navbar_column_stretch": "Stretch navbar to columns width", "always_show_post_button": "Always show floating New Post button", "hide_wallpaper": "Hide instance wallpaper", + "foreign_user_background": "Allow other user's profiles to override wallpaper", "preload_images": "Preload images", "use_one_click_nsfw": "Open NSFW attachments with just one click", "hide_post_stats": "Hide post statistics (e.g. the number of favorites)", diff --git a/src/modules/default_config_state.js b/src/modules/default_config_state.js index 233e15ca1..61743c426 100644 --- a/src/modules/default_config_state.js +++ b/src/modules/default_config_state.js @@ -140,6 +140,10 @@ export const INSTANCE_DEFAULT_CONFIG_DEFINITIONS = { description: 'Hide Instance-specific panel', default: false, }, + allowForeignUserBackground: { + description: 'Allow other user\'s profiles to override wallpaper', + default: true, + }, hideInstanceWallpaper: { description: 'Hide Instance default background', default: false, diff --git a/src/stores/interface.js b/src/stores/interface.js index 111700fbb..01ff07533 100644 --- a/src/stores/interface.js +++ b/src/stores/interface.js @@ -60,6 +60,7 @@ export const useInterfaceStore = defineStore('interface', { globalNotices: [], layoutHeight: 0, lastTimeline: null, + foreignProfileBackground: null, }), actions: { setTemporaryChanges({ confirm, revert }) { @@ -96,6 +97,9 @@ export const useInterfaceStore = defineStore('interface', { console.error(`${error}`) } }, + setForeignProfileBackground(url) { + this.foreignProfileBackground = url + }, settingsSaved({ success, error }) { if (success) { if (this.noticeClearTimeout) { From c1c285a1b948b8bd7c6abdf6ac73851a309b222e Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 2 Jun 2026 23:58:09 +0300 Subject: [PATCH 3/7] changelog --- changelog.d/profilebg.add | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/profilebg.add diff --git a/changelog.d/profilebg.add b/changelog.d/profilebg.add new file mode 100644 index 000000000..a2c79074a --- /dev/null +++ b/changelog.d/profilebg.add @@ -0,0 +1 @@ +displaying other user's backgrounds (if supported by BE) From 68e0d80f6f8a746fc8ac2614b353e9263da8be43 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 2 Jun 2026 23:58:59 +0300 Subject: [PATCH 4/7] undo default change per @lain's request --- src/modules/default_config_state.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/default_config_state.js b/src/modules/default_config_state.js index 233e15ca1..208dc548b 100644 --- a/src/modules/default_config_state.js +++ b/src/modules/default_config_state.js @@ -631,7 +631,7 @@ export const LOCAL_DEFAULT_CONFIG_DEFINITIONS = { }, imageCompression: { description: 'Image compression (WebP/JPEG)', - default: false, + default: true, }, alwaysUseJpeg: { description: 'Compress images using JPEG only', From 91595c19ae07dbabd9b2ef1faa8e0561482de2d8 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 3 Jun 2026 03:28:37 +0300 Subject: [PATCH 5/7] fix errors on initial pleroma-fe boot --- src/components/status/status.js | 2 +- src/stores/sync_config.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/status/status.js b/src/components/status/status.js index 150e77272..607b7f04e 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -264,7 +264,7 @@ const Status = { }, muteFilterHits() { return muteFilterHits( - Object.values(useSyncConfigStore().prefsStorage.simple.muteFilters), + Object.values(useSyncConfigStore().prefsStorage.simple.muteFilters || {}), this.status, ) }, diff --git a/src/stores/sync_config.js b/src/stores/sync_config.js index 1caa2b030..3010fc738 100644 --- a/src/stores/sync_config.js +++ b/src/stores/sync_config.js @@ -796,11 +796,12 @@ export const useSyncConfigStore = defineStore('sync_config', { afterLoad(state) { console.debug('Validating persisted state of SyncConfig') const newState = { ...state } + newState.prefsStorage = newState.prefsStorage || {} const newEntries = Object.entries(ROOT_CONFIG).map(([path, value]) => { const definition = ROOT_CONFIG_DEFINITIONS[path] const finalValue = validateSetting({ path, - value: newState.prefsStorage.simple[path], + value: newState.prefsStorage.simple?.[path], definition, throwError: false, validateObjects: false, From 3f2ce5e7aba0774a8e5dfa718427c156005b5f61 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 5 Jun 2026 14:53:33 +0300 Subject: [PATCH 6/7] lint --- src/App.js | 11 +++++++++-- .../status_action_buttons/action_button_container.vue | 2 +- .../status_action_buttons/status_action_buttons.vue | 2 +- src/components/user_profile/user_profile.js | 2 +- src/modules/default_config_state.js | 2 +- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/App.js b/src/App.js index 36df2d84e..a24ff4255 100644 --- a/src/App.js +++ b/src/App.js @@ -150,7 +150,10 @@ export default { return this.currentUser.background_image }, foreignProfileBackground() { - return useMergedConfigStore().mergedConfig.allowForeignUserBackground && useInterfaceStore().foreignProfileBackground + return ( + useMergedConfigStore().mergedConfig.allowForeignUserBackground && + useInterfaceStore().foreignProfileBackground + ) }, instanceBackground() { return useMergedConfigStore().mergedConfig.hideInstanceWallpaper @@ -158,7 +161,11 @@ export default { : this.instanceBackgroundUrl }, background() { - return this.foreignProfileBackground || this.userBackground || this.instanceBackground + return ( + this.foreignProfileBackground || + this.userBackground || + this.instanceBackground + ) }, bgStyle() { if (this.background) { diff --git a/src/components/status_action_buttons/action_button_container.vue b/src/components/status_action_buttons/action_button_container.vue index 348b158a7..da0beed79 100644 --- a/src/components/status_action_buttons/action_button_container.vue +++ b/src/components/status_action_buttons/action_button_container.vue @@ -79,7 +79,7 @@ :button="button" :status="status" v-bind="$attrs" - @emojiPickerShown="e => $emit('emojiPickerShown', e)" + @emoji-picker-shown="e => $emit('emojiPickerShown', e)" />