logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://hacktivis.me/git/pleroma-fe.git
commit: 83acbf953a4f50a017e3e857ecbd0b008f0b3be0
parent b6accf9e7f7ef5f23cbf8bac57e54cefa0db4620
Author: HJ <30-hj@users.noreply.git.pleroma.social>
Date:   Mon, 27 Nov 2023 13:48:43 +0000

Merge branch 'release/2.6.x' into 'master'

merge 2.6.x to master since 2.6.1 release

See merge request pleroma/pleroma-fe!1874

Diffstat:

MCHANGELOG.md31+++++++++++++++++++++++++++++++
Dchangelog.d/add-taiwanese-aka-hokkien-i18n-support.add2--
Dchangelog.d/adminfe.add1-
Dchangelog.d/check-changelog.skip0
Dchangelog.d/custom-emoji-notif-width.fix1-
Dchangelog.d/edit-profile-button.fix1-
Dchangelog.d/emoji-picker-button-accessible.fix1-
Dchangelog.d/export-subst-hash.fix1-
Dchangelog.d/fix-reports.fix1-
Dchangelog.d/html-attribute-parsing.fix1-
Dchangelog.d/mention-twice.fix1-
Dchangelog.d/mentionsline-shouldbreak.fix1-
Dchangelog.d/nonascii-tags.fix1-
Dchangelog.d/oauth2-token-linger.fix1-
Dchangelog.d/parser.fix1-
Dchangelog.d/quote-hide-oops.fix1-
Dchangelog.d/quote-hide.fix1-
Dchangelog.d/quote.add1-
Dchangelog.d/react-button-safari.fix1-
Dchangelog.d/react-button.fix1-
Dchangelog.d/reload-user-pinned.fix1-
Dchangelog.d/scroll-emoji-selector-safari.fix1-
Mindex.html2+-
Mpackage.json2+-
Msrc/components/emoji_input/emoji_input.js3++-
Msrc/components/emoji_picker/emoji_picker.vue2+-
Msrc/components/extra_buttons/extra_buttons.js13++++++++++++-
Msrc/components/extra_buttons/extra_buttons.vue19++++++++++++++++++-
Msrc/components/global_notice_list/global_notice_list.vue2+-
Msrc/components/poll/poll.js3++-
Msrc/components/post_status_form/post_status_form.js3++-
Msrc/components/react_button/react_button.vue2++
Msrc/components/settings_modal/admin_tabs/frontends_tab.js51++++++++++++++++++++++++++++++++++++++++++++++++---
Msrc/components/settings_modal/admin_tabs/frontends_tab.scss16++++++++++++++++
Msrc/components/settings_modal/admin_tabs/frontends_tab.vue34+++++++++++++++++++++++-----------
Msrc/components/settings_modal/admin_tabs/instance_tab.vue6+++++-
Msrc/components/settings_modal/helpers/attachment_setting.js1+
Msrc/components/settings_modal/helpers/attachment_setting.vue38++++++++++++++++++++++++++++++++++----
Msrc/i18n/en.json8+++++---
Msrc/i18n/zh.json1-
Msrc/modules/adminSettings.js1+
Asrc/services/random_seed/random_seed.service.js3+++
Atools/collect-changelog27+++++++++++++++++++++++++++
43 files changed, 236 insertions(+), 53 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md @@ -3,6 +3,37 @@ 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/). +## 2.6.1 +### Fixed +- fix admin dashboard not having any feedback on frontend installation +- Fix frontend admin tab crashing when no primary frontend is set +- Add aria attributes to react and extra buttons + +## 2.6.0 +### Added +- add the initial i18n translation file for Taiwanese (Hokkien), and modify some related files. +- Implemented a very basic instance administration screen +- Implement quoting + +### Fixed +- Keep aspect ratio of custom emoji reaction in notification +- Fix openSettingsModalTab so that it correctly opens Settings modal instead of Admin modal +- Add alt text to emoji picker buttons +- Use export-subst gitattribute to allow tarball builds +- fix reports now showing reason/content +- Fix HTML attribute parsing, discard attributes not strating with a letter +- Make MentionsLine aware of line breaking by non-br elements +- Fix a bug where mentioning a user twice will not fill the mention into the textarea +- Fix parsing non-ascii tags +- Fix OAuth2 token lingering after revocation +- fix regex issue in HTML parser/renderer +- don't display quoted status twice +- fix typo in code that prevented cards from showing at all +- Fix react button not working if reaction accounts are not loaded +- Fix react button misalignment on safari ios +- Fix pinned statuses gone when reloading user timeline +- Fix scrolling emoji selector in modal in safari ios + ## 2.5.1 ### Fixed - Checkboxes in settings can now work with screenreaders diff --git a/changelog.d/add-taiwanese-aka-hokkien-i18n-support.add b/changelog.d/add-taiwanese-aka-hokkien-i18n-support.add @@ -1 +0,0 @@ -add the initial i18n translation file for Taiwanese (Hokkien), and modify some related files. -\ No newline at end of file diff --git a/changelog.d/adminfe.add b/changelog.d/adminfe.add @@ -1 +0,0 @@ -Implemented a very basic instance administration screen diff --git a/changelog.d/check-changelog.skip b/changelog.d/check-changelog.skip diff --git a/changelog.d/custom-emoji-notif-width.fix b/changelog.d/custom-emoji-notif-width.fix @@ -1 +0,0 @@ -Keep aspect ratio of custom emoji reaction in notification diff --git a/changelog.d/edit-profile-button.fix b/changelog.d/edit-profile-button.fix @@ -1 +0,0 @@ -Fix openSettingsModalTab so that it correctly opens Settings modal instead of Admin modal diff --git a/changelog.d/emoji-picker-button-accessible.fix b/changelog.d/emoji-picker-button-accessible.fix @@ -1 +0,0 @@ -Add alt text to emoji picker buttons diff --git a/changelog.d/export-subst-hash.fix b/changelog.d/export-subst-hash.fix @@ -1 +0,0 @@ -Use export-subst gitattribute to allow tarball builds diff --git a/changelog.d/fix-reports.fix b/changelog.d/fix-reports.fix @@ -1 +0,0 @@ -fix reports now showing reason/content:w diff --git a/changelog.d/html-attribute-parsing.fix b/changelog.d/html-attribute-parsing.fix @@ -1 +0,0 @@ -Fix HTML attribute parsing, discard attributes not strating with a letter diff --git a/changelog.d/mention-twice.fix b/changelog.d/mention-twice.fix @@ -1 +0,0 @@ -Fix a bug where mentioning a user twice will not fill the mention into the textarea diff --git a/changelog.d/mentionsline-shouldbreak.fix b/changelog.d/mentionsline-shouldbreak.fix @@ -1 +0,0 @@ -Make MentionsLine aware of line breaking by non-br elements diff --git a/changelog.d/nonascii-tags.fix b/changelog.d/nonascii-tags.fix @@ -1 +0,0 @@ -Fix parsing non-ascii tags diff --git a/changelog.d/oauth2-token-linger.fix b/changelog.d/oauth2-token-linger.fix @@ -1 +0,0 @@ -Fix OAuth2 token lingering after revocation diff --git a/changelog.d/parser.fix b/changelog.d/parser.fix @@ -1 +0,0 @@ -fix regex issue in HTML parser/renderer diff --git a/changelog.d/quote-hide-oops.fix b/changelog.d/quote-hide-oops.fix @@ -1 +0,0 @@ -fix typo in code that prevented cards from showing at all diff --git a/changelog.d/quote-hide.fix b/changelog.d/quote-hide.fix @@ -1 +0,0 @@ -don't display quoted status twice diff --git a/changelog.d/quote.add b/changelog.d/quote.add @@ -1 +0,0 @@ -Implement quoting diff --git a/changelog.d/react-button-safari.fix b/changelog.d/react-button-safari.fix @@ -1 +0,0 @@ -Fix react button misalignment on safari ios diff --git a/changelog.d/react-button.fix b/changelog.d/react-button.fix @@ -1 +0,0 @@ -Fix react button not working if reaction accounts are not loaded diff --git a/changelog.d/reload-user-pinned.fix b/changelog.d/reload-user-pinned.fix @@ -1 +0,0 @@ -Fix pinned statuses gone when reloading user timeline diff --git a/changelog.d/scroll-emoji-selector-safari.fix b/changelog.d/scroll-emoji-selector-safari.fix @@ -1 +0,0 @@ -Fix scrolling emoji selector in modal in safari ios diff --git a/index.html b/index.html @@ -3,8 +3,8 @@ <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no"> - <!--server-generated-meta--> <link rel="icon" type="image/png" href="/favicon.png"> + <!--server-generated-meta--> </head> <body class="hidden"> <noscript>To use Pleroma, please enable JavaScript.</noscript> diff --git a/package.json b/package.json @@ -1,6 +1,6 @@ { "name": "pleroma_fe", - "version": "2.5.0", + "version": "2.6.1", "description": "Pleroma frontend, the default frontend of Pleroma social network server", "author": "Pleroma contributors <https://git.pleroma.social/pleroma/pleroma-fe/-/blob/develop/CONTRIBUTORS.md>", "private": false, diff --git a/src/components/emoji_input/emoji_input.js b/src/components/emoji_input/emoji_input.js @@ -1,4 +1,5 @@ import Completion from '../../services/completion/completion.js' +import genRandomSeed from '../../services/random_seed/random_seed.service.js' import EmojiPicker from '../emoji_picker/emoji_picker.vue' import Popover from 'src/components/popover/popover.vue' import ScreenReaderNotice from 'src/components/screen_reader_notice/screen_reader_notice.vue' @@ -110,7 +111,7 @@ const EmojiInput = { }, data () { return { - randomSeed: `${Math.random()}`.replace('.', '-'), + randomSeed: genRandomSeed(), input: undefined, caretEl: undefined, highlighted: -1, diff --git a/src/components/emoji_picker/emoji_picker.vue b/src/components/emoji_picker/emoji_picker.vue @@ -3,7 +3,7 @@ ref="popover" trigger="click" popover-class="emoji-picker popover-default" - :trigger-attrs="{ 'aria-hidden': true }" + :trigger-attrs="{ 'aria-hidden': true, tabindex: -1 }" @show="onPopoverShown" @close="onPopoverClosed" > diff --git a/src/components/extra_buttons/extra_buttons.js b/src/components/extra_buttons/extra_buttons.js @@ -1,4 +1,5 @@ import Popover from '../popover/popover.vue' +import genRandomSeed from '../../services/random_seed/random_seed.service.js' import ConfirmModal from '../confirm_modal/confirm_modal.vue' import { library } from '@fortawesome/fontawesome-svg-core' import { @@ -40,7 +41,8 @@ const ExtraButtons = { data () { return { expanded: false, - showingDeleteDialog: false + showingDeleteDialog: false, + randomSeed: genRandomSeed() } }, methods: { @@ -152,6 +154,15 @@ const ExtraButtons = { editingAvailable () { return this.$store.state.instance.editingAvailable }, shouldConfirmDelete () { return this.$store.getters.mergedConfig.modalOnDelete + }, + triggerAttrs () { + return { + title: this.$t('status.more_actions'), + id: `popup-trigger-${this.randomSeed}`, + 'aria-controls': `popup-menu-${this.randomSeed}`, + 'aria-expanded': this.expanded, + 'aria-haspopup': 'menu' + } } } } diff --git a/src/components/extra_buttons/extra_buttons.vue b/src/components/extra_buttons/extra_buttons.vue @@ -2,6 +2,7 @@ <Popover class="ExtraButtons" trigger="click" + :trigger-attrs="triggerAttrs" placement="top" :offset="{ y: 5 }" :bound-to="{ x: 'container' }" @@ -10,10 +11,15 @@ @close="onClose" > <template #content="{close}"> - <div class="dropdown-menu"> + <div + class="dropdown-menu" + role="menu" + :id="`popup-menu-${randomSeed}`" + > <button v-if="canMute && !status.thread_muted" class="button-default dropdown-item dropdown-item-icon" + role="menuitem" @click.prevent="muteConversation" > <FAIcon @@ -24,6 +30,7 @@ <button v-if="canMute && status.thread_muted" class="button-default dropdown-item dropdown-item-icon" + role="menuitem" @click.prevent="unmuteConversation" > <FAIcon @@ -34,6 +41,7 @@ <button v-if="!status.pinned && canPin" class="button-default dropdown-item dropdown-item-icon" + role="menuitem" @click.prevent="pinStatus" @click="close" > @@ -45,6 +53,7 @@ <button v-if="status.pinned && canPin" class="button-default dropdown-item dropdown-item-icon" + role="menuitem" @click.prevent="unpinStatus" @click="close" > @@ -57,6 +66,7 @@ <button v-if="!status.bookmarked" class="button-default dropdown-item dropdown-item-icon" + role="menuitem" @click.prevent="bookmarkStatus" @click="close" > @@ -68,6 +78,7 @@ <button v-if="status.bookmarked" class="button-default dropdown-item dropdown-item-icon" + role="menuitem" @click.prevent="unbookmarkStatus" @click="close" > @@ -80,6 +91,7 @@ <button v-if="ownStatus && editingAvailable" class="button-default dropdown-item dropdown-item-icon" + role="menuitem" @click.prevent="editStatus" @click="close" > @@ -91,6 +103,7 @@ <button v-if="isEdited && editingAvailable" class="button-default dropdown-item dropdown-item-icon" + role="menuitem" @click.prevent="showStatusHistory" @click="close" > @@ -102,6 +115,7 @@ <button v-if="canDelete" class="button-default dropdown-item dropdown-item-icon" + role="menuitem" @click.prevent="deleteStatus" @click="close" > @@ -112,6 +126,7 @@ </button> <button class="button-default dropdown-item dropdown-item-icon" + role="menuitem" @click.prevent="copyLink" @click="close" > @@ -123,6 +138,7 @@ <a v-if="!status.is_local" class="button-default dropdown-item dropdown-item-icon" + role="menuitem" title="Source" :href="status.external_url" target="_blank" @@ -134,6 +150,7 @@ </a> <button class="button-default dropdown-item dropdown-item-icon" + role="menuitem" @click.prevent="reportStatus" @click="close" > diff --git a/src/components/global_notice_list/global_notice_list.vue b/src/components/global_notice_list/global_notice_list.vue @@ -32,7 +32,7 @@ top: calc(var(--navbar-height) + 0.5em); width: 100%; pointer-events: none; - z-index: var(--ZI_navbar_popovers); + z-index: var(--ZI_modals_popovers); display: flex; flex-direction: column; align-items: center; diff --git a/src/components/poll/poll.js b/src/components/poll/poll.js @@ -1,4 +1,5 @@ import Timeago from 'components/timeago/timeago.vue' +import genRandomSeed from '../../services/random_seed/random_seed.service.js' import RichContent from 'components/rich_content/rich_content.jsx' import { forEach, map } from 'lodash' @@ -13,7 +14,7 @@ export default { return { loading: false, choices: [], - randomSeed: `${Math.random()}`.replace('.', '-') + randomSeed: genRandomSeed() } }, created () { diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js @@ -1,4 +1,5 @@ import statusPoster from '../../services/status_poster/status_poster.service.js' +import genRandomSeed from '../../services/random_seed/random_seed.service.js' import MediaUpload from '../media_upload/media_upload.vue' import ScopeSelector from '../scope_selector/scope_selector.vue' import EmojiInput from '../emoji_input/emoji_input.vue' @@ -162,7 +163,7 @@ const PostStatusForm = { } return { - randomSeed: `${Math.random()}`.replace('.', '-'), + randomSeed: genRandomSeed(), dropFiles: [], uploadingFiles: false, error: null, diff --git a/src/components/react_button/react_button.vue b/src/components/react_button/react_button.vue @@ -11,6 +11,8 @@ /> <span class="button-unstyled popover-trigger" + role="button" + :tabindex="0" :title="$t('tool_tip.add_reaction')" @click.stop.prevent="show" > diff --git a/src/components/settings_modal/admin_tabs/frontends_tab.js b/src/components/settings_modal/admin_tabs/frontends_tab.js @@ -4,6 +4,7 @@ import IntegerSetting from '../helpers/integer_setting.vue' import StringSetting from '../helpers/string_setting.vue' import GroupSetting from '../helpers/group_setting.vue' import Popover from 'src/components/popover/popover.vue' +import PanelLoading from 'src/components/panel_loading/panel_loading.vue' import SharedComputedObject from '../helpers/shared_computed_object.js' import { library } from '@fortawesome/fontawesome-svg-core' @@ -22,12 +23,18 @@ const FrontendsTab = { defaultSource: 'admin' } }, + data () { + return { + working: false + } + }, components: { BooleanSetting, ChoiceSetting, IntegerSetting, StringSetting, GroupSetting, + PanelLoading, Popover }, created () { @@ -42,18 +49,56 @@ const FrontendsTab = { ...SharedComputedObject() }, methods: { + canInstall (frontend) { + const fe = this.frontends.find(f => f.name === frontend.name) + if (!fe) return false + return fe.refs.includes(frontend.ref) + }, + getSuggestedRef (frontend) { + const defaultFe = this.adminDraft[':pleroma'][':frontends'][':primary'] + if (defaultFe?.name === frontend.name && this.canInstall(defaultFe)) { + return defaultFe.ref + } else { + return frontend.refs[0] + } + }, update (frontend, suggestRef) { - const ref = suggestRef || frontend.refs[0] + const ref = suggestRef || this.getSuggestedRef(frontend) const { name } = frontend const payload = { name, ref } + this.working = true this.$store.state.api.backendInteractor.installFrontend({ payload }) - .then((externalUser) => { + .finally(() => { + this.working = false + }) + .then(async (response) => { this.$store.dispatch('loadFrontendsStuff') + if (response.error) { + const reason = await response.error.json() + this.$store.dispatch('pushGlobalNotice', { + level: 'error', + messageKey: 'admin_dash.frontend.failure_installing_frontend', + messageArgs: { + version: name + '/' + ref, + reason: reason.error + }, + timeout: 5000 + }) + } else { + this.$store.dispatch('pushGlobalNotice', { + level: 'success', + messageKey: 'admin_dash.frontend.success_installing_frontend', + messageArgs: { + version: name + '/' + ref + }, + timeout: 2000 + }) + } }) }, setDefault (frontend, suggestRef) { - const ref = suggestRef || frontend.refs[0] + const ref = suggestRef || this.getSuggestedRef(frontend) const { name } = frontend this.$store.commit('updateAdminDraft', { path: [':pleroma', ':frontends', ':primary'], value: { name, ref } }) diff --git a/src/components/settings_modal/admin_tabs/frontends_tab.scss b/src/components/settings_modal/admin_tabs/frontends_tab.scss @@ -3,6 +3,22 @@ padding: 0; } + .relative { + position: relative; + } + + .overlay { + position: absolute; + background: var(--bg); + // fix buttons showing through + z-index: 2; + opacity: 0.9; + top: 0; + bottom: 0; + left: 0; + right: 0; + } + dd { text-overflow: ellipsis; word-wrap: nowrap; diff --git a/src/components/settings_modal/admin_tabs/frontends_tab.vue b/src/components/settings_modal/admin_tabs/frontends_tab.vue @@ -10,7 +10,6 @@ <li> <h3>{{ $t('admin_dash.frontend.default_frontend') }}</h3> <p>{{ $t('admin_dash.frontend.default_frontend_tip') }}</p> - <p>{{ $t('admin_dash.frontend.default_frontend_tip2') }}</p> <ul class="setting-list"> <li> <StringSetting path=":pleroma.:frontends.:primary.name" /> @@ -24,7 +23,8 @@ </ul> </li> </ul> - <div class="setting-list"> + <div class="setting-list relative"> + <PanelLoading class="overlay" v-if="working"/> <h3>{{ $t('admin_dash.frontend.available_frontends') }}</h3> <ul class="cards-list"> <li @@ -33,9 +33,9 @@ > <strong>{{ frontend.name }}</strong> {{ ' ' }} - <span v-if="adminDraft[':pleroma'][':frontends'][':primary'].name === frontend.name"> + <span v-if="adminDraft[':pleroma'][':frontends'][':primary']?.name === frontend.name"> <i18n-t - v-if="adminDraft[':pleroma'][':frontends'][':primary'].ref === frontend.refs[0]" + v-if="adminDraft[':pleroma'][':frontends'][':primary']?.ref === frontend.refs[0]" keypath="admin_dash.frontend.is_default" /> <i18n-t @@ -86,6 +86,11 @@ ? $t('admin_dash.frontend.reinstall') : $t('admin_dash.frontend.install') }} + <code> + {{ + getSuggestedRef(frontend) + }} + </code> </button> <Popover v-if="frontend.refs.length > 1" @@ -93,13 +98,14 @@ class="button-dropdown" placement="bottom" > - <template #content> + <template #content="{close}"> <div class="dropdown-menu"> <button v-for="ref in frontend.refs" :key="ref" class="button-default dropdown-item" - @click="update(frontend, ref)" + @click.prevent="update(frontend, ref)" + @click="close" > <i18n-t keypath="admin_dash.frontend.install_version"> <template #version> @@ -128,14 +134,19 @@ class="button button-default btn" type="button" :disabled=" - adminDraft[':pleroma'][':frontends'][':primary'].name === frontend.name && - adminDraft[':pleroma'][':frontends'][':primary'].ref === frontend.refs[0] + adminDraft[':pleroma'][':frontends'][':primary']?.name === frontend.name && + adminDraft[':pleroma'][':frontends'][':primary']?.ref === frontend.refs[0] " @click="setDefault(frontend)" > {{ $t('admin_dash.frontend.set_default') }} + <code> + {{ + getSuggestedRef(frontend) + }} + </code> </button> {{ ' ' }} <Popover @@ -144,13 +155,14 @@ class="button-dropdown" placement="bottom" > - <template #content> + <template #content="{close}"> <div class="dropdown-menu"> <button - v-for="ref in frontend.refs.slice(1)" + v-for="ref in frontend.installedRefs || frontend.refs" :key="ref" class="button-default dropdown-item" - @click="setDefault(frontend, ref)" + @click.prevent="setDefault(frontend, ref)" + @click="close" > <i18n-t keypath="admin_dash.frontend.set_default_version"> <template #version> diff --git a/src/components/settings_modal/admin_tabs/instance_tab.vue b/src/components/settings_modal/admin_tabs/instance_tab.vue @@ -6,6 +6,10 @@ <li> <StringSetting path=":pleroma.:instance.:name" /> </li> + <!-- See https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3963 --> + <li v-if="adminDraft[':pleroma'][':instance'][':favicon'] !== undefined"> + <AttachmentSetting compact path=":pleroma.:instance.:favicon" /> + </li> <li> <StringSetting path=":pleroma.:instance.:email" /> </li> @@ -16,7 +20,7 @@ <StringSetting path=":pleroma.:instance.:short_description" /> </li> <li> - <AttachmentSetting path=":pleroma.:instance.:instance_thumbnail" /> + <AttachmentSetting compact path=":pleroma.:instance.:instance_thumbnail" /> </li> <li> <AttachmentSetting path=":pleroma.:instance.:background_image" /> diff --git a/src/components/settings_modal/helpers/attachment_setting.js b/src/components/settings_modal/helpers/attachment_setting.js @@ -7,6 +7,7 @@ export default { ...Setting, props: { ...Setting.props, + compact: Boolean, acceptTypes: { type: String, required: false, diff --git a/src/components/settings_modal/helpers/attachment_setting.vue b/src/components/settings_modal/helpers/attachment_setting.vue @@ -2,6 +2,7 @@ <span v-if="matchesExpertLevel" class="AttachmentSetting" + :class="{ '-compact': compact }" > <label :for="path" @@ -24,8 +25,8 @@ {{ backendDescriptionDescription + ' ' }} </p> <div class="attachment-input"> - <div>{{ $t('settings.url') }}</div> - <div class="controls"> + <div class="controls control-field"> + <label for="path">{{ $t('settings.url') }}</label> <input :id="path" class="string-input" @@ -40,7 +41,7 @@ /> <ProfileSettingIndicator :is-profile="isProfileSetting" /> </div> - <div>{{ $t('settings.preview') }}</div> + <div v-if="!compact">{{ $t('settings.preview') }}</div> <Attachment class="attachment" :compact="compact" @@ -50,7 +51,7 @@ @setMedia="onMedia" @naturalSizeLoad="onNaturalSizeLoad" /> - <div class="controls"> + <div class="controls control-upload"> <MediaUpload ref="mediaUpload" class="media-upload-icon" @@ -84,6 +85,35 @@ width: 20em; } + &.-compact { + .attachment-input { + flex-direction: row; + align-items: flex-end; + } + + .attachment { + flex: 0; + order: 0; + display: block; + min-width: 4em; + height: 4em; + align-self: center; + margin-bottom: 0; + } + + .control-field { + order: 1; + min-width: 12em; + margin-left: 0.5em; + } + + .control-upload { + order: 2; + min-width: 12em; + padding: 0 0.5em; + } + } + .controls { margin-bottom: 0.5em; diff --git a/src/i18n/en.json b/src/i18n/en.json @@ -902,8 +902,9 @@ "wip_notice": "Please note that this section is a WIP and lacks certain features as backend implementation of front-end management is incomplete.", "default_frontend": "Default front-end", "default_frontend_tip": "Default front-end will be shown to all users. Currently there's no way to for a user to select personal front-end. If you switch away from PleromaFE you'll most likely have to use old and buggy AdminFE to do instance configuration until we replace it.", - "default_frontend_tip2": "WIP: Since Pleroma backend doesn't properly list all installed frontends you'll have to enter name and reference manually. List below provides shortcuts to fill the values.", - "available_frontends": "Available for install" + "available_frontends": "Available for install", + "failure_installing_frontend": "Failed to install frontend {version}: {reason}", + "success_installing_frontend": "Frontend {version} successfully installed" }, "temp_overrides": { ":pleroma": { @@ -1033,7 +1034,8 @@ "reaction_count_label": "{num} person reacted | {num} people reacted", "hide_quote": "Hide the quoted status", "display_quote": "Display the quoted status", - "invisible_quote": "Quoted status unavailable: {link}" + "invisible_quote": "Quoted status unavailable: {link}", + "more_actions": "More actions on this status" }, "user_card": { "approve": "Approve", diff --git a/src/i18n/zh.json b/src/i18n/zh.json @@ -1266,7 +1266,6 @@ "wip_notice": "请注意,此部分是一个WIP,缺乏某些功能,因为前端管理的后台实现并不完整。", "default_frontend": "默认前端", "default_frontend_tip": "默认的前端将显示给所有用户。目前还没有办法让用户选择个人的前端。如果你不使用 PleromaFE,你很可能不得不使用旧的和有问题的 AdminFE 来进行实例配置,直到我们替换它。", - "default_frontend_tip2": "WIP: 由于 Pleroma 后端没有正确列出所有已安装的前端,你必须手动输入名称和引用。下面的列表提供了填写这些值的快捷方式。", "available_frontends": "可供安装" }, "temp_overrides": { diff --git a/src/modules/adminSettings.js b/src/modules/adminSettings.js @@ -26,6 +26,7 @@ const adminSettingsStorage = { }, setAvailableFrontends (state, { frontends }) { state.frontends = frontends.map(f => { + f.installedRefs = f.installed_refs if (f.name === 'pleroma-fe') { f.refs = ['master', 'develop'] } else { diff --git a/src/services/random_seed/random_seed.service.js b/src/services/random_seed/random_seed.service.js @@ -0,0 +1,3 @@ +const genRandomSeed = () => `${Math.random()}`.replace('.', '-') + +export default genRandomSeed diff --git a/tools/collect-changelog b/tools/collect-changelog @@ -0,0 +1,27 @@ +#!/bin/sh + +collectType() { + local suffix="$1" + local header="$2" + local printed=0 + for file in changelog.d/*."$suffix"; do + if [ '!' -f "$file" ]; then + continue + fi + if [ "$printed" = 0 ]; then + echo + echo "### $header" + printed=1 + fi + # Normalize any trailing newlines/spaces, etc. + echo "- $(cat "$file")" + done +} + +collectType security Security +collectType change Changed +collectType add Added +collectType fix Fixed +collectType remove Removed + +rm changelog.d/*