Merge remote-tracking branch 'origin/develop' into chat-refactor

This commit is contained in:
Henry Jameson 2026-07-30 14:55:05 +03:00
commit 9a7afc5688
13 changed files with 59 additions and 23 deletions

View file

@ -3,7 +3,11 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## 2.11 ## 2.11.1
### Fixed
- User note not working
## 2.11.0
### Added ### Added
- Initial MFM rendering support - Initial MFM rendering support
- Button to remove all drafts - Button to remove all drafts

4
changelog.d/2-11-2.fix Normal file
View file

@ -0,0 +1,4 @@
Fixed crashing on Firefox 153
Fixed serif-fonts being used by default in some cases
Fixed font select component showing and using objects instead of strings
Fixed generic ('sans-serif', 'monospace' etc) fonts not working

View file

@ -0,0 +1 @@
Fix style of extra notifications

View file

@ -0,0 +1 @@
Fix MFA login and recovery code authentication.

View file

@ -0,0 +1 @@
Do not crash even on css rule insertion failure

View file

@ -1,6 +1,6 @@
{ {
"name": "pleroma_fe", "name": "pleroma_fe",
"version": "2.11.0", "version": "2.11.1",
"description": "Pleroma frontend, the default frontend of Pleroma social network server", "description": "Pleroma frontend, the default frontend of Pleroma social network server",
"author": "Pleroma contributors <https://git.pleroma.social/pleroma/pleroma-fe/src/CONTRIBUTORS.md>", "author": "Pleroma contributors <https://git.pleroma.social/pleroma/pleroma-fe/src/CONTRIBUTORS.md>",
"private": false, "private": false,

View file

@ -1,5 +1,5 @@
<template> <template>
<div class="ExtraNotifications"> <div class="ExtraNotifications panel-body">
<div <div
v-if="shouldShowChats" v-if="shouldShowChats"
class="notification unseen" class="notification unseen"
@ -87,6 +87,11 @@
flex-direction: column; flex-direction: column;
align-items: stretch; align-items: stretch;
&.panel-body::before {
content: '';
padding: 0;
}
.notification { .notification {
width: 100%; width: 100%;
border-bottom: 1px solid; border-bottom: 1px solid;

View file

@ -63,8 +63,8 @@ const LoginForm = {
}) })
}) })
.catch((error) => { .catch((error) => {
if (error.errorData?.error === 'mfa_required') { if (error.errorData === 'mfa_required') {
this.requireMFA({ settings: error }) this.requireMFA({ settings: error.error })
} else if (error.identifier === 'password_reset_required') { } else if (error.identifier === 'password_reset_required') {
this.$router.push({ this.$router.push({
name: 'password-reset', name: 'password-reset',

View file

@ -44,7 +44,7 @@ export default {
} }
verifyRecoveryCode(data) verifyRecoveryCode(data)
.then((result) => { .then(({ data: result }) => {
this.login(result).then(() => { this.login(result).then(() => {
this.$router.push({ name: 'friends' }) this.$router.push({ name: 'friends' })
}) })

View file

@ -68,7 +68,7 @@
:model-value="mergedConfig.fontInterface" :model-value="mergedConfig.fontInterface"
name="ui" name="ui"
:label="$t('settings.style.fonts.components_inline.interface')" :label="$t('settings.style.fonts.components_inline.interface')"
:fallback="{ family: 'sans-serif' }" fallback="sans-serif"
no-inherit="1" no-inherit="1"
@update:model-value="v => updateFont('fontInterface', v)" @update:model-value="v => updateFont('fontInterface', v)"
/> />
@ -77,7 +77,7 @@
<FontControl <FontControl
:model-value="mergedConfig.fontInput" :model-value="mergedConfig.fontInput"
name="input" name="input"
:fallback="{ family: 'inherit' }" fallback="inherit"
:label="$t('settings.style.fonts.components_inline.input')" :label="$t('settings.style.fonts.components_inline.input')"
@update:model-value="v => updateFont('fontInput', v)" @update:model-value="v => updateFont('fontInput', v)"
/> />

View file

@ -58,7 +58,7 @@
<FontControl <FontControl
:model-value="mergedConfig.fontPosts" :model-value="mergedConfig.fontPosts"
name="post" name="post"
:fallback="{ family: 'inherit' }" fallback="inherit"
:label="$t('settings.style.fonts.components.post')" :label="$t('settings.style.fonts.components.post')"
@update:model-value="v => updateFont('fontPosts', v)" @update:model-value="v => updateFont('fontPosts', v)"
/> />
@ -67,7 +67,7 @@
<FontControl <FontControl
:model-value="mergedConfig.fontMonospace" :model-value="mergedConfig.fontMonospace"
name="postCode" name="postCode"
:fallback="{ family: 'monospace' }" fallback="monospace"
:label="$t('settings.style.fonts.components.monospace')" :label="$t('settings.style.fonts.components.monospace')"
@update:model-value="v => updateFont('fontMonospace', v)" @update:model-value="v => updateFont('fontMonospace', v)"
/> />

View file

@ -32,16 +32,17 @@ export const createStyleSheet = (id, priority = 1000) => {
newRule = newRule.replace(/backdrop-filter:[^;]+;/g, '') // Remove backdrop-filter newRule = newRule.replace(/backdrop-filter:[^;]+;/g, '') // Remove backdrop-filter
} }
// firefox doesn't like invalid selectors if (newRule.startsWith('::-webkit')) {
if ( if (typeof CSS.supports !== 'function') return
!CSS.supports?.('selector(::-webkit-scrollbar)') && // firefox doesn't like invalid selectors
!CSS.supports?.('selector(::-webkit-scrollbar-button)') && const fullWebkitScrollbarSupport =
!CSS.supports?.('selector(::-webkit-resizer)') && CSS.supports('selector(::-webkit-scrollbar)') &&
!CSS.supports?.('selector(::-webkit-scrollbar-thumb)') && CSS.supports('selector(::-webkit-scrollbar-button)') &&
newRule.startsWith('::-webkit') CSS.supports('selector(::-webkit-resizer)') &&
) { CSS.supports('selector(::-webkit-scrollbar-thumb)')
return if (!fullWebkitScrollbarSupport) return
} }
this.rules.push( this.rules.push(
newRule.replace(/var\(--shadowFilter\)[^;]*;/g, ''), // Remove shadowFilter references newRule.replace(/var\(--shadowFilter\)[^;]*;/g, ''), // Remove shadowFilter references
) )
@ -59,7 +60,13 @@ export const adoptStyleSheets = throttle(() => {
.sort((a, b) => a.priority - b.priority) .sort((a, b) => a.priority - b.priority)
.map((sheet) => { .map((sheet) => {
const css = new CSSStyleSheet() const css = new CSSStyleSheet()
sheet.rules.forEach((r) => css.insertRule(r)) sheet.rules.forEach((r) => {
try {
css.insertRule(r)
} catch (e) {
console.warn('Error inserting rule:', e, r)
}
})
return css return css
}) })
} else { } else {

View file

@ -17,6 +17,16 @@ import {
} from 'src/services/theme_data/theme_data.service.js' } from 'src/services/theme_data/theme_data.service.js'
import { convertTheme2To3 } from 'src/services/theme_data/theme2_to_theme3.js' import { convertTheme2To3 } from 'src/services/theme_data/theme2_to_theme3.js'
const GENERIC_FONT_NAMES = new Set([
'serif',
'sans-serif',
'system-ui',
'cursive',
'fantasy',
'math',
'monospace',
])
export const useInterfaceStore = defineStore('interface', { export const useInterfaceStore = defineStore('interface', {
state: () => ({ state: () => ({
localFonts: null, localFonts: null,
@ -246,7 +256,7 @@ export const useInterfaceStore = defineStore('interface', {
} }
}, },
setFontsList(value) { setFontsList(value) {
this.localFonts = [...new Set(value.map((font) => font)).values()] this.localFonts = [...new Set(value.map(({ family }) => family)).values()]
}, },
queryLocalFonts() { queryLocalFonts() {
if (this.localFonts !== null) return if (this.localFonts !== null) return
@ -706,11 +716,14 @@ export const useInterfaceStore = defineStore('interface', {
Object.entries(fontMap).forEach(([font, component]) => { Object.entries(fontMap).forEach(([font, component]) => {
const family = mergedConfig[`font${font}`] const family = mergedConfig[`font${font}`]
const variable = font === 'Monospace' ? '--monoFont' : '--font' const variable = font === 'Monospace' ? '--monoFont' : '--font'
if (family) { if (typeof family === 'string') {
const familyString = GENERIC_FONT_NAMES.has(family)
? family
: `"${family}"`
hacks.push({ hacks.push({
component, component,
directives: { directives: {
[variable]: `generic | "${family}"`, [variable]: `generic | ${familyString}`,
}, },
}) })
} }