From 9187c1d31c951c07319d563ac3532d9e6816a598 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Feb 2025 08:07:24 +0200 Subject: [PATCH 01/28] don't compress theme cache as it takes ~1secon on mobile --- src/services/style_setter/style_setter.js | 40 ++++++++++------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 2be9e77a4..59e9899e7 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -93,32 +93,28 @@ export const generateTheme = (inputRuleset, callbacks, debug) => { export const tryLoadCache = async () => { console.info('Trying to load compiled theme data from cache') - const data = await localforage.getItem('pleromafe-theme-cache') - if (!data) return null - let cache + const cache = await localforage.getItem('pleromafe-theme-cache') + if (!cache) return null try { - const inflated = pako.inflate(data) - const decoded = new TextDecoder().decode(inflated) - cache = JSON.parse(decoded) - console.info(`Loaded theme from cache, compressed=${Math.ceil(data.length / 1024)}kiB size=${Math.ceil(inflated.length / 1024)}kiB`) + if (cache.engineChecksum === getEngineChecksum()) { + 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')) + + adoptStyleSheets([eagerStyles, lazyStyles]) + + console.info(`Loaded theme from cache`) + return true + } else { + console.warn('Engine checksum doesn\'t match, cache not usable, clearing') + localStorage.removeItem('pleroma-fe-theme-cache') + } } catch (e) { - console.error('Failed to decode theme cache:', e) + console.error('Failed to load theme cache:', e) return false } - if (cache.engineChecksum === getEngineChecksum()) { - 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')) - - adoptStyleSheets([eagerStyles, lazyStyles]) - - return true - } else { - console.warn('Engine checksum doesn\'t match, cache not usable, clearing') - localStorage.removeItem('pleroma-fe-theme-cache') - } } export const applyTheme = ( From 21af30f71b9500781679c164a3b3b3b751928d34 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Feb 2025 08:07:48 +0200 Subject: [PATCH 02/28] store cache eagerly --- src/services/style_setter/style_setter.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 59e9899e7..7f071a1fc 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -140,6 +140,7 @@ export const applyTheme = ( } } + let cache const { lazyProcessFunc } = generateTheme( input, { @@ -152,16 +153,13 @@ export const applyTheme = ( }, onEagerFinished () { adoptStyleSheets([eagerStyles]) + cache = { engineChecksum: getEngineChecksum(), data: [eagerStyles.rules, lazyStyles.rules] } + localforage.setItem('pleromafe-theme-cache', cache) onEagerFinish() }, onLazyFinished () { adoptStyleSheets([eagerStyles, lazyStyles]) - const cache = { engineChecksum: getEngineChecksum(), data: [eagerStyles.rules, lazyStyles.rules] } onFinish(cache) - const compress = (js) => { - return pako.deflate(JSON.stringify(js)) - } - localforage.setItem('pleromafe-theme-cache', compress(cache)) } }, debug From 143a6708585b586a5c610ab93147fd61b2382c73 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Feb 2025 08:09:17 +0200 Subject: [PATCH 03/28] remove pako dependency --- package.json | 1 - yarn.lock | 58 ++++++++++++++++++++++++++-------------------------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 4a3ad2a59..7b33218ac 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "hash-sum": "^2.0.0", "js-cookie": "3.0.5", "localforage": "1.10.0", - "pako": "^2.1.0", "parse-link-header": "2.0.0", "phoenix": "1.7.19", "pinia": "^2.0.33", diff --git a/yarn.lock b/yarn.lock index fc5439d8a..5a02ad76b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1430,9 +1430,9 @@ integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/node@*", "@types/node@>=10.0.0": - version "22.13.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.0.tgz#d376dd9a0ee2f9382d86c2d5d7beb4d198b4ea8c" - integrity sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA== + version "22.13.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.1.tgz#a2a3fefbdeb7ba6b89f40371842162fac0934f33" + integrity sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew== dependencies: undici-types "~6.20.0" @@ -2358,9 +2358,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: - version "1.0.30001696" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz#00c30a2fc11e3c98c25e5125418752af3ae2f49f" - integrity sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ== + version "1.0.30001697" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001697.tgz#040bbbb54463c4b4b3377c716b34a322d16e6fc7" + integrity sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ== chai-nightwatch@0.5.3: version "0.5.3" @@ -3311,9 +3311,9 @@ ejs@3.1.8: jake "^10.8.5" electron-to-chromium@^1.5.73: - version "1.5.90" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz#4717e5a5413f95bbb12d0af14c35057e9c65e0b6" - integrity sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug== + version "1.5.92" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.92.tgz#81e8ebe06f8e2a49fdba84bd10e9ad5b63efffe0" + integrity sha512-BeHgmNobs05N1HMmMZ7YIuHfYBGlq/UmvlsTgg+fsbFs9xVMj+xJHFg19GN04+9Q+r8Xnh9LXqaYIyEWElnNgQ== emoji-regex@^8.0.0: version "8.0.0" @@ -3368,9 +3368,9 @@ engine.io@~6.6.0: ws "~8.17.1" enhanced-resolve@^5.17.1: - version "5.18.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz#91eb1db193896b9801251eeff1c6980278b1e404" - integrity sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ== + version "5.18.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf" + integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -4768,11 +4768,11 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.1.tgz#c20d0c654be05da4fbc23c562635c019e93daf89" - integrity sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng== + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: - call-bound "^1.0.2" + call-bound "^1.0.3" has-tostringtag "^1.0.2" is-callable@^1.2.7: @@ -4960,11 +4960,11 @@ is-weakmap@^2.0.2: integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2, is-weakref@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.0.tgz#47e3472ae95a63fa9cf25660bcf0c181c39770ef" - integrity sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q== + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: - call-bound "^1.0.2" + call-bound "^1.0.3" is-weakset@^2.0.3: version "2.0.4" @@ -6292,9 +6292,9 @@ object-assign@^4: integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.3: - version "1.13.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" - integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: version "1.1.1" @@ -6520,11 +6520,6 @@ package-json-from-dist@^1.0.0: resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== -pako@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" - integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== - pako@~1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -7535,7 +7530,7 @@ semver@7.3.5: dependencies: lru-cache "^6.0.0" -semver@7.7.0, semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3: +semver@7.7.0: version "7.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.0.tgz#9c6fe61d0c6f9fa9e26575162ee5a9180361b09c" integrity sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ== @@ -7545,6 +7540,11 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" From 78907571cb839f80599ab28fd3399d3c88a9d9aa Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Feb 2025 08:24:13 +0200 Subject: [PATCH 04/28] fix error related to old interface actions --- src/components/settings_modal/settings_modal.js | 7 ++++--- src/components/settings_modal/settings_modal.vue | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/components/settings_modal/settings_modal.js b/src/components/settings_modal/settings_modal.js index 7c6940b25..015c90d85 100644 --- a/src/components/settings_modal/settings_modal.js +++ b/src/components/settings_modal/settings_modal.js @@ -7,7 +7,7 @@ import Checkbox from 'src/components/checkbox/checkbox.vue' import ConfirmModal from 'src/components/confirm_modal/confirm_modal.vue' import { library } from '@fortawesome/fontawesome-svg-core' import { cloneDeep, isEqual } from 'lodash' -import { mapState as mapPiniaState } from 'pinia' +import { mapState, mapActions } from 'pinia' import { newImporter, newExporter @@ -165,10 +165,11 @@ const SettingsModal = { }, pushAdminDraft () { this.$store.dispatch('pushAdminDraft') - } + }, + ...mapActions(useInterfaceStore, ['temporaryChangesRevert', 'temporaryChangesConfirm']) }, computed: { - ...mapPiniaState(useInterfaceStore, { + ...mapState(useInterfaceStore, { temporaryChangesTimeoutId: store => store.layoutType === 'mobile', currentSaveStateNotice: store => store.settings.currentSaveStateNotice, modalActivated: store => store.settingsModalState !== 'hidden', diff --git a/src/components/settings_modal/settings_modal.vue b/src/components/settings_modal/settings_modal.vue index 4af9da10b..b4ccba191 100644 --- a/src/components/settings_modal/settings_modal.vue +++ b/src/components/settings_modal/settings_modal.vue @@ -162,8 +162,8 @@ :title="$t('settings.confirm_new_setting')" :cancel-text="$t('settings.revert')" :confirm-text="$t('settings.confirm')" - @cancelled="$store.state.interface.temporaryChangesRevert" - @accepted="$store.state.interface.temporaryChangesConfirm" + @cancelled="temporaryChangesRevert" + @accepted="temporaryChangesConfirm" > {{ $t('settings.confirm_new_question') }} From 081b2f66f2d2a5c487f57099a518602febce10a3 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Feb 2025 08:37:00 +0200 Subject: [PATCH 05/28] fix settings modal on mobile --- src/components/confirm_modal/confirm_modal.js | 1 + src/components/confirm_modal/confirm_modal.vue | 6 +++--- src/components/settings_modal/settings_modal.js | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/confirm_modal/confirm_modal.js b/src/components/confirm_modal/confirm_modal.js index 96ddc118f..3e2bc2cb7 100644 --- a/src/components/confirm_modal/confirm_modal.js +++ b/src/components/confirm_modal/confirm_modal.js @@ -22,6 +22,7 @@ const ConfirmModal = { type: String } }, + emits: ['cancelled', 'accepted'], computed: { }, methods: { diff --git a/src/components/confirm_modal/confirm_modal.vue b/src/components/confirm_modal/confirm_modal.vue index 3b98174aa..9af00edc4 100644 --- a/src/components/confirm_modal/confirm_modal.vue +++ b/src/components/confirm_modal/confirm_modal.vue @@ -1,8 +1,8 @@ diff --git a/src/components/settings_modal/settings_modal.js b/src/components/settings_modal/settings_modal.js index 015c90d85..b4677fe7f 100644 --- a/src/components/settings_modal/settings_modal.js +++ b/src/components/settings_modal/settings_modal.js @@ -170,7 +170,7 @@ const SettingsModal = { }, computed: { ...mapState(useInterfaceStore, { - temporaryChangesTimeoutId: store => store.layoutType === 'mobile', + temporaryChangesTimeoutId: store => store.temporaryChangesTimeoutId, currentSaveStateNotice: store => store.settings.currentSaveStateNotice, modalActivated: store => store.settingsModalState !== 'hidden', modalMode: store => store.settingsModalMode, From e0b99405356dfb2cab1e4a4410de1bc0f2a8a023 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Feb 2025 08:47:41 +0200 Subject: [PATCH 06/28] remove stuff --- src/services/style_setter/style_setter.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 7f071a1fc..63fb0a138 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -2,11 +2,8 @@ import { init, getEngineChecksum } from '../theme_data/theme_data_3.service.js' import { getCssRules } from '../theme_data/css_utils.js' import { defaultState } from 'src/modules/default_config_state.js' import { chunk } from 'lodash' -import pako from 'pako' import localforage from 'localforage' -console.log('CONFIG', defaultState) - // On platforms where this is not supported, it will return undefined // Otherwise it will return an array const supportsAdoptedStyleSheets = !!document.adoptedStyleSheets @@ -208,7 +205,6 @@ const extractStyleConfig = ({ return result } -console.log(defaultState) const defaultStyleConfig = extractStyleConfig(defaultState) export const applyConfig = (input) => { From 7aee12bcd4a70cc51a0fd50228883fa76298cd50 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Feb 2025 10:27:47 +0200 Subject: [PATCH 07/28] fix openEditStatusStore --- src/components/status_action_buttons/buttons_definitions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/status_action_buttons/buttons_definitions.js b/src/components/status_action_buttons/buttons_definitions.js index 64a95ab85..b9dc522c4 100644 --- a/src/components/status_action_buttons/buttons_definitions.js +++ b/src/components/status_action_buttons/buttons_definitions.js @@ -1,3 +1,4 @@ +import { useEditStatusStore } from 'src/stores/editStatus.js' const PRIVATE_SCOPES = new Set(['private', 'direct']) const PUBLIC_SCOPES = new Set(['public', 'unlisted']) export const BUTTONS = [{ @@ -151,7 +152,7 @@ export const BUTTONS = [{ }, action ({ dispatch, status }) { return dispatch('fetchStatusSource', { id: status.id }) - .then(data => dispatch('openEditStatusModal', { + .then(data => useEditStatusStore().openEditStatusModal({ statusId: status.id, subject: data.spoiler_text, statusText: data.text, From f8fa540af794e7640c6583e9f91bbc8aaddd736f Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 10 Feb 2025 23:02:34 +0200 Subject: [PATCH 08/28] Revert "store cache eagerly" This reverts commit 21af30f71b9500781679c164a3b3b3b751928d34. --- src/services/style_setter/style_setter.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 63fb0a138..f04c9d10e 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -137,7 +137,6 @@ export const applyTheme = ( } } - let cache const { lazyProcessFunc } = generateTheme( input, { @@ -150,13 +149,16 @@ export const applyTheme = ( }, onEagerFinished () { adoptStyleSheets([eagerStyles]) - cache = { engineChecksum: getEngineChecksum(), data: [eagerStyles.rules, lazyStyles.rules] } - localforage.setItem('pleromafe-theme-cache', cache) onEagerFinish() }, onLazyFinished () { adoptStyleSheets([eagerStyles, lazyStyles]) + const cache = { engineChecksum: getEngineChecksum(), data: [eagerStyles.rules, lazyStyles.rules] } onFinish(cache) + const compress = (js) => { + return pako.deflate(JSON.stringify(js)) + } + localforage.setItem('pleromafe-theme-cache', compress(cache)) } }, debug From 2e78975e4c332f43a37e104d94efe114b92c62b5 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 10 Feb 2025 23:10:04 +0200 Subject: [PATCH 09/28] post-revert fix + logging --- src/services/style_setter/style_setter.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index f04c9d10e..5eb810884 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -150,15 +150,14 @@ export const applyTheme = ( onEagerFinished () { adoptStyleSheets([eagerStyles]) onEagerFinish() + console.info('Eager part of theme finished, waiting for lazy part to finish to store cache') }, onLazyFinished () { adoptStyleSheets([eagerStyles, lazyStyles]) const cache = { engineChecksum: getEngineChecksum(), data: [eagerStyles.rules, lazyStyles.rules] } onFinish(cache) - const compress = (js) => { - return pako.deflate(JSON.stringify(js)) - } - localforage.setItem('pleromafe-theme-cache', compress(cache)) + localforage.setItem('pleromafe-theme-cache', cache) + console.info('Theme cache stored') } }, debug From da73226cb133bce3dde772fbd721f7be450638ec Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 10 Feb 2025 23:15:39 +0200 Subject: [PATCH 10/28] rename + fix --- .../mobile_post_status_button/mobile_post_status_button.js | 2 +- src/components/post_status_modal/post_status_modal.js | 2 +- src/components/user_card/user_card.js | 2 +- src/stores/{postStatus.js => post_status.js} | 3 +++ 4 files changed, 6 insertions(+), 3 deletions(-) rename src/stores/{postStatus.js => post_status.js} (85%) diff --git a/src/components/mobile_post_status_button/mobile_post_status_button.js b/src/components/mobile_post_status_button/mobile_post_status_button.js index ab4d761f4..031013559 100644 --- a/src/components/mobile_post_status_button/mobile_post_status_button.js +++ b/src/components/mobile_post_status_button/mobile_post_status_button.js @@ -3,7 +3,7 @@ import { library } from '@fortawesome/fontawesome-svg-core' import { faPen } from '@fortawesome/free-solid-svg-icons' -import { usePostStatusStore } from 'src/stores/postStatus' +import { usePostStatusStore } from 'src/stores/post_status' library.add( faPen diff --git a/src/components/post_status_modal/post_status_modal.js b/src/components/post_status_modal/post_status_modal.js index 5e7c1f515..ee6cd6444 100644 --- a/src/components/post_status_modal/post_status_modal.js +++ b/src/components/post_status_modal/post_status_modal.js @@ -1,7 +1,7 @@ import PostStatusForm from '../post_status_form/post_status_form.vue' import Modal from '../modal/modal.vue' import get from 'lodash/get' -import { usePostStatusStore } from 'src/stores/postStatus' +import { usePostStatusStore } from 'src/stores/post_status' const PostStatusModal = { components: { diff --git a/src/components/user_card/user_card.js b/src/components/user_card/user_card.js index c2ddf5d80..be81b8ad5 100644 --- a/src/components/user_card/user_card.js +++ b/src/components/user_card/user_card.js @@ -11,7 +11,7 @@ import RichContent from 'src/components/rich_content/rich_content.jsx' import MuteConfirm from '../confirm_modal/mute_confirm.vue' import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator' import { mapGetters } from 'vuex' -import { usePostStatusStore } from 'src/stores/postStatus' +import { usePostStatusStore } from 'src/stores/post_status' import { library } from '@fortawesome/fontawesome-svg-core' import { faBell, diff --git a/src/stores/postStatus.js b/src/stores/post_status.js similarity index 85% rename from src/stores/postStatus.js rename to src/stores/post_status.js index b9fe96d3c..a19b0dbdd 100644 --- a/src/stores/postStatus.js +++ b/src/stores/post_status.js @@ -12,6 +12,9 @@ export const usePostStatusStore = defineStore('postStatus', { }, closePostStatusModal () { this.modalActivated = false + }, + resetPostStatusModal () { + this.params = null } } }) From afb9c0aa99848d4d1d3f0601fcb9b6fe8225a7d9 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 12 Feb 2025 14:36:35 +0200 Subject: [PATCH 11/28] cleanup --- src/App.scss | 6 ------ src/services/theme_data/pleromafe.t3.js | 2 -- 2 files changed, 8 deletions(-) delete mode 100644 src/services/theme_data/pleromafe.t3.js diff --git a/src/App.scss b/src/App.scss index c0f2e3fec..0bdc88735 100644 --- a/src/App.scss +++ b/src/App.scss @@ -762,12 +762,6 @@ option { margin-left: 0.7em; margin-top: -1em; } - - &.-neutral { - background-color: var(--badgeNeutral); - color: white; - color: var(--badgeNeutralText, white); - } } .alert { diff --git a/src/services/theme_data/pleromafe.t3.js b/src/services/theme_data/pleromafe.t3.js deleted file mode 100644 index db612a5b5..000000000 --- a/src/services/theme_data/pleromafe.t3.js +++ /dev/null @@ -1,2 +0,0 @@ -export const sampleRules = [ -] From 96a236ed28812a287bbaff6dcbfcf1f4991463a9 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 12 Feb 2025 15:45:46 +0200 Subject: [PATCH 12/28] themes3 optimization --- src/components/button_unstyled.style.js | 1 + .../rich_content/rich_content.style.js | 1 + src/components/root.style.js | 21 -------- .../theme_data/theme_data_3.service.js | 48 ++++++++++++++++++- 4 files changed, 48 insertions(+), 23 deletions(-) diff --git a/src/components/button_unstyled.style.js b/src/components/button_unstyled.style.js index 4142f9a3c..a387ed954 100644 --- a/src/components/button_unstyled.style.js +++ b/src/components/button_unstyled.style.js @@ -2,6 +2,7 @@ export default { name: 'ButtonUnstyled', selector: '.button-unstyled', notEditable: true, + transparent: true, states: { toggled: '.toggled', disabled: ':disabled', diff --git a/src/components/rich_content/rich_content.style.js b/src/components/rich_content/rich_content.style.js index d9cd17aee..eaba9c4b1 100644 --- a/src/components/rich_content/rich_content.style.js +++ b/src/components/rich_content/rich_content.style.js @@ -2,6 +2,7 @@ export default { name: 'RichContent', selector: '.RichContent', notEditable: true, + transparent: true, validInnerComponents: [ 'Text', 'FunText', diff --git a/src/components/root.style.js b/src/components/root.style.js index 9ad614c78..5075e33c8 100644 --- a/src/components/root.style.js +++ b/src/components/root.style.js @@ -2,27 +2,6 @@ export default { name: 'Root', selector: ':root', notEditable: true, - validInnerComponents: [ - // These are purely for --parent--text et such to work - 'Text', - 'Link', - 'Border', - - 'Underlay', - 'Modals', - 'Popover', - 'TopBar', - 'Scrollbar', - 'ScrollbarElement', - 'MobileDrawer', - 'Alert', - 'Button' // mobile post button - ], - validInnerComponentsLite: [ - 'Underlay', - 'Scrollbar', - 'ScrollbarElement' - ], defaultRules: [ { directives: { diff --git a/src/services/theme_data/theme_data_3.service.js b/src/services/theme_data/theme_data_3.service.js index ef00f5435..670d482d8 100644 --- a/src/services/theme_data/theme_data_3.service.js +++ b/src/services/theme_data/theme_data_3.service.js @@ -32,6 +32,7 @@ const components = { Link: null, Icon: null, Border: null, + PanelHeader: null, Panel: null, Chat: null, ChatMessage: null @@ -151,6 +152,25 @@ componentsContext.keys().forEach(key => { } components[component.name] = component }) +Object.keys(components).forEach(key => { + if (key === 'Root') return + components.Root.validInnerComponents = components.Root.validInnerComponents || [] + components.Root.validInnerComponents.push(key) +}) + + +Object.keys(components).forEach(key => { + const component = components[key] + const { validInnerComponents = [] } = component + validInnerComponents.forEach(inner => { + const child = components[inner] + component.possibleChildren = component.possibleChildren || [] + component.possibleChildren.push(child) + child.possibleParents = child.possibleParents || [] + child.possibleParents.push(component) + }) +}) + const engineChecksum = sum(components) @@ -244,7 +264,21 @@ export const init = ({ } const virtualComponents = new Set(Object.values(components).filter(c => c.virtual).map(c => c.name)) + const transparentComponents = new Set(Object.values(components).filter(c => c.transparent).map(c => c.name)) const nonEditableComponents = new Set(Object.values(components).filter(c => c.notEditable).map(c => c.name)) + const extraCompileComponents = new Set([]) + + Object.values(components).forEach(component => { + const relevantRules = ruleset.filter(r => r.component === component.name) + const backgrounds = relevantRules.map(r => r.directives.background).filter(x => x) + const opacities = relevantRules.map(r => r.directives.opacity).filter(x => x) + if ( + backgrounds.some(x => x.match(/--parent/)) || + opacities.some(x => x != null && x < 1)) + { + extraCompileComponents.add(component.name) + } + }) const processCombination = (combination) => { try { @@ -473,11 +507,21 @@ export const init = ({ let validInnerComponents if (editMode) { const temp = (component.validInnerComponentsLite || component.validInnerComponents || []) - validInnerComponents = temp.filter(c => virtualComponents.has(c) && !nonEditableComponents.has(c)) + validInnerComponents = temp + .filter(c => virtualComponents.has(c) && !nonEditableComponents.has(c)) } else if (liteMode) { validInnerComponents = (component.validInnerComponentsLite || component.validInnerComponents || []) - } else { + } else if (component.name === 'Root') { validInnerComponents = component.validInnerComponents || [] + } else { + validInnerComponents = component + .validInnerComponents + ?.filter( + c => virtualComponents.has(c) + || transparentComponents.has(c) + || extraCompileComponents.has(c) + ) + || [] } // Normalizing states and variants to always include "normal" From 7def989ec2ce85877a0da76a5ec47ae801a75d68 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 12 Feb 2025 15:54:30 +0200 Subject: [PATCH 13/28] more optimization --- src/App.scss | 2 ++ src/services/theme_data/theme_data_3.service.js | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/App.scss b/src/App.scss index 0bdc88735..78c20c0f9 100644 --- a/src/App.scss +++ b/src/App.scss @@ -498,6 +498,8 @@ nav { box-sizing: content-box; color: inherit; + --shadow: none; + &.-link { /* stylelint-disable-next-line declaration-no-important */ color: var(--link) !important; diff --git a/src/services/theme_data/theme_data_3.service.js b/src/services/theme_data/theme_data_3.service.js index 670d482d8..d4f88e883 100644 --- a/src/services/theme_data/theme_data_3.service.js +++ b/src/services/theme_data/theme_data_3.service.js @@ -567,6 +567,9 @@ export const init = ({ if (!liteMode && combination.state.indexOf('hover') >= 0) { combination.lazy = true } + if (extraCompileComponents.has(component.name)) { + combination.lazy = true + } combinations.push(combination) From 2097192469cf9fbb43eaac4041a88f6690e0e568 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 12 Feb 2025 20:53:06 +0200 Subject: [PATCH 14/28] lack of changelog --- changelog.d/roundup4.skip | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 changelog.d/roundup4.skip diff --git a/changelog.d/roundup4.skip b/changelog.d/roundup4.skip new file mode 100644 index 000000000..e69de29bb From 17d562b979fc4a57fd6e6ea6313c81ea5705ffe0 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 12 Feb 2025 21:07:16 +0200 Subject: [PATCH 15/28] fix draft dropdown --- .../post_status_form/post_status_form.js | 6 ++++ .../post_status_form/post_status_form.vue | 30 +++++++++++-------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index 944c43153..f9eb1bdcd 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -363,6 +363,12 @@ const PostStatusForm = { } }, safeToSaveDraft () { + console.log('safe', ( + this.newStatus.status || + this.newStatus.spoilerText || + this.newStatus.files?.length || + this.newStatus.hasPoll + ) && this.saveable) return ( this.newStatus.status || this.newStatus.spoilerText || diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index e5eaa3af8..260a89cb7 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -334,22 +334,26 @@ class="dropdown-menu" role="menu" > - + + From c14f88e2906f02d1759e2e2b4c585be30390e9ea Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 12 Feb 2025 21:26:05 +0200 Subject: [PATCH 16/28] disable shadow inheritance --- src/App.scss | 5 +++++ src/panel.scss | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/App.scss b/src/App.scss index 78c20c0f9..db47c48b8 100644 --- a/src/App.scss +++ b/src/App.scss @@ -1096,3 +1096,8 @@ option { } } } + +@property --shadow { + syntax: "*"; + inherits: false; +} diff --git a/src/panel.scss b/src/panel.scss index 47d55aa4a..ecc39f43a 100644 --- a/src/panel.scss +++ b/src/panel.scss @@ -2,6 +2,7 @@ .panel { --__panel-background: var(--background); --__panel-backdrop-filter: var(--backdrop-filter); + --_shadow: var(--shadow); .tab-switcher .tabs { background: var(--__panel-background); @@ -29,7 +30,7 @@ left: 0; right: 0; z-index: 5; - box-shadow: var(--shadow); + box-shadow: var(--_shadow); pointer-events: none; } } @@ -154,11 +155,13 @@ linear-gradient(to bottom, var(--background), var(--background)), linear-gradient(to bottom, var(--__panel-background), var(--__panel-background)); + --_shadow: var(--shadow); + &::after { background-color: var(--background); z-index: -2; border-radius: var(--roundness) var(--roundness) 0 0; - box-shadow: var(--shadow); + box-shadow: var(--_shadow); } &:not(.-flexible-height) { From babe3697dbda0c7aefd7be2230dec0955600ed3e Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 12 Feb 2025 21:50:21 +0200 Subject: [PATCH 17/28] increase load time to avoid glitchiness --- src/App.scss | 2 -- src/services/theme_data/theme_data_3.service.js | 8 +++++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/App.scss b/src/App.scss index db47c48b8..6fa3a95b7 100644 --- a/src/App.scss +++ b/src/App.scss @@ -498,8 +498,6 @@ nav { box-sizing: content-box; color: inherit; - --shadow: none; - &.-link { /* stylelint-disable-next-line declaration-no-important */ color: var(--link) !important; diff --git a/src/services/theme_data/theme_data_3.service.js b/src/services/theme_data/theme_data_3.service.js index d4f88e883..33d860b8a 100644 --- a/src/services/theme_data/theme_data_3.service.js +++ b/src/services/theme_data/theme_data_3.service.js @@ -567,7 +567,13 @@ export const init = ({ if (!liteMode && combination.state.indexOf('hover') >= 0) { combination.lazy = true } - if (extraCompileComponents.has(component.name)) { + + if ( + parent?.component !== 'Root' && + !virtualComponents.has(component.name) && + !transparentComponents.has(component.name) && + extraCompileComponents.has(component.name) + ) { combination.lazy = true } From 3b2baa45d02ec4661780282f3f1dd8036ee16175 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 12 Feb 2025 22:00:37 +0200 Subject: [PATCH 18/28] fix checkboxes --- src/components/checkbox/checkbox.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/checkbox/checkbox.vue b/src/components/checkbox/checkbox.vue index e447595f2..b6eab3ef7 100644 --- a/src/components/checkbox/checkbox.vue +++ b/src/components/checkbox/checkbox.vue @@ -85,6 +85,8 @@ export default { width: 1.2em; height: 1.2em; box-shadow: none; + + --_shadow: var(--shadow); } &-indicator::before { @@ -96,7 +98,7 @@ export default { width: 1.1em; height: 1.1em; border-radius: var(--roundness); - box-shadow: var(--shadow); + box-shadow: var(--_shadow); background-color: var(--background); vertical-align: top; text-align: center; From 89ba855e45fcdeff1ee716783f9dbce451c8615a Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 12 Feb 2025 22:06:13 +0200 Subject: [PATCH 19/28] make JPEG conversion a suboption --- .../settings_modal/tabs/general_tab.vue | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue index 9d23630a9..c8db96c5e 100644 --- a/src/components/settings_modal/tabs/general_tab.vue +++ b/src/components/settings_modal/tabs/general_tab.vue @@ -269,14 +269,17 @@ {{ $t('settings.image_compression') }} -
  • - - {{ $t('settings.always_use_jpeg') }} - -
  • +
      +
    • + + {{ $t('settings.always_use_jpeg') }} + +
    • +
  • Date: Mon, 17 Feb 2025 23:45:23 +0200 Subject: [PATCH 20/28] fix http-proxy-middleware --- build/dev-server.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/dev-server.js b/build/dev-server.js index 9fb6318ef..8e3b3a12c 100644 --- a/build/dev-server.js +++ b/build/dev-server.js @@ -53,7 +53,8 @@ Object.keys(proxyTable).forEach(function (context) { if (typeof options === 'string') { options = { target: options } } - app.use(proxyMiddleware.createProxyMiddleware(context, options)) + options.pathFilter = context + app.use(proxyMiddleware.createProxyMiddleware(options)) }) // handle fallback for HTML5 history API From bcea217705a721b6ae8591e847ca3b59364e5dcd Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 17 Feb 2025 23:57:36 +0200 Subject: [PATCH 21/28] fix status pinning --- src/components/status_action_buttons/buttons_definitions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/status_action_buttons/buttons_definitions.js b/src/components/status_action_buttons/buttons_definitions.js index b9dc522c4..ff7944268 100644 --- a/src/components/status_action_buttons/buttons_definitions.js +++ b/src/components/status_action_buttons/buttons_definitions.js @@ -112,9 +112,9 @@ export const BUTTONS = [{ }, action ({ status, dispatch }) { if (status.pinned) { - return dispatch('unpinStatus', { id: status.id }) + return dispatch('unpinStatus', status.id) } else { - return dispatch('pinStatus', { id: status.id }) + return dispatch('pinStatus', status.id) } } }, { From f7f09f0dbc0514bd800c15a805588af9b12fd803 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 18 Feb 2025 00:07:45 +0200 Subject: [PATCH 22/28] attachment buttons --- src/components/attachment/attachment.style.js | 4 ++-- src/components/attachment/attachment.vue | 18 +++++++++--------- .../theme_data/theme_data_3.service.js | 4 +++- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/components/attachment/attachment.style.js b/src/components/attachment/attachment.style.js index fde8a50a6..45baa5546 100644 --- a/src/components/attachment/attachment.style.js +++ b/src/components/attachment/attachment.style.js @@ -4,7 +4,7 @@ export default { notEditable: true, validInnerComponents: [ 'Border', - 'ButtonUnstyled', + 'Button', 'Input' ], defaultRules: [ @@ -14,7 +14,7 @@ export default { } }, { - component: 'ButtonUnstyled', + component: 'Button', parent: { component: 'Attachment' }, directives: { background: '#FFFFFF', diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue index 3ab7040ef..0701a393e 100644 --- a/src/components/attachment/attachment.vue +++ b/src/components/attachment/attachment.vue @@ -1,7 +1,7 @@ - + + + + + + +