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:
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