logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://hacktivis.me/git/pleroma-fe.git
commit: 6846b4fe8a1829f8897f48acda7e0a272ffb216e
parent aae508f5a14556c34bfad0cd334c25591ce721c3
Author: Henry Jameson <me@hjkos.com>
Date:   Sat, 22 Jun 2024 00:54:23 +0300

Merge remote-tracking branch 'origin/develop' into appearance-tab

Diffstat:

M.gitlab-ci.yml4++++
Achangelog.d/ci-runner.skip2++
Achangelog.d/no-preserve-selection-color.fix1+
Achangelog.d/profile-mentions.fix1+
Achangelog.d/themesv3-on-safari.fix1+
Mindex.html2++
Msrc/components/post_status_form/post_status_form.js5+++--
Msrc/components/root.style.js2+-
Msrc/components/user_card/user_card.js2+-
Msrc/services/style_setter/style_setter.js69+++++++++++++++++++++++++++++++++++++++++++++++++++++----------------
Msrc/services/theme_data/iss_utils.js6++++--
Msrc/services/theme_data/theme_data_3.service.js4++--
12 files changed, 75 insertions(+), 24 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml @@ -43,6 +43,8 @@ lint: test: stage: test + tags: + - amd64 variables: APT_CACHE_DIR: apt-cache script: @@ -54,6 +56,8 @@ test: build: stage: build + tags: + - amd64 script: - yarn - npm run build diff --git a/changelog.d/ci-runner.skip b/changelog.d/ci-runner.skip @@ -0,0 +1 @@ +stop using that one runner for intensive tasks +\ No newline at end of file diff --git a/changelog.d/no-preserve-selection-color.fix b/changelog.d/no-preserve-selection-color.fix @@ -0,0 +1 @@ +Ensure selection text color has enough contrast diff --git a/changelog.d/profile-mentions.fix b/changelog.d/profile-mentions.fix @@ -0,0 +1 @@ +Fix profile mentions causing a 422 error diff --git a/changelog.d/themesv3-on-safari.fix b/changelog.d/themesv3-on-safari.fix @@ -0,0 +1 @@ +Fix Themes v3 on Safari not working diff --git a/index.html b/index.html @@ -4,6 +4,8 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no"> <link rel="icon" type="image/png" href="/favicon.png"> + <style id="pleroma-eager-styles" type="text/css"></style> + <style id="pleroma-lazy-styles" type="text/css"></style> <!--server-generated-meta--> </head> <body class="hidden"> diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js @@ -87,7 +87,8 @@ const PostStatusForm = { 'fileLimit', 'submitOnEnter', 'emojiPickerPlacement', - 'optimisticPosting' + 'optimisticPosting', + 'profileMention' ], emits: [ 'posted', @@ -125,7 +126,7 @@ const PostStatusForm = { const { scopeCopy } = this.$store.getters.mergedConfig - if (this.replyTo) { + if (this.replyTo || this.profileMention) { const currentUser = this.$store.state.users.currentUser statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser) } diff --git a/src/components/root.style.js b/src/components/root.style.js @@ -37,7 +37,7 @@ export default { // Selection colors '--selectionBackground': 'color | --accent', - '--selectionText': 'color | $textColor(--accent, --text)' + '--selectionText': 'color | $textColor(--accent, --text, no-preserve)' } } ] diff --git a/src/components/user_card/user_card.js b/src/components/user_card/user_card.js @@ -225,7 +225,7 @@ export default { this.$store.dispatch('setCurrentMedia', attachment) }, mentionUser () { - this.$store.dispatch('openPostStatusModal', { replyTo: true, repliedUser: this.user }) + this.$store.dispatch('openPostStatusModal', { profileMention: true, repliedUser: this.user }) }, onAvatarClickHandler (e) { if (this.onAvatarClick) { diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js @@ -6,6 +6,45 @@ import { getCssRules } from '../theme_data/css_utils.js' import { defaultState } from '../../modules/config.js' import { chunk } from 'lodash' +// On platforms where this is not supported, it will return undefined +// Otherwise it will return an array +const supportsAdoptedStyleSheets = !!document.adoptedStyleSheets + +const createStyleSheet = (id) => { + if (supportsAdoptedStyleSheets) { + return { + el: null, + sheet: new CSSStyleSheet(), + rules: [] + } + } + + const el = document.getElementById(id) + // Clear all rules in it + for (let i = el.sheet.cssRules.length - 1; i >= 0; --i) { + el.sheet.deleteRule(i) + } + + return { + el, + sheet: el.sheet, + rules: [] + } +} + +const EAGER_STYLE_ID = 'pleroma-eager-styles' +const LAZY_STYLE_ID = 'pleroma-lazy-styles' + +const adoptStyleSheets = (styles) => { + if (supportsAdoptedStyleSheets) { + document.adoptedStyleSheets = styles.map(s => s.sheet) + } + // Some older browsers do not support document.adoptedStyleSheets. + // In this case, we use the <style> elements. + // Since the <style> elements we need are already in the DOM, there + // is nothing to do here. +} + export const generateTheme = async (input, callbacks, debug) => { const { onNewRule = (rule, isLazy) => {}, @@ -100,13 +139,13 @@ export const tryLoadCache = () => { return false } if (cache.engineChecksum === getEngineChecksum()) { - const styleSheet = new CSSStyleSheet() - const lazyStyleSheet = new CSSStyleSheet() + const eagerStyles = createStyleSheet(EAGER_STYLE_ID) + const lazyStyles = createStyleSheet(LAZY_STYLE_ID) - cache.data[0].forEach(rule => styleSheet.insertRule(rule, 'index-max')) - cache.data[1].forEach(rule => lazyStyleSheet.insertRule(rule, 'index-max')) + cache.data[0].forEach(rule => eagerStyles.sheet.insertRule(rule, 'index-max')) + cache.data[1].forEach(rule => lazyStyles.sheet.insertRule(rule, 'index-max')) - document.adoptedStyleSheets = [styleSheet, lazyStyleSheet] + adoptStyleSheets([eagerStyles, lazyStyles]) return true } else { @@ -116,10 +155,8 @@ export const tryLoadCache = () => { } export const applyTheme = async (input, onFinish = (data) => {}, debug) => { - const styleSheet = new CSSStyleSheet() - const styleArray = [] - const lazyStyleSheet = new CSSStyleSheet() - const lazyStyleArray = [] + const eagerStyles = createStyleSheet(EAGER_STYLE_ID) + const lazyStyles = createStyleSheet(LAZY_STYLE_ID) console.log('DEBUG IS', debug) @@ -128,19 +165,19 @@ export const applyTheme = async (input, onFinish = (data) => {}, debug) => { { onNewRule (rule, isLazy) { if (isLazy) { - lazyStyleSheet.insertRule(rule, 'index-max') - lazyStyleArray.push(rule) + lazyStyles.sheet.insertRule(rule, 'index-max') + lazyStyles.rules.push(rule) } else { - styleSheet.insertRule(rule, 'index-max') - styleArray.push(rule) + eagerStyles.sheet.insertRule(rule, 'index-max') + eagerStyles.rules.push(rule) } }, onEagerFinished () { - document.adoptedStyleSheets = [styleSheet] + adoptStyleSheets([eagerStyles]) }, onLazyFinished () { - document.adoptedStyleSheets = [styleSheet, lazyStyleSheet] - const cache = { engineChecksum: getEngineChecksum(), data: [styleArray, lazyStyleArray] } + adoptStyleSheets([eagerStyles, lazyStyles]) + const cache = { engineChecksum: getEngineChecksum(), data: [eagerStyles.rules, lazyStyles.rules] } onFinish(cache) localStorage.setItem('pleroma-fe-theme-cache', JSON.stringify(cache)) } diff --git a/src/services/theme_data/iss_utils.js b/src/services/theme_data/iss_utils.js @@ -1,3 +1,5 @@ +import { sortBy } from 'lodash' + // "Unrolls" a tree structure of item: { parent: { ...item2, parent: { ...item3, parent: {...} } }} // into an array [item2, item3] for iterating export const unroll = (item) => { @@ -24,7 +26,7 @@ export const getAllPossibleCombinations = (array) => { }) const flatCombos = newCombos.reduce((acc, x) => [...acc, ...x], []) const uniqueComboStrings = new Set() - const uniqueCombos = flatCombos.map(x => x.toSorted()).filter(x => { + const uniqueCombos = flatCombos.map(sortBy).filter(x => { if (uniqueComboStrings.has(x.join())) { return false } else { @@ -64,7 +66,7 @@ export const genericRuleToSelector = components => (rule, ignoreOutOfTreeSelecto } const selectors = [realSelector, applicableVariant, ...applicableStates] - .toSorted((a, b) => { + .sort((a, b) => { if (a.startsWith(':')) return 1 if (/^[a-z]/.exec(a)) return -1 else return 0 diff --git a/src/services/theme_data/theme_data_3.service.js b/src/services/theme_data/theme_data_3.service.js @@ -1,6 +1,6 @@ import { convert, brightness } from 'chromatism' import sum from 'hash-sum' -import { flattenDeep } from 'lodash' +import { flattenDeep, sortBy } from 'lodash' import { alphaBlend, getTextColor, @@ -226,7 +226,7 @@ export const init = (extraRuleset, ultimateBackgroundColor, debug) => { combination.variant === 'normal' ? '' : combination.variant[0].toUpperCase() + combination.variant.slice(1).toLowerCase(), - ...combination.state.filter(x => x !== 'normal').toSorted().map(state => state[0].toUpperCase() + state.slice(1).toLowerCase()) + ...sortBy(combination.state.filter(x => x !== 'normal')).map(state => state[0].toUpperCase() + state.slice(1).toLowerCase()) ].join('') let inheritedTextColor = computedDirectives.textColor