コミットを比較
65 コミット
cbf0710e0a
...
0928937f29
作成者 | SHA1 | 日付 |
---|---|---|
Nikotile | 0928937f29 | |
HJ | 021fbd9b58 | |
jonossa | c9072ddb0b | |
HJ | fa532b1f00 | |
HJ | 19618db192 | |
Poesty Li | 624da7240e | |
HJ | 716b648014 | |
Alexander Tumin | 493120b545 | |
Alexander Tumin | 3403f6a1ed | |
Alexander Tumin | 306e254c15 | |
Alexander Tumin | 832019b2c2 | |
Alexander Tumin | 998aa8f732 | |
HJ | 8abaf8fa37 | |
tusooa | da46c30893 | |
HJ | 0842193957 | |
HJ | 2e20c2c46a | |
tusooa | 88db557141 | |
tusooa | 1a852b96ef | |
tusooa | 830085b3e4 | |
tusooa | a7ad7f9f17 | |
HJ | 0d9054d165 | |
tusooa | 763ae182b8 | |
HJ | 602c48d1fb | |
Pleroma Renovate Bot | 355f0fd35c | |
tusooa | 5468309f6a | |
HJ | eec27700f0 | |
tusooa | 2316bcc842 | |
HJ | e45dff0b26 | |
tusooa | 65d78ced93 | |
HJ | 7ae61f6bd5 | |
tusooa | 7ccbe902a2 | |
tusooa | 423d1e0433 | |
Pacific Coast Highway | 597c069e36 | |
Dmytro Poltavchenko | 30f1502df6 | |
nixe neko | 2e9014abd7 | |
Poesty Li | cb18497902 | |
Poesty Li | 6dc683f602 | |
Ryan Chiang | 79f1d79c4e | |
HJ | 06551d447c | |
tusooa | 902954b298 | |
Pleroma Renovate Bot | 621242f5a1 | |
tusooa | 5f8988de92 | |
Pleroma Renovate Bot | c1249ffaf3 | |
tusooa | ceebf6ac2e | |
Pleroma Renovate Bot | 8351e73bd7 | |
tusooa | 04f5a448e4 | |
Pleroma Renovate Bot | d2716341cb | |
tusooa | 6158b8667e | |
HJ | f229c4a106 | |
HJ | af22092472 | |
HJ | a08378253f | |
tusooa | 2635e24679 | |
tusooa | 93e01aefad | |
Pleroma Renovate Bot | ec0b239496 | |
Pleroma Renovate Bot | 31c9b6885b | |
tusooa | 5f12c3ae76 | |
tusooa | d159031121 | |
Tusooa Zhu | 68110ce825 | |
tusooa | 1ab958ba6b | |
tusooa | 5243632678 | |
tusooa | 5478192e20 | |
tusooa | 246593970b | |
tusooa | 72cb9e8bdb | |
tusooa | 6235af4592 | |
tusooa | 4db7f07421 |
28
CHANGELOG.md
28
CHANGELOG.md
|
@ -3,6 +3,34 @@ 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.5.1
|
||||
### Fixed
|
||||
- Checkboxes in settings can now work with screenreaders
|
||||
- Autocomplete in edit boxes can now work with screenreaders
|
||||
- Status interact buttons now have focus indicator for anonymous users
|
||||
- Top bar buttons now correctly have text labels
|
||||
- It is now possible to register if the site admin requires birthday to register
|
||||
- User cards from search results will correctly popup
|
||||
- Fix notification attachment icon overflow
|
||||
- Editing mute words is less laggy
|
||||
- Repeater's name will no longer mess up with the directionality of the text sitting on the same line
|
||||
- Unauthenticated access will give better error messages
|
||||
- It is now easier to close the media viewer with a mouse when there is only one image
|
||||
- Deleting profile fields can work properly
|
||||
- Clicking the react button will correctly focus the search box
|
||||
- Clicking buttons on the top-bar will no longer bring you to the top of the page
|
||||
- Emoji picker is much faster to load
|
||||
- `blockquote`s have a better display style
|
||||
- Announcements posting and editing are now available to everyone with such a privilege, not just admins
|
||||
- Adding or removing list members will actually work
|
||||
- Emojis without a pack are now correctly displayed in emoji picker
|
||||
- Changing notification settings will actually work
|
||||
|
||||
### Added
|
||||
- You can now set and see birthdays
|
||||
- Optional confirmation dialogs when performing various actions
|
||||
- You can now set fallback languages
|
||||
|
||||
## 2.5.0 - 23.12.2022
|
||||
### Fixed
|
||||
- UI no longer lags when switching between mobile and desktop mode
|
||||
|
|
26
package.json
26
package.json
|
@ -16,12 +16,12 @@
|
|||
"lint-fix": "eslint --fix --ext .js,.vue src test/unit/specs test/e2e/specs"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": "7.20.7",
|
||||
"@babel/runtime": "7.21.0",
|
||||
"@chenfengyuan/vue-qrcode": "2.0.0",
|
||||
"@fortawesome/fontawesome-svg-core": "6.2.1",
|
||||
"@fortawesome/free-regular-svg-icons": "6.2.1",
|
||||
"@fortawesome/free-solid-svg-icons": "6.2.1",
|
||||
"@fortawesome/vue-fontawesome": "3.0.2",
|
||||
"@fortawesome/fontawesome-svg-core": "6.3.0",
|
||||
"@fortawesome/free-regular-svg-icons": "6.3.0",
|
||||
"@fortawesome/free-solid-svg-icons": "6.3.0",
|
||||
"@fortawesome/vue-fontawesome": "3.0.3",
|
||||
"@kazvmoe-infra/pinch-zoom-element": "1.2.0",
|
||||
"@kazvmoe-infra/unicode-emoji-json": "0.4.0",
|
||||
"@ruffle-rs/ruffle": "0.1.0-nightly.2022.7.12",
|
||||
|
@ -36,7 +36,7 @@
|
|||
"localforage": "1.10.0",
|
||||
"parse-link-header": "2.0.0",
|
||||
"phoenix": "1.6.2",
|
||||
"punycode.js": "2.1.0",
|
||||
"punycode.js": "2.3.0",
|
||||
"qrcode": "1.5.0",
|
||||
"querystring-es3": "0.2.1",
|
||||
"url": "0.11.0",
|
||||
|
@ -49,19 +49,19 @@
|
|||
"vuex": "4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.20.7",
|
||||
"@babel/core": "7.21.0",
|
||||
"@babel/eslint-parser": "7.19.1",
|
||||
"@babel/plugin-transform-runtime": "7.19.6",
|
||||
"@babel/plugin-transform-runtime": "7.21.0",
|
||||
"@babel/preset-env": "7.20.2",
|
||||
"@babel/register": "7.18.9",
|
||||
"@babel/register": "7.21.0",
|
||||
"@intlify/vue-i18n-loader": "5.0.0",
|
||||
"@ungap/event-target": "0.2.3",
|
||||
"@vue/babel-helper-vue-jsx-merge-props": "1.4.0",
|
||||
"@vue/babel-plugin-jsx": "1.1.1",
|
||||
"@vue/compiler-sfc": "3.2.45",
|
||||
"@vue/test-utils": "2.2.7",
|
||||
"@vue/test-utils": "2.2.8",
|
||||
"autoprefixer": "10.4.13",
|
||||
"babel-loader": "9.1.0",
|
||||
"babel-loader": "9.1.2",
|
||||
"babel-plugin-lodash": "3.3.4",
|
||||
"chai": "4.3.7",
|
||||
"chalk": "1.1.3",
|
||||
|
@ -72,7 +72,7 @@
|
|||
"css-loader": "6.7.3",
|
||||
"css-minimizer-webpack-plugin": "4.2.2",
|
||||
"custom-event-polyfill": "1.0.7",
|
||||
"eslint": "8.32.0",
|
||||
"eslint": "8.33.0",
|
||||
"eslint-config-standard": "17.0.0",
|
||||
"eslint-formatter-friendly": "7.0.0",
|
||||
"eslint-plugin-import": "2.27.5",
|
||||
|
@ -99,7 +99,7 @@
|
|||
"lodash": "4.17.21",
|
||||
"mini-css-extract-plugin": "2.7.2",
|
||||
"mocha": "10.2.0",
|
||||
"nightwatch": "2.6.10",
|
||||
"nightwatch": "2.6.11",
|
||||
"opn": "5.5.0",
|
||||
"ora": "0.4.1",
|
||||
"postcss": "8.4.20",
|
||||
|
|
14
src/App.scss
14
src/App.scss
|
@ -580,8 +580,6 @@ textarea,
|
|||
}
|
||||
|
||||
&[type="checkbox"] {
|
||||
display: none;
|
||||
|
||||
&:checked + label::before {
|
||||
color: $fallback--text;
|
||||
color: var(--inputText, $fallback--text);
|
||||
|
@ -887,3 +885,15 @@ option {
|
|||
opacity: 0;
|
||||
}
|
||||
/* stylelint-enable no-descending-specificity */
|
||||
|
||||
.visible-for-screenreader-only {
|
||||
display: block;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
visibility: visible;
|
||||
clip: rect(0 0 0 0);
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
}
|
||||
|
|
|
@ -253,6 +253,7 @@ const getNodeInfo = async ({ store }) => {
|
|||
store.dispatch('setInstanceOption', { name: 'safeDM', value: features.includes('safe_dm_mentions') })
|
||||
store.dispatch('setInstanceOption', { name: 'shoutAvailable', value: features.includes('chat') })
|
||||
store.dispatch('setInstanceOption', { name: 'pleromaChatMessagesAvailable', value: features.includes('pleroma_chat_messages') })
|
||||
store.dispatch('setInstanceOption', { name: 'pleromaCustomEmojiReactionsAvailable', value: features.includes('pleroma_custom_emoji_reactions') })
|
||||
store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: features.includes('gopher') })
|
||||
store.dispatch('setInstanceOption', { name: 'pollsAvailable', value: features.includes('polls') })
|
||||
store.dispatch('setInstanceOption', { name: 'editingAvailable', value: features.includes('editing') })
|
||||
|
|
|
@ -5,12 +5,16 @@
|
|||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
class="visible-for-screenreader-only"
|
||||
:disabled="disabled"
|
||||
:checked="modelValue"
|
||||
:indeterminate="indeterminate"
|
||||
@change="$emit('update:modelValue', $event.target.checked)"
|
||||
>
|
||||
<i class="checkbox-indicator" />
|
||||
<i
|
||||
class="checkbox-indicator"
|
||||
:aria-hidden="true"
|
||||
/>
|
||||
<span
|
||||
v-if="!!$slots.default"
|
||||
class="label"
|
||||
|
@ -33,6 +37,7 @@ export default {
|
|||
|
||||
<style lang="scss">
|
||||
@import "../../variables";
|
||||
@import "../../mixins";
|
||||
|
||||
.checkbox {
|
||||
position: relative;
|
||||
|
@ -81,8 +86,6 @@ export default {
|
|||
}
|
||||
|
||||
input[type="checkbox"] {
|
||||
display: none;
|
||||
|
||||
&:checked + .checkbox-indicator::before {
|
||||
color: $fallback--text;
|
||||
color: var(--inputText, $fallback--text);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
class="logo"
|
||||
:to="{ name: 'root' }"
|
||||
:style="logoBgStyle"
|
||||
:title="sitename"
|
||||
>
|
||||
<div
|
||||
class="mask"
|
||||
|
@ -38,13 +39,13 @@
|
|||
/>
|
||||
<button
|
||||
class="button-unstyled nav-icon"
|
||||
:title="$t('nav.preferences')"
|
||||
@click.stop="openSettingsModal"
|
||||
>
|
||||
<FAIcon
|
||||
fixed-width
|
||||
class="fa-scale-110 fa-old-padding"
|
||||
icon="cog"
|
||||
:title="$t('nav.preferences')"
|
||||
/>
|
||||
</button>
|
||||
<a
|
||||
|
@ -52,26 +53,26 @@
|
|||
href="/pleroma/admin/#/login-pleroma"
|
||||
class="nav-icon"
|
||||
target="_blank"
|
||||
:title="$t('nav.administration')"
|
||||
@click.stop
|
||||
>
|
||||
<FAIcon
|
||||
fixed-width
|
||||
class="fa-scale-110 fa-old-padding"
|
||||
icon="tachometer-alt"
|
||||
:title="$t('nav.administration')"
|
||||
/>
|
||||
</a>
|
||||
<span class="spacer" />
|
||||
<button
|
||||
v-if="currentUser"
|
||||
class="button-unstyled nav-icon"
|
||||
:title="$t('login.logout')"
|
||||
@click.stop.prevent="logout"
|
||||
>
|
||||
<FAIcon
|
||||
fixed-width
|
||||
class="fa-scale-110 fa-old-padding"
|
||||
icon="sign-out-alt"
|
||||
:title="$t('login.logout')"
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import Completion from '../../services/completion/completion.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'
|
||||
import UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'
|
||||
import { take } from 'lodash'
|
||||
import { findOffset } from '../../services/offset_finder/offset_finder.service.js'
|
||||
|
@ -109,9 +110,10 @@ const EmojiInput = {
|
|||
},
|
||||
data () {
|
||||
return {
|
||||
randomSeed: `${Math.random()}`.replace('.', '-'),
|
||||
input: undefined,
|
||||
caretEl: undefined,
|
||||
highlighted: 0,
|
||||
highlighted: -1,
|
||||
caret: 0,
|
||||
focused: false,
|
||||
blurTimeout: null,
|
||||
|
@ -125,12 +127,16 @@ const EmojiInput = {
|
|||
components: {
|
||||
Popover,
|
||||
EmojiPicker,
|
||||
UnicodeDomainIndicator
|
||||
UnicodeDomainIndicator,
|
||||
ScreenReaderNotice
|
||||
},
|
||||
computed: {
|
||||
padEmoji () {
|
||||
return this.$store.getters.mergedConfig.padEmoji
|
||||
},
|
||||
defaultCandidateIndex () {
|
||||
return this.$store.getters.mergedConfig.autocompleteSelect ? 0 : -1
|
||||
},
|
||||
preText () {
|
||||
return this.modelValue.slice(0, this.caret)
|
||||
},
|
||||
|
@ -203,6 +209,12 @@ const EmojiInput = {
|
|||
top: this.input.scrollTop,
|
||||
left: this.input.scrollLeft
|
||||
})
|
||||
},
|
||||
suggestionListId () {
|
||||
return `suggestions-${this.randomSeed}`
|
||||
},
|
||||
suggestionItemId () {
|
||||
return (index) => `suggestion-item-${index}-${this.randomSeed}`
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
|
@ -278,6 +290,11 @@ const EmojiInput = {
|
|||
...rest,
|
||||
img: imageUrl || ''
|
||||
}))
|
||||
this.highlighted = this.defaultCandidateIndex
|
||||
this.$refs.screenReaderNotice.announce(
|
||||
this.$tc('tool_tip.autocomplete_available',
|
||||
this.suggestions.length,
|
||||
{ number: this.suggestions.length }))
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
@ -374,26 +391,27 @@ const EmojiInput = {
|
|||
},
|
||||
cycleBackward (e) {
|
||||
const len = this.suggestions.length || 0
|
||||
if (len > 1) {
|
||||
this.highlighted -= 1
|
||||
if (this.highlighted < 0) {
|
||||
this.highlighted = this.suggestions.length - 1
|
||||
}
|
||||
|
||||
this.highlighted -= 1
|
||||
if (this.highlighted === -1) {
|
||||
this.input.focus()
|
||||
} else if (this.highlighted < -1) {
|
||||
this.highlighted = len - 1
|
||||
}
|
||||
if (len > 0) {
|
||||
e.preventDefault()
|
||||
} else {
|
||||
this.highlighted = 0
|
||||
}
|
||||
},
|
||||
cycleForward (e) {
|
||||
const len = this.suggestions.length || 0
|
||||
if (len > 1) {
|
||||
this.highlighted += 1
|
||||
if (this.highlighted >= len) {
|
||||
this.highlighted = 0
|
||||
}
|
||||
|
||||
this.highlighted += 1
|
||||
if (this.highlighted >= len) {
|
||||
this.highlighted = -1
|
||||
this.input.focus()
|
||||
}
|
||||
if (len > 0) {
|
||||
e.preventDefault()
|
||||
} else {
|
||||
this.highlighted = 0
|
||||
}
|
||||
},
|
||||
scrollIntoView () {
|
||||
|
@ -540,6 +558,13 @@ const EmojiInput = {
|
|||
})
|
||||
},
|
||||
resize () {
|
||||
},
|
||||
autoCompleteItemLabel (suggestion) {
|
||||
if (suggestion.user) {
|
||||
return suggestion.displayText + ' ' + suggestion.detailText
|
||||
} else {
|
||||
return this.maybeLocalizedEmojiName(suggestion)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,12 +4,19 @@
|
|||
class="emoji-input"
|
||||
:class="{ 'with-picker': !hideEmojiButton }"
|
||||
>
|
||||
<slot />
|
||||
<slot
|
||||
:id="'textbox-' + randomSeed"
|
||||
:aria-owns="suggestionListId"
|
||||
aria-autocomplete="both"
|
||||
:aria-expanded="showSuggestions"
|
||||
:aria-activedescendant="(!showSuggestions || highlighted === -1) ? '' : suggestionItemId(highlighted)"
|
||||
/>
|
||||
<!-- TODO: make the 'x' disappear if at the end maybe? -->
|
||||
<div
|
||||
ref="hiddenOverlay"
|
||||
class="hidden-overlay"
|
||||
:style="overlayStyle"
|
||||
:aria-hidden="true"
|
||||
>
|
||||
<span>{{ preText }}</span>
|
||||
<span
|
||||
|
@ -18,11 +25,16 @@
|
|||
>x</span>
|
||||
<span>{{ postText }}</span>
|
||||
</div>
|
||||
<screen-reader-notice
|
||||
ref="screenReaderNotice"
|
||||
aria-live="assertive"
|
||||
/>
|
||||
<template v-if="enableEmojiPicker">
|
||||
<button
|
||||
v-if="!hideEmojiButton"
|
||||
class="button-unstyled emoji-picker-icon"
|
||||
type="button"
|
||||
:title="$t('emoji.add_emoji')"
|
||||
@click.prevent="togglePicker"
|
||||
>
|
||||
<FAIcon :icon="['far', 'smile-beam']" />
|
||||
|
@ -43,17 +55,24 @@
|
|||
ref="suggestorPopover"
|
||||
class="autocomplete-panel"
|
||||
placement="bottom"
|
||||
:trigger-attrs="{ 'aria-hidden': true }"
|
||||
>
|
||||
<template #content>
|
||||
<div
|
||||
:id="suggestionListId"
|
||||
ref="panel-body"
|
||||
class="autocomplete-panel-body"
|
||||
role="listbox"
|
||||
>
|
||||
<div
|
||||
v-for="(suggestion, index) in suggestions"
|
||||
:id="suggestionItemId(index)"
|
||||
:key="index"
|
||||
class="autocomplete-item"
|
||||
role="option"
|
||||
:class="{ highlighted: index === highlighted }"
|
||||
:aria-label="autoCompleteItemLabel(suggestion)"
|
||||
:aria-selected="index === highlighted"
|
||||
@click.stop.prevent="onClick($event, suggestion)"
|
||||
>
|
||||
<span class="image">
|
||||
|
|
|
@ -94,8 +94,9 @@ export const suggestUsers = ({ dispatch, state }) => {
|
|||
|
||||
const newSuggestions = state.users.users.filter(
|
||||
user =>
|
||||
user.screen_name.toLowerCase().startsWith(noPrefix) ||
|
||||
user.name.toLowerCase().startsWith(noPrefix)
|
||||
user.screen_name && user.name && (
|
||||
user.screen_name.toLowerCase().startsWith(noPrefix) ||
|
||||
user.name.toLowerCase().startsWith(noPrefix))
|
||||
).slice(0, 20).sort((a, b) => {
|
||||
let aScore = 0
|
||||
let bScore = 0
|
||||
|
|
|
@ -98,6 +98,11 @@ const EmojiPicker = {
|
|||
required: false,
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
hideCustomEmoji: {
|
||||
required: false,
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data () {
|
||||
|
@ -280,6 +285,9 @@ const EmojiPicker = {
|
|||
return 0
|
||||
},
|
||||
allCustomGroups () {
|
||||
if (this.hideCustomEmoji) {
|
||||
return {}
|
||||
}
|
||||
const emojis = this.$store.getters.groupedCustomEmojis
|
||||
if (emojis.unpacked) {
|
||||
emojis.unpacked.text = this.$t('emoji.unpacked')
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
ref="popover"
|
||||
trigger="click"
|
||||
popover-class="emoji-picker popover-default"
|
||||
:trigger-attrs="{ 'aria-hidden': true }"
|
||||
@show="onPopoverShown"
|
||||
@close="onPopoverClosed"
|
||||
>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div class="EmojiReactions">
|
||||
<UserListPopover
|
||||
v-for="(reaction) in emojiReactions"
|
||||
:key="reaction.name"
|
||||
:key="reaction.url || reaction.name"
|
||||
:users="accountsForEmoji[reaction.name]"
|
||||
>
|
||||
<button
|
||||
|
@ -11,7 +11,21 @@
|
|||
@click="emojiOnClick(reaction.name, $event)"
|
||||
@mouseenter="fetchEmojiReactionsByIfMissing()"
|
||||
>
|
||||
<span class="reaction-emoji">{{ reaction.name }}</span>
|
||||
<span
|
||||
class="reaction-emoji"
|
||||
>
|
||||
<img
|
||||
v-if="reaction.url"
|
||||
:src="reaction.url"
|
||||
:title="reaction.name"
|
||||
class="reaction-emoji-content"
|
||||
width="1em"
|
||||
>
|
||||
<span
|
||||
v-else
|
||||
class="reaction-emoji reaction-emoji-content"
|
||||
>{{ reaction.name }}</span>
|
||||
</span>
|
||||
<span>{{ reaction.count }}</span>
|
||||
</button>
|
||||
</UserListPopover>
|
||||
|
@ -35,6 +49,8 @@
|
|||
margin-top: 0.25em;
|
||||
flex-wrap: wrap;
|
||||
|
||||
--emoji-size: calc(1.25em * var(--emojiReactionsScale, 1));
|
||||
|
||||
.emoji-reaction {
|
||||
padding: 0 0.5em;
|
||||
margin-right: 0.5em;
|
||||
|
@ -45,8 +61,24 @@
|
|||
box-sizing: border-box;
|
||||
|
||||
.reaction-emoji {
|
||||
width: 1.25em;
|
||||
width: var(--emoji-size);
|
||||
height: var(--emoji-size);
|
||||
margin-right: 0.25em;
|
||||
line-height: var(--emoji-size);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.reaction-emoji-content {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
width: auto;
|
||||
height: auto;
|
||||
line-height: inherit;
|
||||
overflow: hidden;
|
||||
font-size: calc(var(--emoji-size) * 0.8);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
|
|
|
@ -38,13 +38,20 @@
|
|||
class="button-unstyled interactive"
|
||||
target="_blank"
|
||||
role="button"
|
||||
:title="$t('tool_tip.favorite')"
|
||||
:href="remoteInteractionLink"
|
||||
>
|
||||
<FAIcon
|
||||
class="fa-scale-110 fa-old-padding"
|
||||
:title="$t('tool_tip.favorite')"
|
||||
:icon="['far', 'star']"
|
||||
/>
|
||||
<FALayers class="fa-scale-110 fa-old-padding-layer">
|
||||
<FAIcon
|
||||
class="fa-scale-110"
|
||||
:icon="['far', 'star']"
|
||||
/>
|
||||
<FAIcon
|
||||
class="focus-marker"
|
||||
transform="shrink-6 up-9 right-12"
|
||||
icon="plus"
|
||||
/>
|
||||
</FALayers>
|
||||
</a>
|
||||
<span
|
||||
v-if="!mergedConfig.hidePostStats && status.fave_num > 0"
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
:class="{ custom: isCustom }"
|
||||
>
|
||||
<label
|
||||
:id="name + '-label'"
|
||||
:for="preset === 'custom' ? name : name + '-font-switcher'"
|
||||
class="label"
|
||||
>
|
||||
|
@ -12,7 +13,8 @@
|
|||
<input
|
||||
v-if="typeof fallback !== 'undefined'"
|
||||
:id="name + '-o'"
|
||||
class="opt exlcude-disabled"
|
||||
:aria-labelledby="name + '-label'"
|
||||
class="opt exlcude-disabled visible-for-screenreader-only"
|
||||
type="checkbox"
|
||||
:checked="present"
|
||||
@change="$emit('update:modelValue', typeof modelValue === 'undefined' ? fallback : undefined)"
|
||||
|
@ -21,6 +23,7 @@
|
|||
v-if="typeof fallback !== 'undefined'"
|
||||
class="opt-l"
|
||||
:for="name + '-o'"
|
||||
:aria-hidden="true"
|
||||
/>
|
||||
{{ ' ' }}
|
||||
<Select
|
||||
|
|
|
@ -80,3 +80,21 @@ export const ROOT_ITEMS = {
|
|||
criteria: ['announcements']
|
||||
}
|
||||
}
|
||||
|
||||
export function routeTo (item, currentUser) {
|
||||
if (!item.route && !item.routeObject) return null
|
||||
|
||||
let route
|
||||
|
||||
if (item.routeObject) {
|
||||
route = item.routeObject
|
||||
} else {
|
||||
route = { name: (item.anon || currentUser) ? item.route : item.anonRoute }
|
||||
}
|
||||
|
||||
if (USERNAME_ROUTES.has(route.name)) {
|
||||
route.params = { username: currentUser.screen_name, name: currentUser.screen_name }
|
||||
}
|
||||
|
||||
return route
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { mapState } from 'vuex'
|
||||
import { USERNAME_ROUTES } from 'src/components/navigation/navigation.js'
|
||||
import { routeTo } from 'src/components/navigation/navigation.js'
|
||||
import OptionalRouterLink from 'src/components/optional_router_link/optional_router_link.vue'
|
||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||
import { faThumbtack } from '@fortawesome/free-solid-svg-icons'
|
||||
|
@ -26,17 +26,7 @@ const NavigationEntry = {
|
|||
},
|
||||
computed: {
|
||||
routeTo () {
|
||||
if (!this.item.route && !this.item.routeObject) return null
|
||||
let route
|
||||
if (this.item.routeObject) {
|
||||
route = this.item.routeObject
|
||||
} else {
|
||||
route = { name: (this.item.anon || this.currentUser) ? this.item.route : this.item.anonRoute }
|
||||
}
|
||||
if (USERNAME_ROUTES.has(route.name)) {
|
||||
route.params = { username: this.currentUser.screen_name, name: this.currentUser.screen_name }
|
||||
}
|
||||
return route
|
||||
return routeTo(this.item, this.currentUser)
|
||||
},
|
||||
getters () {
|
||||
return this.$store.getters
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { mapState } from 'vuex'
|
||||
import { TIMELINES, ROOT_ITEMS, USERNAME_ROUTES } from 'src/components/navigation/navigation.js'
|
||||
import { TIMELINES, ROOT_ITEMS, routeTo } from 'src/components/navigation/navigation.js'
|
||||
import { getListEntries, filterNavigation } from 'src/components/navigation/filter.js'
|
||||
|
||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||
|
@ -31,14 +31,7 @@ const NavPanel = {
|
|||
props: ['limit'],
|
||||
methods: {
|
||||
getRouteTo (item) {
|
||||
if (item.routeObject) {
|
||||
return item.routeObject
|
||||
}
|
||||
const route = { name: (item.anon || this.currentUser) ? item.route : item.anonRoute }
|
||||
if (USERNAME_ROUTES.has(route.name)) {
|
||||
route.params = { username: this.currentUser.screen_name }
|
||||
}
|
||||
return route
|
||||
return routeTo(item, this.currentUser)
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
|
|
@ -121,7 +121,16 @@
|
|||
scope="global"
|
||||
keypath="notifications.reacted_with"
|
||||
>
|
||||
<span class="emoji-reaction-emoji">{{ notification.emoji }}</span>
|
||||
<img
|
||||
v-if="notification.emoji_url"
|
||||
class="emoji-reaction-emoji emoji-reaction-emoji-image"
|
||||
:src="notification.emoji_url"
|
||||
:name="notification.emoji"
|
||||
>
|
||||
<span
|
||||
v-else
|
||||
class="emoji-reaction-emoji"
|
||||
>{{ notification.emoji }}</span>
|
||||
</i18n-t>
|
||||
</small>
|
||||
</span>
|
||||
|
@ -153,9 +162,9 @@
|
|||
</router-link>
|
||||
<button
|
||||
class="button-unstyled expand-icon"
|
||||
@click.prevent="toggleStatusExpanded"
|
||||
:title="$t('tool_tip.toggle_expand')"
|
||||
:aria-expanded="statusExpanded"
|
||||
:title="$t('tool_tip.toggle_expand')"
|
||||
@click.prevent="toggleStatusExpanded"
|
||||
>
|
||||
<FAIcon
|
||||
class="fa-scale-110"
|
||||
|
|
|
@ -129,6 +129,13 @@
|
|||
|
||||
.emoji-reaction-emoji {
|
||||
font-size: 1.3em;
|
||||
max-width: 1.25em;
|
||||
height: 1.25em;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.emoji-reaction-emoji-image {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.notification-details {
|
||||
|
|
|
@ -12,7 +12,8 @@ export default {
|
|||
data () {
|
||||
return {
|
||||
loading: false,
|
||||
choices: []
|
||||
choices: [],
|
||||
randomSeed: `${Math.random()}`.replace('.', '-')
|
||||
}
|
||||
},
|
||||
created () {
|
||||
|
|
|
@ -4,53 +4,63 @@
|
|||
:class="containerClass"
|
||||
>
|
||||
<div
|
||||
v-for="(option, index) in options"
|
||||
:key="index"
|
||||
class="poll-option"
|
||||
:role="showResults ? 'section' : (poll.multiple ? 'group' : 'radiogroup')"
|
||||
>
|
||||
<div
|
||||
v-if="showResults"
|
||||
:title="resultTitle(option)"
|
||||
class="option-result"
|
||||
v-for="(option, index) in options"
|
||||
:key="index"
|
||||
class="poll-option"
|
||||
>
|
||||
<div class="option-result-label">
|
||||
<span class="result-percentage">
|
||||
{{ percentageForOption(option.votes_count) }}%
|
||||
</span>
|
||||
<RichContent
|
||||
:html="option.title_html"
|
||||
:handle-links="false"
|
||||
:emoji="emoji"
|
||||
<div
|
||||
v-if="showResults"
|
||||
:title="resultTitle(option)"
|
||||
class="option-result"
|
||||
>
|
||||
<div class="option-result-label">
|
||||
<span class="result-percentage">
|
||||
{{ percentageForOption(option.votes_count) }}%
|
||||
</span>
|
||||
<RichContent
|
||||
:html="option.title_html"
|
||||
:handle-links="false"
|
||||
:emoji="emoji"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="result-fill"
|
||||
:style="{ 'width': `${percentageForOption(option.votes_count)}%` }"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="result-fill"
|
||||
:style="{ 'width': `${percentageForOption(option.votes_count)}%` }"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
@click="activateOption(index)"
|
||||
>
|
||||
<input
|
||||
v-if="poll.multiple"
|
||||
type="checkbox"
|
||||
:disabled="loading"
|
||||
:value="index"
|
||||
>
|
||||
<input
|
||||
v-else
|
||||
type="radio"
|
||||
:disabled="loading"
|
||||
:value="index"
|
||||
tabindex="0"
|
||||
:role="poll.multiple ? 'checkbox' : 'radio'"
|
||||
:aria-labelledby="`option-vote-${randomSeed}-${index}`"
|
||||
:aria-checked="choices[index]"
|
||||
@click="activateOption(index)"
|
||||
>
|
||||
<label class="option-vote">
|
||||
<RichContent
|
||||
:html="option.title_html"
|
||||
:handle-links="false"
|
||||
:emoji="emoji"
|
||||
/>
|
||||
</label>
|
||||
<input
|
||||
v-if="poll.multiple"
|
||||
type="checkbox"
|
||||
class="poll-checkbox"
|
||||
:disabled="loading"
|
||||
:value="index"
|
||||
>
|
||||
<input
|
||||
v-else
|
||||
type="radio"
|
||||
:disabled="loading"
|
||||
:value="index"
|
||||
>
|
||||
<label class="option-vote">
|
||||
<RichContent
|
||||
:id="`option-vote-${randomSeed}-${index}`"
|
||||
:html="option.title_html"
|
||||
:handle-links="false"
|
||||
:emoji="emoji"
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer faint">
|
||||
|
@ -161,5 +171,9 @@
|
|||
padding: 0 0.5em;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
|
||||
.poll-checkbox {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -8,6 +8,7 @@ import Gallery from 'src/components/gallery/gallery.vue'
|
|||
import StatusContent from '../status_content/status_content.vue'
|
||||
import fileTypeService from '../../services/file_type/file_type.service.js'
|
||||
import { findOffset } from '../../services/offset_finder/offset_finder.service.js'
|
||||
import { propsToNative } from '../../services/attributes_helper/attributes_helper.service.js'
|
||||
import { reject, map, uniqBy, debounce } from 'lodash'
|
||||
import suggestor from '../emoji_input/suggestor.js'
|
||||
import { mapGetters, mapState } from 'vuex'
|
||||
|
@ -629,6 +630,9 @@ const PostStatusForm = {
|
|||
},
|
||||
openProfileTab () {
|
||||
this.$store.dispatch('openSettingsModalTab', 'profile')
|
||||
},
|
||||
propsToNative (props) {
|
||||
return propsToNative(props)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,6 +30,9 @@
|
|||
<span>{{ $t('post_status.scope_notice.public') }}</span>
|
||||
<a
|
||||
class="fa-scale-110 fa-old-padding dismiss"
|
||||
:title="$t('post_status.scope_notice_dismiss')"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
@click.prevent="dismissScopeNotice()"
|
||||
>
|
||||
<FAIcon icon="times" />
|
||||
|
@ -42,6 +45,9 @@
|
|||
<span>{{ $t('post_status.scope_notice.unlisted') }}</span>
|
||||
<a
|
||||
class="fa-scale-110 fa-old-padding dismiss"
|
||||
:title="$t('post_status.scope_notice_dismiss')"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
@click.prevent="dismissScopeNotice()"
|
||||
>
|
||||
<FAIcon icon="times" />
|
||||
|
@ -54,6 +60,9 @@
|
|||
<span>{{ $t('post_status.scope_notice.private') }}</span>
|
||||
<a
|
||||
class="fa-scale-110 fa-old-padding dismiss"
|
||||
:title="$t('post_status.scope_notice_dismiss')"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
@click.prevent="dismissScopeNotice()"
|
||||
>
|
||||
<FAIcon icon="times" />
|
||||
|
@ -124,14 +133,17 @@
|
|||
:suggest="emojiSuggestor"
|
||||
class="form-control"
|
||||
>
|
||||
<input
|
||||
v-model="newStatus.spoilerText"
|
||||
type="text"
|
||||
:placeholder="$t('post_status.content_warning')"
|
||||
:disabled="posting && !optimisticPosting"
|
||||
size="1"
|
||||
class="form-post-subject"
|
||||
>
|
||||
<template #default="inputProps">
|
||||
<input
|
||||
v-model="newStatus.spoilerText"
|
||||
type="text"
|
||||
:placeholder="$t('post_status.content_warning')"
|
||||
:disabled="posting && !optimisticPosting"
|
||||
v-bind="propsToNative(inputProps)"
|
||||
size="1"
|
||||
class="form-post-subject"
|
||||
>
|
||||
</template>
|
||||
</EmojiInput>
|
||||
<EmojiInput
|
||||
ref="emoji-input"
|
||||
|
@ -148,29 +160,32 @@
|
|||
@sticker-upload-failed="uploadFailed"
|
||||
@shown="handleEmojiInputShow"
|
||||
>
|
||||
<textarea
|
||||
ref="textarea"
|
||||
v-model="newStatus.status"
|
||||
:placeholder="placeholder || $t('post_status.default')"
|
||||
rows="1"
|
||||
cols="1"
|
||||
:disabled="posting && !optimisticPosting"
|
||||
class="form-post-body"
|
||||
:class="{ 'scrollable-form': !!maxHeight }"
|
||||
@keydown.exact.enter="submitOnEnter && postStatus($event, newStatus)"
|
||||
@keydown.meta.enter="postStatus($event, newStatus)"
|
||||
@keydown.ctrl.enter="!submitOnEnter && postStatus($event, newStatus)"
|
||||
@input="resize"
|
||||
@compositionupdate="resize"
|
||||
@paste="paste"
|
||||
/>
|
||||
<p
|
||||
v-if="hasStatusLengthLimit"
|
||||
class="character-counter faint"
|
||||
:class="{ error: isOverLengthLimit }"
|
||||
>
|
||||
{{ charactersLeft }}
|
||||
</p>
|
||||
<template #default="inputProps">
|
||||
<textarea
|
||||
ref="textarea"
|
||||
v-model="newStatus.status"
|
||||
:placeholder="placeholder || $t('post_status.default')"
|
||||
rows="1"
|
||||
cols="1"
|
||||
:disabled="posting && !optimisticPosting"
|
||||
class="form-post-body"
|
||||
:class="{ 'scrollable-form': !!maxHeight }"
|
||||
v-bind="propsToNative(inputProps)"
|
||||
@keydown.exact.enter="submitOnEnter && postStatus($event, newStatus)"
|
||||
@keydown.meta.enter="postStatus($event, newStatus)"
|
||||
@keydown.ctrl.enter="!submitOnEnter && postStatus($event, newStatus)"
|
||||
@input="resize"
|
||||
@compositionupdate="resize"
|
||||
@paste="paste"
|
||||
/>
|
||||
<p
|
||||
v-if="hasStatusLengthLimit"
|
||||
class="character-counter faint"
|
||||
:class="{ error: isOverLengthLimit }"
|
||||
>
|
||||
{{ charactersLeft }}
|
||||
</p>
|
||||
</template>
|
||||
</EmojiInput>
|
||||
<div
|
||||
v-if="!disableScopeSelector"
|
||||
|
@ -193,6 +208,7 @@
|
|||
id="post-content-type"
|
||||
v-model="newStatus.contentType"
|
||||
class="form-control"
|
||||
:attrs="{ 'aria-label': $t('post_status.content_type_selection') }"
|
||||
>
|
||||
<option
|
||||
v-for="postFormat in postFormats"
|
||||
|
@ -265,12 +281,10 @@
|
|||
>
|
||||
{{ $t('post_status.post') }}
|
||||
</button>
|
||||
<!-- touchstart is used to keep the OSK at the same position after a message send -->
|
||||
<button
|
||||
v-else
|
||||
:disabled="uploadingFiles || disableSubmit"
|
||||
class="btn button-default"
|
||||
@touchstart.stop.prevent="postStatus($event, newStatus)"
|
||||
@click.stop.prevent="postStatus($event, newStatus)"
|
||||
>
|
||||
{{ $t('post_status.post') }}
|
||||
|
|
|
@ -6,36 +6,51 @@
|
|||
:trigger-attrs="{ title: $t('timeline.quick_filter_settings') }"
|
||||
>
|
||||
<template #content>
|
||||
<div class="dropdown-menu">
|
||||
<div v-if="loggedIn">
|
||||
<div
|
||||
class="dropdown-menu"
|
||||
role="menu"
|
||||
>
|
||||
<div
|
||||
v-if="loggedIn"
|
||||
role="group"
|
||||
>
|
||||
<button
|
||||
v-if="!conversation"
|
||||
class="button-default dropdown-item"
|
||||
:aria-checked="replyVisibilityAll"
|
||||
role="menuitemradio"
|
||||
@click="replyVisibilityAll = true"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox -radio"
|
||||
:class="{ 'menu-checkbox-checked': replyVisibilityAll }"
|
||||
:aria-hidden="true"
|
||||
/>{{ $t('settings.reply_visibility_all') }}
|
||||
</button>
|
||||
<button
|
||||
v-if="!conversation"
|
||||
class="button-default dropdown-item"
|
||||
:aria-checked="replyVisibilityFollowing"
|
||||
role="menuitemradio"
|
||||
@click="replyVisibilityFollowing = true"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox -radio"
|
||||
:class="{ 'menu-checkbox-checked': replyVisibilityFollowing }"
|
||||
:aria-hidden="true"
|
||||
/>{{ $t('settings.reply_visibility_following_short') }}
|
||||
</button>
|
||||
<button
|
||||
v-if="!conversation"
|
||||
class="button-default dropdown-item"
|
||||
:aria-checked="replyVisibilitySelf"
|
||||
role="menuitemradio"
|
||||
@click="replyVisibilitySelf = true"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox -radio"
|
||||
:class="{ 'menu-checkbox-checked': replyVisibilitySelf }"
|
||||
:aria-hidden="true"
|
||||
/>{{ $t('settings.reply_visibility_self_short') }}
|
||||
</button>
|
||||
<div
|
||||
|
@ -46,33 +61,43 @@
|
|||
</div>
|
||||
<button
|
||||
class="button-default dropdown-item"
|
||||
role="menuitemcheckbox"
|
||||
:aria-checked="muteBotStatuses"
|
||||
@click="muteBotStatuses = !muteBotStatuses"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox"
|
||||
:class="{ 'menu-checkbox-checked': muteBotStatuses }"
|
||||
:aria-hidden="true"
|
||||
/>{{ $t('settings.mute_bot_posts') }}
|
||||
</button>
|
||||
<button
|
||||
class="button-default dropdown-item"
|
||||
role="menuitemcheckbox"
|
||||
:aria-checked="hideMedia"
|
||||
@click="hideMedia = !hideMedia"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox"
|
||||
:class="{ 'menu-checkbox-checked': hideMedia }"
|
||||
:aria-hidden="true"
|
||||
/>{{ $t('settings.hide_media_previews') }}
|
||||
</button>
|
||||
<button
|
||||
class="button-default dropdown-item"
|
||||
role="menuitemcheckbox"
|
||||
:aria-checked="hideMutedPosts"
|
||||
@click="hideMutedPosts = !hideMutedPosts"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox"
|
||||
:class="{ 'menu-checkbox-checked': hideMutedPosts }"
|
||||
:aria-hidden="true"
|
||||
/>{{ $t('settings.hide_all_muted_posts') }}
|
||||
</button>
|
||||
<button
|
||||
class="button-default dropdown-item dropdown-item-icon"
|
||||
role="menuitem"
|
||||
@click="openTab('filtering')"
|
||||
>
|
||||
<FAIcon icon="font" />{{ $t('settings.word_filter_and_more') }}
|
||||
|
|
|
@ -6,60 +6,87 @@
|
|||
:trigger-attrs="{ title: $t('timeline.quick_view_settings') }"
|
||||
>
|
||||
<template #content>
|
||||
<div class="dropdown-menu">
|
||||
<button
|
||||
class="button-default dropdown-item"
|
||||
@click="conversationDisplay = 'tree'"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox -radio"
|
||||
:class="{ 'menu-checkbox-checked': conversationDisplay === 'tree' }"
|
||||
/><FAIcon icon="folder-tree" /> {{ $t('settings.conversation_display_tree_quick') }}
|
||||
</button>
|
||||
<button
|
||||
class="button-default dropdown-item"
|
||||
@click="conversationDisplay = 'linear'"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox -radio"
|
||||
:class="{ 'menu-checkbox-checked': conversationDisplay === 'linear' }"
|
||||
/><FAIcon icon="list" /> {{ $t('settings.conversation_display_linear_quick') }}
|
||||
</button>
|
||||
<div
|
||||
class="dropdown-menu"
|
||||
role="menu"
|
||||
>
|
||||
<div role="group">
|
||||
<button
|
||||
class="button-default dropdown-item"
|
||||
:aria-checked="conversationDisplay === 'tree'"
|
||||
role="menuitemradio"
|
||||
@click="conversationDisplay = 'tree'"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox -radio"
|
||||
:aria-hidden="true"
|
||||
:class="{ 'menu-checkbox-checked': conversationDisplay === 'tree' }"
|
||||
/><FAIcon
|
||||
icon="folder-tree"
|
||||
:aria-hidden="true"
|
||||
/> {{ $t('settings.conversation_display_tree_quick') }}
|
||||
</button>
|
||||
<button
|
||||
class="button-default dropdown-item"
|
||||
:aria-checked="conversationDisplay === 'linear'"
|
||||
role="menuitemradio"
|
||||
@click="conversationDisplay = 'linear'"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox -radio"
|
||||
:class="{ 'menu-checkbox-checked': conversationDisplay === 'linear' }"
|
||||
:aria-hidden="true"
|
||||
/><FAIcon
|
||||
icon="list"
|
||||
:aria-hidden="true"
|
||||
/> {{ $t('settings.conversation_display_linear_quick') }}
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
role="separator"
|
||||
class="dropdown-divider"
|
||||
/>
|
||||
<button
|
||||
class="button-default dropdown-item"
|
||||
role="menuitemcheckbox"
|
||||
:aria-checked="showUserAvatars"
|
||||
@click="showUserAvatars = !showUserAvatars"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox"
|
||||
:class="{ 'menu-checkbox-checked': showUserAvatars }"
|
||||
:aria-hidden="true"
|
||||
/>{{ $t('settings.mention_link_show_avatar_quick') }}
|
||||
</button>
|
||||
<button
|
||||
v-if="!conversation"
|
||||
class="button-default dropdown-item"
|
||||
role="menuitemcheckbox"
|
||||
:aria-checked="autoUpdate"
|
||||
@click="autoUpdate = !autoUpdate"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox"
|
||||
:class="{ 'menu-checkbox-checked': autoUpdate }"
|
||||
:aria-hidden="true"
|
||||
/>{{ $t('settings.auto_update') }}
|
||||
</button>
|
||||
<button
|
||||
v-if="!conversation"
|
||||
class="button-default dropdown-item"
|
||||
role="menuitemcheckbox"
|
||||
:aria-checked="collapseWithSubjects"
|
||||
@click="collapseWithSubjects = !collapseWithSubjects"
|
||||
>
|
||||
<span
|
||||
class="menu-checkbox"
|
||||
:class="{ 'menu-checkbox-checked': collapseWithSubjects }"
|
||||
:aria-hidden="true"
|
||||
/>{{ $t('settings.collapse_subject') }}
|
||||
</button>
|
||||
<button
|
||||
class="button-default dropdown-item dropdown-item-icon"
|
||||
role="menuitem"
|
||||
@click="openTab('general')"
|
||||
>
|
||||
<FAIcon icon="wrench" />{{ $t('settings.more_settings') }}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
:class="{ disabled: !present || disabled }"
|
||||
>
|
||||
<label
|
||||
:id="name + '-label'"
|
||||
:for="name"
|
||||
class="label"
|
||||
>
|
||||
|
@ -12,7 +13,8 @@
|
|||
<input
|
||||
v-if="typeof fallback !== 'undefined'"
|
||||
:id="name + '-o'"
|
||||
class="opt"
|
||||
:aria-labelledby="name + '-label'"
|
||||
class="opt visible-for-screenreader-only"
|
||||
type="checkbox"
|
||||
:checked="present"
|
||||
@change="$emit('update:modelValue', !present ? fallback : undefined)"
|
||||
|
@ -21,6 +23,7 @@
|
|||
v-if="typeof fallback !== 'undefined'"
|
||||
class="opt-l"
|
||||
:for="name + '-o'"
|
||||
:aria-hidden="true"
|
||||
/>
|
||||
<input
|
||||
:id="name"
|
||||
|
@ -34,9 +37,10 @@
|
|||
@input="$emit('update:modelValue', $event.target.value)"
|
||||
>
|
||||
<input
|
||||
:id="name"
|
||||
:id="name + '-numeric'"
|
||||
class="input-number"
|
||||
type="number"
|
||||
:aria-labelledby="name + '-label'"
|
||||
:value="modelValue || fallback"
|
||||
:disabled="!present || disabled"
|
||||
:max="hardMax"
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
import Popover from '../popover/popover.vue'
|
||||
import { ensureFinalFallback } from '../../i18n/languages.js'
|
||||
import EmojiPicker from '../emoji_picker/emoji_picker.vue'
|
||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||
import { faPlus, faTimes } from '@fortawesome/free-solid-svg-icons'
|
||||
import { faSmileBeam } from '@fortawesome/free-regular-svg-icons'
|
||||
import { trim } from 'lodash'
|
||||
|
||||
library.add(
|
||||
faPlus,
|
||||
|
@ -20,105 +19,34 @@ const ReactButton = {
|
|||
}
|
||||
},
|
||||
components: {
|
||||
Popover
|
||||
Popover,
|
||||
EmojiPicker
|
||||
},
|
||||
methods: {
|
||||
addReaction (event, emoji, close) {
|
||||
addReaction (event) {
|
||||
const emoji = event.insertion
|
||||
const existingReaction = this.status.emoji_reactions.find(r => r.name === emoji)
|
||||
if (existingReaction && existingReaction.me) {
|
||||
this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })
|
||||
} else {
|
||||
this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })
|
||||
}
|
||||
close()
|
||||
},
|
||||
show () {
|
||||
if (!this.expanded) {
|
||||
this.$refs.picker.showPicker()
|
||||
}
|
||||
},
|
||||
onShow () {
|
||||
this.expanded = true
|
||||
this.focusInput()
|
||||
},
|
||||
onClose () {
|
||||
this.expanded = false
|
||||
},
|
||||
focusInput () {
|
||||
this.$nextTick(() => {
|
||||
const input = document.querySelector('.reaction-picker-filter > input')
|
||||
if (input) input.focus()
|
||||
})
|
||||
},
|
||||
// Vaguely adjusted copypaste from emoji_input and emoji_picker!
|
||||
maybeLocalizedEmojiNamesAndKeywords (emoji) {
|
||||
const names = [emoji.displayText]
|
||||
const keywords = []
|
||||
|
||||
if (emoji.displayTextI18n) {
|
||||
names.push(this.$t(emoji.displayTextI18n.key, emoji.displayTextI18n.args))
|
||||
}
|
||||
|
||||
if (emoji.annotations) {
|
||||
this.languages.forEach(lang => {
|
||||
names.push(emoji.annotations[lang]?.name)
|
||||
|
||||
keywords.push(...(emoji.annotations[lang]?.keywords || []))
|
||||
})
|
||||
}
|
||||
|
||||
return {
|
||||
names: names.filter(k => k),
|
||||
keywords: keywords.filter(k => k)
|
||||
}
|
||||
},
|
||||
maybeLocalizedEmojiName (emoji) {
|
||||
if (!emoji.annotations) {
|
||||
return emoji.displayText
|
||||
}
|
||||
|
||||
if (emoji.displayTextI18n) {
|
||||
return this.$t(emoji.displayTextI18n.key, emoji.displayTextI18n.args)
|
||||
}
|
||||
|
||||
for (const lang of this.languages) {
|
||||
if (emoji.annotations[lang]?.name) {
|
||||
return emoji.annotations[lang].name
|
||||
}
|
||||
}
|
||||
|
||||
return emoji.displayText
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
commonEmojis () {
|
||||
const hardcodedSet = new Set(['👍', '😠', '👀', '😂', '🔥'])
|
||||
return this.$store.getters.standardEmojiList.filter(emoji => hardcodedSet.has(emoji.replacement))
|
||||
},
|
||||
languages () {
|
||||
return ensureFinalFallback(this.$store.getters.mergedConfig.interfaceLanguage)
|
||||
},
|
||||
emojis () {
|
||||
if (this.filterWord !== '') {
|
||||
const keywordLowercase = trim(this.filterWord.toLowerCase())
|
||||
|
||||
const orderedEmojiList = []
|
||||
for (const emoji of this.$store.getters.standardEmojiList) {
|
||||
const indices = this.maybeLocalizedEmojiNamesAndKeywords(emoji)
|
||||
.keywords
|
||||
.map(k => k.toLowerCase().indexOf(keywordLowercase))
|
||||
.filter(k => k > -1)
|
||||
|
||||
const indexOfKeyword = indices.length ? Math.min(...indices) : -1
|
||||
|
||||
if (indexOfKeyword > -1) {
|
||||
if (!Array.isArray(orderedEmojiList[indexOfKeyword])) {
|
||||
orderedEmojiList[indexOfKeyword] = []
|
||||
}
|
||||
orderedEmojiList[indexOfKeyword].push(emoji)
|
||||
}
|
||||
}
|
||||
return orderedEmojiList.flat()
|
||||
}
|
||||
return this.$store.getters.standardEmojiList || []
|
||||
},
|
||||
mergedConfig () {
|
||||
return this.$store.getters.mergedConfig
|
||||
hideCustomEmoji () {
|
||||
return !this.$store.state.instance.pleromaChatMessagesAvailable
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,73 +1,39 @@
|
|||
<template>
|
||||
<Popover
|
||||
trigger="click"
|
||||
class="ReactButton"
|
||||
placement="top"
|
||||
:offset="{ y: 5 }"
|
||||
:bound-to="{ x: 'container' }"
|
||||
remove-padding
|
||||
popover-class="ReactButton popover-default"
|
||||
@show="onShow"
|
||||
@close="onClose"
|
||||
>
|
||||
<template #content="{close}">
|
||||
<div class="reaction-picker-filter">
|
||||
<input
|
||||
v-model="filterWord"
|
||||
size="1"
|
||||
:placeholder="$t('emoji.search_emoji')"
|
||||
@input="$event.target.composing = false"
|
||||
>
|
||||
</div>
|
||||
<div class="reaction-picker">
|
||||
<span
|
||||
v-for="emoji in commonEmojis"
|
||||
:key="emoji.replacement"
|
||||
class="emoji-button"
|
||||
:title="maybeLocalizedEmojiName(emoji)"
|
||||
@click="addReaction($event, emoji.replacement, close)"
|
||||
>
|
||||
{{ emoji.replacement }}
|
||||
</span>
|
||||
<div class="reaction-picker-divider" />
|
||||
<span
|
||||
v-for="(emoji, key) in emojis"
|
||||
:key="key"
|
||||
class="emoji-button"
|
||||
:title="maybeLocalizedEmojiName(emoji)"
|
||||
@click="addReaction($event, emoji.replacement, close)"
|
||||
>
|
||||
{{ emoji.replacement }}
|
||||
</span>
|
||||
<div class="reaction-bottom-fader" />
|
||||
</div>
|
||||
</template>
|
||||
<template #trigger>
|
||||
<span
|
||||
class="button-unstyled popover-trigger"
|
||||
:title="$t('tool_tip.add_reaction')"
|
||||
>
|
||||
<FALayers>
|
||||
<FAIcon
|
||||
class="fa-scale-110 fa-old-padding"
|
||||
:icon="['far', 'smile-beam']"
|
||||
/>
|
||||
<FAIcon
|
||||
v-show="!expanded"
|
||||
class="focus-marker"
|
||||
transform="shrink-6 up-9 right-17"
|
||||
icon="plus"
|
||||
/>
|
||||
<FAIcon
|
||||
v-show="expanded"
|
||||
class="focus-marker"
|
||||
transform="shrink-6 up-9 right-17"
|
||||
icon="times"
|
||||
/>
|
||||
</FALayers>
|
||||
</span>
|
||||
</template>
|
||||
</Popover>
|
||||
<span class="ReactButton">
|
||||
<EmojiPicker
|
||||
ref="picker"
|
||||
:enable-sticker-picker="enableStickerPicker"
|
||||
:hide-custom-emoji="hideCustomEmoji"
|
||||
class="emoji-picker-panel"
|
||||
@emoji="addReaction"
|
||||
@show="onShow"
|
||||
@close="onClose"
|
||||
/>
|
||||
<span
|
||||
class="button-unstyled popover-trigger"
|
||||
:title="$t('tool_tip.add_reaction')"
|
||||
@click.stop.prevent="show"
|
||||
>
|
||||
<FALayers>
|
||||
<FAIcon
|
||||
class="fa-scale-110 fa-old-padding"
|
||||
:icon="['far', 'smile-beam']"
|
||||
/>
|
||||
<FAIcon
|
||||
v-show="!expanded"
|
||||
class="focus-marker"
|
||||
transform="shrink-6 up-9 right-17"
|
||||
icon="plus"
|
||||
/>
|
||||
<FAIcon
|
||||
v-show="expanded"
|
||||
class="focus-marker"
|
||||
transform="shrink-6 up-9 right-17"
|
||||
icon="times"
|
||||
/>
|
||||
</FALayers>
|
||||
</span>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script src="./react_button.js"></script>
|
||||
|
@ -135,11 +101,6 @@
|
|||
color: $fallback--text;
|
||||
color: var(--text, $fallback--text);
|
||||
}
|
||||
}
|
||||
|
||||
.popover-trigger-button {
|
||||
/* override of popover internal stuff */
|
||||
width: auto;
|
||||
|
||||
@include unfocused-style {
|
||||
.focus-marker {
|
||||
|
|
|
@ -16,7 +16,7 @@ const registration = {
|
|||
confirm: '',
|
||||
birthday: '',
|
||||
reason: '',
|
||||
language: ''
|
||||
language: ['']
|
||||
},
|
||||
captcha: {}
|
||||
}),
|
||||
|
@ -100,7 +100,7 @@ const registration = {
|
|||
this.user.captcha_token = this.captcha.token
|
||||
this.user.captcha_answer_data = this.captcha.answer_data
|
||||
if (this.user.language) {
|
||||
this.user.language = localeService.internalToBackendLocale(this.user.language)
|
||||
this.user.language = localeService.internalToBackendLocaleMulti(this.user.language.filter(k => k))
|
||||
}
|
||||
|
||||
this.v$.$touch()
|
||||
|
|
|
@ -210,6 +210,7 @@
|
|||
:prompt-text="$t('registration.email_language')"
|
||||
:language="v$.user.language.$model"
|
||||
:set-language="val => v$.user.language.$model = val"
|
||||
@click.stop.prevent
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -32,12 +32,20 @@
|
|||
target="_blank"
|
||||
role="button"
|
||||
:href="remoteInteractionLink"
|
||||
:title="$t('tool_tip.reply')"
|
||||
>
|
||||
<FAIcon
|
||||
icon="reply"
|
||||
class="fa-scale-110 fa-old-padding"
|
||||
:title="$t('tool_tip.reply')"
|
||||
/>
|
||||
<FALayers class="fa-old-padding-layer">
|
||||
<FAIcon
|
||||
class="fa-scale-110"
|
||||
icon="reply"
|
||||
/>
|
||||
<FAIcon
|
||||
v-if="!replying"
|
||||
class="focus-marker"
|
||||
transform="shrink-6 up-8 right-16"
|
||||
icon="plus"
|
||||
/>
|
||||
</FALayers>
|
||||
</a>
|
||||
<span
|
||||
v-if="status.replies_count > 0"
|
||||
|
|
|
@ -45,13 +45,20 @@
|
|||
class="button-unstyled interactive"
|
||||
target="_blank"
|
||||
role="button"
|
||||
:title="$t('tool_tip.repeat')"
|
||||
:href="remoteInteractionLink"
|
||||
>
|
||||
<FAIcon
|
||||
class="fa-scale-110 fa-old-padding"
|
||||
icon="retweet"
|
||||
:title="$t('tool_tip.repeat')"
|
||||
/>
|
||||
<FALayers class="fa-old-padding-layer">
|
||||
<FAIcon
|
||||
class="fa-scale-110"
|
||||
icon="retweet"
|
||||
/>
|
||||
<FAIcon
|
||||
class="focus-marker"
|
||||
transform="shrink-6 up-9 right-12"
|
||||
icon="plus"
|
||||
/>
|
||||
</FALayers>
|
||||
</a>
|
||||
<span
|
||||
v-if="!mergedConfig.hidePostStats && status.repeat_num > 0"
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
const ScreenReaderNotice = {
|
||||
props: {
|
||||
ariaLive: {
|
||||
type: String,
|
||||
defualt: 'assertive'
|
||||
}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
currentText: ''
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
announce (text) {
|
||||
this.currentText = text
|
||||
setTimeout(() => { this.currentText = '' }, 1000)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default ScreenReaderNotice
|
|
@ -0,0 +1,10 @@
|
|||
<template>
|
||||
<div
|
||||
class="visible-for-screenreader-only"
|
||||
:aria-live="ariaLive"
|
||||
>
|
||||
{{ currentText }}
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script src="./screen_reader_notice.js"></script>
|
|
@ -8,6 +8,7 @@
|
|||
class="button-unstyled nav-icon"
|
||||
:title="$t('nav.search')"
|
||||
type="button"
|
||||
:aria-expanded="!hidden"
|
||||
@click.prevent.stop="toggleHidden"
|
||||
>
|
||||
<FAIcon
|
||||
|
@ -29,6 +30,7 @@
|
|||
<button
|
||||
class="button-default search-button"
|
||||
type="submit"
|
||||
:title="$t('nav.search')"
|
||||
@click="find(searchTerm)"
|
||||
>
|
||||
<FAIcon
|
||||
|
@ -39,6 +41,8 @@
|
|||
<button
|
||||
class="button-unstyled cancel-search"
|
||||
type="button"
|
||||
:title="$t('nav.search_close')"
|
||||
:aria-expanded="!hidden"
|
||||
@click.prevent.stop="toggleHidden"
|
||||
>
|
||||
<FAIcon
|
||||
|
|
|
@ -13,6 +13,7 @@ export default {
|
|||
'modelValue',
|
||||
'disabled',
|
||||
'unstyled',
|
||||
'kind'
|
||||
'kind',
|
||||
'attrs'
|
||||
]
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
<select
|
||||
:disabled="disabled"
|
||||
:value="modelValue"
|
||||
v-bind="attrs"
|
||||
@change="$emit('update:modelValue', $event.target.value)"
|
||||
>
|
||||
<slot />
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
<template>
|
||||
<NumberSetting
|
||||
v-bind="$attrs"
|
||||
>
|
||||
<slot />
|
||||
</NumberSetting>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import NumberSetting from './number_setting.vue'
|
||||
export default {
|
||||
components: {
|
||||
NumberSetting
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,27 +1,17 @@
|
|||
<template>
|
||||
<span
|
||||
v-if="matchesExpertLevel"
|
||||
class="IntegerSetting"
|
||||
<NumberSetting
|
||||
v-bind="$attrs"
|
||||
truncate="1"
|
||||
>
|
||||
<label :for="path">
|
||||
<slot />
|
||||
</label>
|
||||
<input
|
||||
:id="path"
|
||||
class="number-input"
|
||||
type="number"
|
||||
step="1"
|
||||
:disabled="disabled"
|
||||
:min="min || 0"
|
||||
:value="state"
|
||||
@change="update"
|
||||
>
|
||||
{{ ' ' }}
|
||||
<ModifiedIndicator
|
||||
:changed="isChanged"
|
||||
:onclick="reset"
|
||||
/>
|
||||
</span>
|
||||
<slot />
|
||||
</NumberSetting>
|
||||
</template>
|
||||
|
||||
<script src="./integer_setting.js"></script>
|
||||
<script>
|
||||
import NumberSetting from './number_setting.vue'
|
||||
export default {
|
||||
components: {
|
||||
NumberSetting
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
>
|
||||
<Popover
|
||||
trigger="hover"
|
||||
:trigger-attrs="{ 'aria-label': $t('settings.setting_changed') }"
|
||||
>
|
||||
<template #trigger>
|
||||
|
||||
<FAIcon
|
||||
icon="wrench"
|
||||
:aria-label="$t('settings.setting_changed')"
|
||||
/>
|
||||
</template>
|
||||
<template #content>
|
||||
|
|
|
@ -8,6 +8,8 @@ export default {
|
|||
path: String,
|
||||
disabled: Boolean,
|
||||
min: Number,
|
||||
step: Number,
|
||||
truncate: Number,
|
||||
expert: [Number, String]
|
||||
},
|
||||
computed: {
|
||||
|
@ -15,8 +17,11 @@ export default {
|
|||
const [firstSegment, ...rest] = this.path.split('.')
|
||||
return [firstSegment + 'DefaultValue', ...rest].join('.')
|
||||
},
|
||||
parent () {
|
||||
return this.$parent.$parent
|
||||
},
|
||||
state () {
|
||||
const value = get(this.$parent, this.path)
|
||||
const value = get(this.parent, this.path)
|
||||
if (value === undefined) {
|
||||
return this.defaultState
|
||||
} else {
|
||||
|
@ -24,21 +29,28 @@ export default {
|
|||
}
|
||||
},
|
||||
defaultState () {
|
||||
return get(this.$parent, this.pathDefault)
|
||||
return get(this.parent, this.pathDefault)
|
||||
},
|
||||
isChanged () {
|
||||
return this.state !== this.defaultState
|
||||
},
|
||||
matchesExpertLevel () {
|
||||
return (this.expert || 0) <= this.$parent.expertLevel
|
||||
return (this.expert || 0) <= this.parent.expertLevel
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
truncateValue (value) {
|
||||
if (!this.truncate) {
|
||||
return value
|
||||
}
|
||||
|
||||
return Math.trunc(value / this.truncate) * this.truncate
|
||||
},
|
||||
update (e) {
|
||||
set(this.$parent, this.path, parseInt(e.target.value))
|
||||
set(this.parent, this.path, this.truncateValue(parseFloat(e.target.value)))
|
||||
},
|
||||
reset () {
|
||||
set(this.$parent, this.path, this.defaultState)
|
||||
set(this.parent, this.path, this.defaultState)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
<template>
|
||||
<span
|
||||
v-if="matchesExpertLevel"
|
||||
class="NumberSetting"
|
||||
>
|
||||
<label :for="path">
|
||||
<slot />
|
||||
</label>
|
||||
<input
|
||||
:id="path"
|
||||
class="number-input"
|
||||
type="number"
|
||||
:step="step || 1"
|
||||
:disabled="disabled"
|
||||
:min="min || 0"
|
||||
:value="state"
|
||||
@change="update"
|
||||
>
|
||||
{{ ' ' }}
|
||||
<ModifiedIndicator
|
||||
:changed="isChanged"
|
||||
:onclick="reset"
|
||||
/>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script src="./number_setting.js"></script>
|
|
@ -2,6 +2,7 @@ import BooleanSetting from '../helpers/boolean_setting.vue'
|
|||
import ChoiceSetting from '../helpers/choice_setting.vue'
|
||||
import ScopeSelector from 'src/components/scope_selector/scope_selector.vue'
|
||||
import IntegerSetting from '../helpers/integer_setting.vue'
|
||||
import FloatSetting from '../helpers/float_setting.vue'
|
||||
import SizeSetting, { defaultHorizontalUnits } from '../helpers/size_setting.vue'
|
||||
import InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue'
|
||||
|
||||
|
@ -62,6 +63,7 @@ const GeneralTab = {
|
|||
BooleanSetting,
|
||||
ChoiceSetting,
|
||||
IntegerSetting,
|
||||
FloatSetting,
|
||||
SizeSetting,
|
||||
InterfaceLanguageSwitcher,
|
||||
ScopeSelector,
|
||||
|
|
|
@ -271,6 +271,15 @@
|
|||
{{ $t('settings.no_rich_text_description') }}
|
||||
</BooleanSetting>
|
||||
</li>
|
||||
<li>
|
||||
<FloatSetting
|
||||
v-if="user"
|
||||
path="emojiReactionsScale"
|
||||
expert="1"
|
||||
>
|
||||
{{ $t('settings.emoji_reactions_scale') }}
|
||||
</FloatSetting>
|
||||
</li>
|
||||
<h3>{{ $t('settings.attachments') }}</h3>
|
||||
<li>
|
||||
<BooleanSetting
|
||||
|
@ -501,6 +510,14 @@
|
|||
{{ $t('settings.pad_emoji') }}
|
||||
</BooleanSetting>
|
||||
</li>
|
||||
<li>
|
||||
<BooleanSetting
|
||||
path="autocompleteSelect"
|
||||
expert="1"
|
||||
>
|
||||
{{ $t('settings.autocomplete_select_first') }}
|
||||
</BooleanSetting>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -12,6 +12,7 @@ import InterfaceLanguageSwitcher from 'src/components/interface_language_switche
|
|||
import BooleanSetting from '../helpers/boolean_setting.vue'
|
||||
import SharedComputedObject from '../helpers/shared_computed_object.js'
|
||||
import localeService from 'src/services/locale/locale.service.js'
|
||||
import { propsToNative } from 'src/services/attributes_helper/attributes_helper.service.js'
|
||||
|
||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||
import {
|
||||
|
@ -261,6 +262,9 @@ const ProfileTab = {
|
|||
messageArgs: [error.message],
|
||||
level: 'error'
|
||||
})
|
||||
},
|
||||
propsToNative (props) {
|
||||
return propsToNative(props)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,11 +8,14 @@
|
|||
enable-emoji-picker
|
||||
:suggest="emojiSuggestor"
|
||||
>
|
||||
<input
|
||||
id="username"
|
||||
v-model="newName"
|
||||
class="name-changer"
|
||||
>
|
||||
<template #default="inputProps">
|
||||
<input
|
||||
id="username"
|
||||
v-model="newName"
|
||||
class="name-changer"
|
||||
v-bind="propsToNative(inputProps)"
|
||||
>
|
||||
</template>
|
||||
</EmojiInput>
|
||||
<p>{{ $t('settings.bio') }}</p>
|
||||
<EmojiInput
|
||||
|
@ -20,10 +23,13 @@
|
|||
enable-emoji-picker
|
||||
:suggest="emojiUserSuggestor"
|
||||
>
|
||||
<textarea
|
||||
v-model="newBio"
|
||||
class="bio resize-height"
|
||||
/>
|
||||
<template #default="inputProps">
|
||||
<textarea
|
||||
v-model="newBio"
|
||||
class="bio resize-height"
|
||||
v-bind="propsToNative(inputProps)"
|
||||
/>
|
||||
</template>
|
||||
</EmojiInput>
|
||||
<p v-if="role === 'admin' || role === 'moderator'">
|
||||
<Checkbox v-model="showRole">
|
||||
|
@ -60,10 +66,13 @@
|
|||
hide-emoji-button
|
||||
:suggest="userSuggestor"
|
||||
>
|
||||
<input
|
||||
v-model="newFields[i].name"
|
||||
:placeholder="$t('settings.profile_fields.name')"
|
||||
>
|
||||
<template #default="inputProps">
|
||||
<input
|
||||
v-model="newFields[i].name"
|
||||
:placeholder="$t('settings.profile_fields.name')"
|
||||
v-bind="propsToNative(inputProps)"
|
||||
>
|
||||
</template>
|
||||
</EmojiInput>
|
||||
<EmojiInput
|
||||
v-model="newFields[i].value"
|
||||
|
@ -71,10 +80,13 @@
|
|||
hide-emoji-button
|
||||
:suggest="userSuggestor"
|
||||
>
|
||||
<input
|
||||
v-model="newFields[i].value"
|
||||
:placeholder="$t('settings.profile_fields.value')"
|
||||
>
|
||||
<template #default="inputProps">
|
||||
<input
|
||||
v-model="newFields[i].value"
|
||||
:placeholder="$t('settings.profile_fields.value')"
|
||||
v-bind="propsToNative(inputProps)"
|
||||
>
|
||||
</template>
|
||||
</EmojiInput>
|
||||
<button
|
||||
class="delete-field button-unstyled -hover-highlight"
|
||||
|
|
|
@ -129,12 +129,13 @@
|
|||
v-model="selected.inset"
|
||||
:disabled="!present"
|
||||
name="inset"
|
||||
class="input-inset"
|
||||
class="input-inset visible-for-screenreader-only"
|
||||
type="checkbox"
|
||||
>
|
||||
<label
|
||||
class="checkbox-label"
|
||||
for="inset"
|
||||
:aria-hidden="true"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
|
|
|
@ -117,6 +117,7 @@ export default {
|
|||
onClick={this.clickTab(index)}
|
||||
class={classesTab.join(' ')}
|
||||
type="button"
|
||||
role="tab"
|
||||
>
|
||||
<img src={props.image} title={props['image-tooltip']}/>
|
||||
{props.label ? '' : props.label}
|
||||
|
@ -131,6 +132,7 @@ export default {
|
|||
onClick={this.clickTab(index)}
|
||||
class={classesTab.join(' ')}
|
||||
type="button"
|
||||
role="tab"
|
||||
>
|
||||
{!props.icon ? '' : (<FAIcon class="tab-icon" size="2x" fixed-width icon={props.icon}/>)}
|
||||
<span class="text">
|
||||
|
@ -167,11 +169,15 @@ export default {
|
|||
|
||||
return (
|
||||
<div class={'tab-switcher ' + (this.sideTabBar ? 'side-tabs' : 'top-tabs')}>
|
||||
<div class="tabs">
|
||||
<div
|
||||
class="tabs"
|
||||
role="tablist"
|
||||
>
|
||||
{tabs}
|
||||
</div>
|
||||
<div
|
||||
ref="contents"
|
||||
role="tabpanel"
|
||||
class={'contents' + (this.scrollableTabs ? ' scrollable-tabs' : '')}
|
||||
v-body-scroll-lock={this.bodyScrollLock}
|
||||
>
|
||||
|
|
|
@ -176,6 +176,7 @@
|
|||
"bookmarks": "Bookmarks",
|
||||
"user_search": "User Search",
|
||||
"search": "Search",
|
||||
"search_close": "Close search bar",
|
||||
"who_to_follow": "Who to follow",
|
||||
"preferences": "Preferences",
|
||||
"timelines": "Timelines",
|
||||
|
@ -270,6 +271,7 @@
|
|||
"text/markdown": "Markdown",
|
||||
"text/bbcode": "BBCode"
|
||||
},
|
||||
"content_type_selection": "Post format",
|
||||
"content_warning": "Subject (optional)",
|
||||
"default": "Just got exiled to Nusakambangan",
|
||||
"direct_warning_to_all": "This post will be visible to all the mentioned users.",
|
||||
|
@ -287,6 +289,7 @@
|
|||
"private": "This post will be visible to your followers only",
|
||||
"unlisted": "This post will not be visible in Public Timeline and The Whole Known Network"
|
||||
},
|
||||
"scope_notice_dismiss": "Close this notice",
|
||||
"scope": {
|
||||
"direct": "Direct - post to mentioned users only",
|
||||
"private": "Followers-only - post to followers only",
|
||||
|
@ -462,7 +465,9 @@
|
|||
"domain_mutes": "Domains",
|
||||
"avatar_size_instruction": "The recommended minimum size for avatar images is 150x150 pixels.",
|
||||
"pad_emoji": "Pad emoji with spaces when adding from picker",
|
||||
"autocomplete_select_first": "Automatically select the first candidate when autocomplete results are available",
|
||||
"emoji_reactions_on_timeline": "Show emoji reactions on timeline",
|
||||
"emoji_reactions_scale": "Reactions scale factor",
|
||||
"export_theme": "Save preset",
|
||||
"filtering": "Filtering",
|
||||
"wordfilter": "Wordfilter",
|
||||
|
@ -1055,7 +1060,8 @@
|
|||
"reject_follow_request": "Reject follow request",
|
||||
"bookmark": "Bookmark",
|
||||
"toggle_expand": "Expand or collapse notification to show post in full",
|
||||
"toggle_mute": "Expand or collapse notification to reveal muted content"
|
||||
"toggle_mute": "Expand or collapse notification to reveal muted content",
|
||||
"autocomplete_available": "{number} result is available. Use up and down keys to navigate through them. | {number} results are available. Use up and down keys to navigate through them."
|
||||
},
|
||||
"upload": {
|
||||
"error": {
|
||||
|
|
ファイル差分が大きすぎるため省略します
差分を読み込み
ファイル差分が大きすぎるため省略します
差分を読み込み
ファイル差分が大きすぎるため省略します
差分を読み込み
|
@ -0,0 +1,905 @@
|
|||
{
|
||||
"emoji": {
|
||||
"unicode": "統一碼繪文字",
|
||||
"custom": "自定義繪文字",
|
||||
"add_emoji": "插入繪文字",
|
||||
"search_emoji": "搜索繪文字",
|
||||
"keep_open": "選擇器保持打開",
|
||||
"emoji": "繪文字",
|
||||
"stickers": "貼紙",
|
||||
"load_all": "加載所有繪文字(共 {emojiAmount} 個)",
|
||||
"load_all_hint": "最先加載的 {saneAmount} ,加載全部繪文字可能會帶來性能問題。"
|
||||
},
|
||||
"polls": {
|
||||
"not_enough_options": "投票的選項太少",
|
||||
"expired": "投票 {0} 前已結束",
|
||||
"expires_in": "投票於 {0} 內結束",
|
||||
"expiry": "投票期限",
|
||||
"multiple_choices": "多選",
|
||||
"single_choice": "單選",
|
||||
"type": "問卷類型",
|
||||
"vote": "投票",
|
||||
"votes": "票",
|
||||
"option": "選項",
|
||||
"add_option": "增加選項",
|
||||
"add_poll": "增加投票",
|
||||
"votes_count": "{count} 票 | {count} 票",
|
||||
"people_voted_count": "{count} 人已投票 | {count} 人已投票"
|
||||
},
|
||||
"notifications": {
|
||||
"reacted_with": "作出了 {0} 的反應",
|
||||
"migrated_to": "遷移到",
|
||||
"no_more_notifications": "沒有更多的通知",
|
||||
"repeated_you": "轉發了你的發文",
|
||||
"read": "已閱!",
|
||||
"notifications": "通知",
|
||||
"load_older": "載入更早的通知",
|
||||
"follow_request": "想要關注你",
|
||||
"followed_you": "關注了你",
|
||||
"favorited_you": "喜歡了你的發文",
|
||||
"broken_favorite": "未知的狀態,正在搜索中…",
|
||||
"error": "獲取通知錯誤:{0}"
|
||||
},
|
||||
"nav": {
|
||||
"chats": "聊天",
|
||||
"timelines": "時間線",
|
||||
"preferences": "偏好設置",
|
||||
"who_to_follow": "推薦關注",
|
||||
"search": "搜索",
|
||||
"user_search": "用戶搜索",
|
||||
"bookmarks": "書籤",
|
||||
"twkn": "已知網絡",
|
||||
"timeline": "時間線",
|
||||
"public_tl": "公共時間線",
|
||||
"dms": "私信",
|
||||
"interactions": "互動",
|
||||
"mentions": "提及",
|
||||
"friend_requests": "關注請求",
|
||||
"back": "後退",
|
||||
"administration": "管理員",
|
||||
"about": "關於",
|
||||
"home_timeline": "家時間線"
|
||||
},
|
||||
"media_modal": {
|
||||
"next": "往後",
|
||||
"previous": "往前"
|
||||
},
|
||||
"login": {
|
||||
"heading": {
|
||||
"recovery": "雙重因素恢復",
|
||||
"totp": "雙重因素驗證"
|
||||
},
|
||||
"recovery_code": "恢復碼",
|
||||
"enter_two_factor_code": "輸入一個雙重因素驗證碼",
|
||||
"enter_recovery_code": "輸入一個恢復碼",
|
||||
"authentication_code": "驗證碼",
|
||||
"hint": "登錄後加入討論",
|
||||
"username": "用戶名",
|
||||
"register": "註冊",
|
||||
"placeholder": "例:鈴音",
|
||||
"password": "密碼",
|
||||
"logout": "登出",
|
||||
"description": "用 OAuth 登入",
|
||||
"login": "登入"
|
||||
},
|
||||
"importer": {
|
||||
"error": "導入此文件時出現一個錯誤。",
|
||||
"success": "導入成功。",
|
||||
"submit": "提交"
|
||||
},
|
||||
"image_cropper": {
|
||||
"cancel": "取消",
|
||||
"save_without_cropping": "保存不裁剪",
|
||||
"save": "保存",
|
||||
"crop_picture": "裁剪圖片"
|
||||
},
|
||||
"general": {
|
||||
"peek": "窺視",
|
||||
"close": "關閉",
|
||||
"verify": "驗證",
|
||||
"confirm": "確認",
|
||||
"enable": "啟用",
|
||||
"disable": "禁用",
|
||||
"cancel": "取消",
|
||||
"dismiss": "忽略",
|
||||
"show_less": "收起",
|
||||
"show_more": "展開",
|
||||
"optional": "可選",
|
||||
"retry": "再試",
|
||||
"error_retry": "請再試",
|
||||
"generic_error": "發生一個錯誤",
|
||||
"loading": "載入中…",
|
||||
"more": "更多",
|
||||
"submit": "提交",
|
||||
"apply": "應用",
|
||||
"role": {
|
||||
"moderator": "審查者",
|
||||
"admin": "管理員"
|
||||
},
|
||||
"flash_content": "點擊以使用 Ruffle 顯示 Flash 內容(實驗性,可能無效)。",
|
||||
"flash_security": "請注意,這可能有潜在的危險,因為Flash內容仍然是武斷的程式碼。",
|
||||
"flash_fail": "無法加載flash內容,請參閱控制台瞭解詳細資訊。",
|
||||
"no": "否",
|
||||
"generic_error_message": "發生了一個錯誤: {0}",
|
||||
"never_show_again": "不再顯示",
|
||||
"yes": "是",
|
||||
"undo": "復原",
|
||||
"scroll_to_top": "滾動至頂部",
|
||||
"pin": "置頂",
|
||||
"scope_in_timeline": {
|
||||
"private": "僅關注者"
|
||||
},
|
||||
"unpin": "停止置頂"
|
||||
},
|
||||
"finder": {
|
||||
"find_user": "尋找用戶",
|
||||
"error_fetching_user": "獲取用戶時發生錯誤"
|
||||
},
|
||||
"features_panel": {
|
||||
"who_to_follow": "推薦關注",
|
||||
"title": "特色",
|
||||
"text_limit": "文字數量限制",
|
||||
"scope_options": "可見範圍設置",
|
||||
"media_proxy": "媒體代理",
|
||||
"pleroma_chat_messages": "Pleroma 聊天",
|
||||
"chat": "聊天",
|
||||
"gopher": "Gopher",
|
||||
"upload_limit": "上傳限制",
|
||||
"shout": "留言板"
|
||||
},
|
||||
"exporter": {
|
||||
"processing": "正在處理,稍後會提示您下載文件",
|
||||
"export": "導出"
|
||||
},
|
||||
"domain_mute_card": {
|
||||
"unmute_progress": "取消靜音中…",
|
||||
"unmute": "取消靜音",
|
||||
"mute_progress": "靜音中…",
|
||||
"mute": "靜音"
|
||||
},
|
||||
"shoutbox": {
|
||||
"title": "留言板"
|
||||
},
|
||||
"about": {
|
||||
"staff": "職員",
|
||||
"mrf": {
|
||||
"simple": {
|
||||
"media_nsfw_desc": "這個實例強迫以下實例的帖子媒體設定為敏感:",
|
||||
"media_nsfw": "媒體強制設定為敏感",
|
||||
"media_removal_desc": "這個實例移除以下實例的帖子媒體:",
|
||||
"media_removal": "移除媒體",
|
||||
"ftl_removal_desc": "這個實例在所有已知網絡中移除下列實例:",
|
||||
"ftl_removal": "從所有已知網路中移除",
|
||||
"quarantine_desc": "本實例只會把公開發文發送到下列實例:",
|
||||
"quarantine": "隔離",
|
||||
"reject_desc": "本實例不會接收來自下列實例的消息:",
|
||||
"reject": "拒絕",
|
||||
"accept_desc": "本實例只接收來自下列實例的消息:",
|
||||
"simple_policies": "站規",
|
||||
"accept": "接受",
|
||||
"instance": "實例",
|
||||
"reason": "原因",
|
||||
"not_applicable": "N/A"
|
||||
},
|
||||
"mrf_policies_desc": "MRF 策略會影響本實例的互通行為。以下策略已啟用:",
|
||||
"keyword": {
|
||||
"ftl_removal": "從「全部已知網絡」時間線上移除",
|
||||
"replace": "取代",
|
||||
"reject": "拒絕",
|
||||
"is_replaced_by": "→",
|
||||
"keyword_policies": "關鍵字政策"
|
||||
},
|
||||
"mrf_policies": "已啟用的MRF政策",
|
||||
"federation": "聯邦"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"style": {
|
||||
"common": {
|
||||
"color": "顏色",
|
||||
"contrast": {
|
||||
"context": {
|
||||
"18pt": "大字文本 (18pt+)",
|
||||
"text": "文本"
|
||||
},
|
||||
"level": {
|
||||
"aaa": "符合 AAA 等級準則(推薦)",
|
||||
"aa": "符合 AA 等級準則(最低)",
|
||||
"bad": "不符合任何輔助功能指南"
|
||||
},
|
||||
"hint": "對比度是 {ratio}, 它 {level} {context}"
|
||||
},
|
||||
"opacity": "透明度"
|
||||
},
|
||||
"advanced_colors": {
|
||||
"faint_text": "灰度文字",
|
||||
"alert_error": "錯誤",
|
||||
"badge_notification": "通知",
|
||||
"alert": "提醒或警告背景色",
|
||||
"_tab_label": "高级",
|
||||
"alert_warning": "警告",
|
||||
"alert_neutral": "中性",
|
||||
"post": "帖子/用戶簡介",
|
||||
"badge": "徽章背景",
|
||||
"popover": "提示框,菜單,彈出框",
|
||||
"panel_header": "面板標題",
|
||||
"top_bar": "頂欄",
|
||||
"borders": "邊框",
|
||||
"buttons": "按鈕",
|
||||
"inputs": "輸入框",
|
||||
"underlay": "底襯",
|
||||
"poll": "投票統計圖",
|
||||
"icons": "圖標",
|
||||
"highlight": "強調元素",
|
||||
"pressed": "按下",
|
||||
"selectedPost": "選中的帖子",
|
||||
"selectedMenu": "選中的菜單項",
|
||||
"disabled": "關閉",
|
||||
"toggled": "切換",
|
||||
"tabs": "標籤",
|
||||
"chat": {
|
||||
"incoming": "收到",
|
||||
"outgoing": "發出",
|
||||
"border": "邊框"
|
||||
},
|
||||
"wallpaper": "桌布"
|
||||
},
|
||||
"preview": {
|
||||
"header_faint": "這很正常",
|
||||
"header": "預覽",
|
||||
"content": "內容",
|
||||
"error": "例子錯誤",
|
||||
"button": "按鈕",
|
||||
"text": "有堆 {0} 和 {1}",
|
||||
"mono": "內容",
|
||||
"input": "剛剛抵達洛杉磯.",
|
||||
"faint_link": "有用的手冊",
|
||||
"fine_print": "閱讀我們的 {0} ,然而什麼有用的也學不到!",
|
||||
"checkbox": "我已經瀏覽了條款及細則",
|
||||
"link": "一個很好的小鏈接"
|
||||
},
|
||||
"shadows": {
|
||||
"override": "覆寫",
|
||||
"_tab_label": "陰影和燈光",
|
||||
"component": "組件",
|
||||
"shadow_id": "陰影 #{value}",
|
||||
"blur": "模糊",
|
||||
"spread": "擴散",
|
||||
"inset": "插圖",
|
||||
"hintV3": "對於陰影,您還可以使用{0}表示法來使用其他顏色插槽。",
|
||||
"filter_hint": {
|
||||
"always_drop_shadow": "警告,此陰影設置會總是使用 {0} ,如果瀏覽器支持的話。",
|
||||
"drop_shadow_syntax": "{0} 不支持參數 {1} 和關鍵詞 {2} 。",
|
||||
"avatar_inset": "請注意組合兩個內部和非內部的陰影到頭像上,在透明頭像上可能會有意料之外的效果。",
|
||||
"spread_zero": "陰影的擴散 > 0 會同設置成零一樣",
|
||||
"inset_classic": "插入內部的陰影會使用 {0}"
|
||||
},
|
||||
"components": {
|
||||
"panel": "面板",
|
||||
"panelHeader": "面板標題",
|
||||
"topBar": "頂欄",
|
||||
"avatar": "用戶頭像(在個人資料欄)",
|
||||
"avatarStatus": "用戶頭像(在帖子顯示欄)",
|
||||
"popup": "彈窗和工具提示",
|
||||
"button": "按鈕",
|
||||
"buttonHover": "按鈕(懸停)",
|
||||
"buttonPressed": "按鈕(按下)",
|
||||
"buttonPressedHover": "按鈕(按下和懸停)",
|
||||
"input": "輸入框"
|
||||
}
|
||||
},
|
||||
"switcher": {
|
||||
"use_snapshot": "舊版",
|
||||
"load_theme": "載入主題",
|
||||
"keep_color": "保留顏色",
|
||||
"keep_shadows": "保留陰影",
|
||||
"keep_opacity": "保留透明度",
|
||||
"keep_roundness": "保留圓角",
|
||||
"help": {
|
||||
"migration_napshot_gone": "不知出於何種原因,主題快照缺失了,一些地方可能與您印象中的不符。",
|
||||
"snapshot_source_mismatch": "版本衝突:很有可能是 FE 版本回滾後再次升級了,如果您使用舊版本的 FE 更改了主題那麼您可能需要使用舊版本,否則請使用新版本。",
|
||||
"future_version_imported": "您導入的文件來自更高版本的 FE。",
|
||||
"older_version_imported": "您導入的文件來自舊版本的 FE。",
|
||||
"snapshot_missing": "在文件中沒有主題快照,所以網站外觀可能會與原來預想的不同。",
|
||||
"fe_upgraded": "PleromaFE 的主題引擎隨著版本更新升級了。",
|
||||
"fe_downgraded": "PleromaFE 的版本回滾了。",
|
||||
"upgraded_from_v2": "PleromaFE 已升級,主題會和你記憶中的不太一樣。",
|
||||
"v2_imported": "您導入的文件是舊版 FE 的。我們儘可能保持兼容性,但還是可能出現不一致的情況。",
|
||||
"snapshot_present": "載入快照已加載,因此所有值均被覆蓋。 您可以改為載入主題實際數據。",
|
||||
"migration_snapshot_ok": "為保萬無一失,載入了主題快照。您可以試著載入主題數據。"
|
||||
},
|
||||
"use_source": "新版本",
|
||||
"keep_as_is": "保持原狀",
|
||||
"clear_opacity": "清除透明度",
|
||||
"clear_all": "清除全部",
|
||||
"reset": "重置",
|
||||
"keep_fonts": "保留字體",
|
||||
"save_load_hint": "\"保留\" 選項在選擇或載入主題時保留當前設置的選項,在導出主題時還會存儲上述選項。當所有複選框未設置時,導出主題將保存所有內容。"
|
||||
},
|
||||
"fonts": {
|
||||
"components": {
|
||||
"interface": "界面",
|
||||
"input": "輸入框",
|
||||
"post": "發帖文字",
|
||||
"postCode": "帖子中使用等間距文字(富文本)"
|
||||
},
|
||||
"_tab_label": "字體",
|
||||
"help": "給用戶界面的元素選擇字體。選擇 “自選”的你必須輸入確切的字體名稱。",
|
||||
"family": "字體名稱",
|
||||
"size": "大小 (像素)",
|
||||
"weight": "字重 (粗體))",
|
||||
"custom": "自選"
|
||||
},
|
||||
"common_colors": {
|
||||
"foreground_hint": "點擊”高級“ 標籤進行細緻的控制",
|
||||
"main": "常用顏色",
|
||||
"_tab_label": "共同",
|
||||
"rgbo": "圖標,強調,徽章"
|
||||
},
|
||||
"radii": {
|
||||
"_tab_label": "圓角"
|
||||
}
|
||||
},
|
||||
"notification_setting_block_from_strangers": "屏蔽來自你沒有關注的用戶的通知",
|
||||
"user_mutes": "用户",
|
||||
"hide_followers_count_description": "不顯示關注者數量",
|
||||
"no_rich_text_description": "不顯示富文本格式",
|
||||
"notification_visibility_moves": "用戶遷移",
|
||||
"notification_visibility_repeats": "轉發",
|
||||
"notification_visibility_mentions": "提及",
|
||||
"notification_visibility_likes": "喜歡",
|
||||
"interfaceLanguage": "界面語言",
|
||||
"instance_default": "(默認:{value})",
|
||||
"inputRadius": "輸入框",
|
||||
"import_theme": "導入預置主題",
|
||||
"import_followers_from_a_csv_file": "從 csv 文件中導入關注",
|
||||
"import_blocks_from_a_csv_file": "從 csv 文件中導入封鎖黑名單名單",
|
||||
"hide_filtered_statuses": "隱藏過濾的發文",
|
||||
"lock_account_description": "你需要手動審核關注請求",
|
||||
"loop_video": "循環視頻",
|
||||
"loop_video_silent_only": "只循環沒有聲音的視頻(例如:Mastodon 裡的“GIF”)",
|
||||
"mutes_tab": "靜音",
|
||||
"play_videos_in_modal": "在彈出框內播放視頻",
|
||||
"profile_fields": {
|
||||
"add_field": "添加字段",
|
||||
"name": "標籤",
|
||||
"value": "內容",
|
||||
"label": "個人資料元數據"
|
||||
},
|
||||
"use_contain_fit": "生成縮略圖時不要裁剪附件",
|
||||
"notification_visibility": "要顯示的通知類型",
|
||||
"notification_visibility_follows": "關注",
|
||||
"new_email": "新電郵",
|
||||
"subject_line_mastodon": "比如mastodon: copy as is",
|
||||
"reset_background_confirm": "您確定要重置個人資料背景圖嗎?",
|
||||
"reset_banner_confirm": "您確定要重置橫幅圖片嗎?",
|
||||
"reset_avatar_confirm": "您確定要重置頭像嗎?",
|
||||
"reset_profile_banner": "重置橫幅圖片",
|
||||
"reset_profile_background": "重置個人資料背景圖",
|
||||
"reset_avatar": "重置頭像",
|
||||
"discoverable": "允許通過搜索檢索等服務找到此賬號",
|
||||
"delete_account_error": "刪除賬戶時發生錯誤,如果一直刪除不了,請聯繫實例管理員。",
|
||||
"composing": "寫作設置",
|
||||
"chatMessageRadius": "聊天訊息",
|
||||
"mfa": {
|
||||
"confirm_and_enable": "確認並啟用OTP",
|
||||
"setup_otp": "設置OTP",
|
||||
"otp": "OTP",
|
||||
"wait_pre_setup_otp": "預設OTP",
|
||||
"verify": {
|
||||
"desc": "要啟用雙因素驗證,請把你的雙因素驗證 app 裡的數字輸入:"
|
||||
},
|
||||
"scan": {
|
||||
"secret_code": "密鑰",
|
||||
"desc": "使用你的雙因素驗證 app,掃瞄這個二維碼,或者輸入這些文字密鑰:",
|
||||
"title": "掃瞄"
|
||||
},
|
||||
"authentication_methods": "身份驗證方法",
|
||||
"recovery_codes_warning": "抄寫這些號碼,或者保存在安全的地方。這些號碼不會再次顯示。如果你無法訪問你的 2FA app,也丟失了你的恢復碼,你的賬號就再也無法登錄了。",
|
||||
"waiting_a_recovery_codes": "正在接收備份碼…",
|
||||
"recovery_codes": "恢復碼。",
|
||||
"warning_of_generate_new_codes": "當你生成新的恢復碼時,你的舊恢復碼就失效了。",
|
||||
"generate_new_recovery_codes": "生成新的恢復碼",
|
||||
"title": "雙因素驗證"
|
||||
},
|
||||
"new_password": "新密碼",
|
||||
"name_bio": "名字及簡介",
|
||||
"name": "名字",
|
||||
"domain_mutes": "域名",
|
||||
"delete_account_instructions": "在下面輸入密碼,以確認刪除帳戶。",
|
||||
"delete_account_description": "永久刪除你的帳號和所有數據。",
|
||||
"delete_account": "刪除帳戶",
|
||||
"default_vis": "默認可見性範圍",
|
||||
"data_import_export_tab": "數據導入/導出",
|
||||
"mutes_and_blocks": "靜音與封鎖",
|
||||
"current_password": "當前密碼",
|
||||
"confirm_new_password": "確認新密碼",
|
||||
"collapse_subject": "摺疊帶標題的內容",
|
||||
"checkboxRadius": "複選框",
|
||||
"instance_default_simple": "(默認)",
|
||||
"interface": "界面",
|
||||
"invalid_theme_imported": "您所選擇的主題文件不被 Pleroma 支持,因此主題未被修改。",
|
||||
"limited_availability": "在您的瀏覽器中無法使用",
|
||||
"links": "鏈接",
|
||||
"changed_password": "成功修改了密碼!",
|
||||
"change_password_error": "修改密碼的時候出了點問題。",
|
||||
"change_password": "修改密碼",
|
||||
"changed_email": "郵箱修改成功!",
|
||||
"bot": "這是一個機器人賬號",
|
||||
"change_email": "修改電子郵箱",
|
||||
"cRed": "紅色(取消)",
|
||||
"cOrange": "橙色(收藏)",
|
||||
"cGreen": "綠色(轉發)",
|
||||
"cBlue": "藍色(回覆,關注)",
|
||||
"btnRadius": "按鈕",
|
||||
"notification_visibility_emoji_reactions": "互動",
|
||||
"no_blocks": "沒有封鎖",
|
||||
"no_mutes": "沒有靜音",
|
||||
"hide_follows_description": "不要顯示我所關注的人",
|
||||
"hide_followers_description": "不要顯示關注我的人",
|
||||
"hide_follows_count_description": "不顯示關注數",
|
||||
"nsfw_clickthrough": "將敏感附件和鏈接隱藏,點擊才能打開",
|
||||
"valid_until": "有效期至",
|
||||
"panelRadius": "面板",
|
||||
"pause_on_unfocused": "在離開頁面時暫停時間線推送",
|
||||
"notifications": "通知",
|
||||
"notification_setting_filters": "過濾器",
|
||||
"notification_setting_privacy": "隱私",
|
||||
"notification_mutes": "要停止收到某個指定的用戶的通知,請使用靜音功能。",
|
||||
"notification_blocks": "封鎖一個用戶會停掉所有他的通知,等同於取消關注。",
|
||||
"enable_web_push_notifications": "啟用 web 推送通知",
|
||||
"presets": "預置",
|
||||
"profile_background": "配置文件背景圖",
|
||||
"profile_banner": "橫幅圖片",
|
||||
"profile_tab": "個人資料",
|
||||
"radii_help": "設置界面邊緣的圓角 (單位:像素)",
|
||||
"reply_visibility_all": "顯示所有回覆",
|
||||
"autohide_floating_post_button": "自動隱藏新帖子的按鈕(移動設備)",
|
||||
"saving_err": "保存設置時發生錯誤",
|
||||
"saving_ok": "設置已保存",
|
||||
"search_user_to_block": "搜索你想屏蔽的用戶",
|
||||
"search_user_to_mute": "搜索你想要隱藏的用戶",
|
||||
"security_tab": "安全",
|
||||
"set_new_avatar": "設置新頭像",
|
||||
"set_new_profile_background": "設置新的個人背景",
|
||||
"set_new_profile_banner": "設置新的個人橫幅",
|
||||
"settings": "設置",
|
||||
"subject_input_always_show": "總是顯示主題框",
|
||||
"subject_line_behavior": "回覆時複製主題",
|
||||
"subject_line_email": "比如電郵: \"re: 主題\"",
|
||||
"subject_line_noop": "不要複製",
|
||||
"post_status_content_type": "發文內容類型",
|
||||
"stop_gifs": "鼠標懸停時播放GIF",
|
||||
"streaming": "開啟滾動到頂部時的自動推送",
|
||||
"text": "文本",
|
||||
"theme": "主題",
|
||||
"theme_help": "使用十六進制代碼(#rrggbb)來設置主題顏色。",
|
||||
"theme_help_v2_1": "你也可以通過切換複選框來覆蓋某些組件的顏色和透明。使用“清除所有”來清楚所有覆蓋設置。",
|
||||
"theme_help_v2_2": "某些條目下的圖標是背景或文本對比指示器,鼠標懸停可以獲取詳細信息。請記住,使用透明度來顯示最差的情況。",
|
||||
"tooltipRadius": "提醒",
|
||||
"upload_a_photo": "上傳照片",
|
||||
"user_settings": "用戶設置",
|
||||
"values": {
|
||||
"false": "否",
|
||||
"true": "是"
|
||||
},
|
||||
"avatar_size_instruction": "推薦的頭像圖片最小的尺寸是 150x150 像素。",
|
||||
"emoji_reactions_on_timeline": "在時間線上顯示繪文字互動",
|
||||
"export_theme": "導出預置主題",
|
||||
"filtering": "過濾",
|
||||
"filtering_explanation": "所有包含以下詞彙的內容都會被隱藏,一行一個",
|
||||
"follow_export": "導出關注",
|
||||
"follow_export_button": "將關注導出成 csv 文件",
|
||||
"follow_import": "導入關注",
|
||||
"follow_import_error": "導入關注時錯誤",
|
||||
"follows_imported": "關注已導入!尚需要一些時間來處理。",
|
||||
"hide_attachments_in_convo": "在對話中隱藏附件",
|
||||
"hide_attachments_in_tl": "在時間線上隱藏附件",
|
||||
"hide_muted_posts": "不顯示被靜音的用戶的帖子",
|
||||
"max_thumbnails": "最多每個帖子所能顯示的縮略圖數量",
|
||||
"hide_isp": "隱藏指定實例的面板",
|
||||
"preload_images": "預載圖片",
|
||||
"use_one_click_nsfw": "點擊一次以打開工作場所不適宜的附件",
|
||||
"hide_post_stats": "隱藏帖子的統計數據(例如:收藏的次數)",
|
||||
"hide_user_stats": "隱藏用戶的統計數據(例如:關注者的數量)",
|
||||
"general": "通用",
|
||||
"foreground": "前景",
|
||||
"blocks_tab": "封鎖",
|
||||
"blocks_imported": "封鎖黑名單導入成功!需要一點時間來處理。",
|
||||
"block_import_error": "導入封鎖黑名單出錯",
|
||||
"block_import": "封鎖黑名單導入",
|
||||
"block_export_button": "導出你的封鎖黑名單到一個 csv 文件",
|
||||
"block_export": "封鎖黑名單導出",
|
||||
"bio": "簡介",
|
||||
"background": "背景",
|
||||
"avatarRadius": "頭像",
|
||||
"avatarAltRadius": "頭像(通知)",
|
||||
"avatar": "頭像",
|
||||
"attachments": "附件",
|
||||
"attachmentRadius": "附件",
|
||||
"allow_following_move": "正在關注的賬號遷移時自動重新關注",
|
||||
"enter_current_password_to_confirm": "輸入你當前密碼來確認你的身份",
|
||||
"security": "安全",
|
||||
"app_name": "App 名稱",
|
||||
"change_email_error": "修改你的電子郵箱時發生錯誤。",
|
||||
"type_domains_to_mute": "搜索需要隱藏的域名",
|
||||
"pad_emoji": "從繪文字選擇器插入繪文字時,在繪文字兩側插入空格",
|
||||
"useStreamingApi": "實時接收發佈以及通知",
|
||||
"minimal_scopes_mode": "最小發文範圍",
|
||||
"scope_copy": "回覆時的複製範圍(私信是總是複製的)",
|
||||
"reply_visibility_self": "只顯示發送給我的回覆",
|
||||
"reply_visibility_following": "只顯示發送給我的回覆/發送給我關注的用戶的回覆",
|
||||
"replies_in_timeline": "時間線中的回覆",
|
||||
"revoke_token": "撤消",
|
||||
"show_admin_badge": "顯示管理徽章",
|
||||
"accent": "強調色",
|
||||
"greentext": "前文箭頭",
|
||||
"show_moderator_badge": "顯示主持人徽章",
|
||||
"oauth_tokens": "OAuth代幣",
|
||||
"token": "代幣",
|
||||
"refresh_token": "刷新token",
|
||||
"useStreamingApiWarning": "(不推薦使用,實驗性的,已知跳過文章)",
|
||||
"fun": "有趣",
|
||||
"notification_setting_hide_notification_contents": "隱藏推送通知中的發送者與內容信息",
|
||||
"version": {
|
||||
"title": "版本",
|
||||
"backend_version": "後端版本",
|
||||
"frontend_version": "前端版本"
|
||||
},
|
||||
"virtual_scrolling": "優化時間線渲染",
|
||||
"import_mutes_from_a_csv_file": "從CSV文件導入靜音",
|
||||
"mutes_imported": "靜音導入了!處理它們將需要一段時間。",
|
||||
"mute_import": "靜音導入",
|
||||
"mute_import_error": "導入靜音時出錯",
|
||||
"mute_export_button": "將靜音導出到csv文件",
|
||||
"mute_export": "靜音導出",
|
||||
"hide_wallpaper": "隱藏實例桌布",
|
||||
"reply_visibility_self_short": "只顯示對我本人的回复",
|
||||
"reply_visibility_following_short": "顯示對我關注的人的回复",
|
||||
"hide_all_muted_posts": "不顯示已隱藏的帖子",
|
||||
"hide_media_previews": "隱藏媒體預覽",
|
||||
"word_filter": "詞過濾",
|
||||
"setting_changed": "與默認設置不同",
|
||||
"more_settings": "更多設置",
|
||||
"save": "保存更改",
|
||||
"file_export_import": {
|
||||
"errors": {
|
||||
"invalid_file": "所選文件不是受支持的Pleroma設置備份。 沒有進行任何更改。",
|
||||
"file_too_new": "不兼容的主版本:{fileMajor},此 PleromaFE(設置版本 {feMajor})過舊,無法處理",
|
||||
"file_too_old": "不兼容的主版本:{fileMajor},文件版本過舊,不受支持(最小設置版本 {feMajor})",
|
||||
"file_slightly_new": "檔案的小版本不同,有些設置可能無法載入"
|
||||
},
|
||||
"restore_settings": "從文件還原設置",
|
||||
"backup_settings_theme": "備份設置和主題到文件",
|
||||
"backup_settings": "備份設置到文件",
|
||||
"backup_restore": "設定備份"
|
||||
},
|
||||
"sensitive_by_default": "默認標記發文為敏感內容",
|
||||
"right_sidebar": "在右側顯示側邊欄",
|
||||
"hide_shoutbox": "隱藏實例留言框"
|
||||
},
|
||||
"chats": {
|
||||
"more": "更多",
|
||||
"delete_confirm": "您確實要刪除此消息嗎?",
|
||||
"error_loading_chat": "加載聊天時出了點問題。",
|
||||
"error_sending_message": "發送消息時出了點問題。",
|
||||
"empty_chat_list_placeholder": "您還沒有任何聊天記錄。 開始新的聊天!",
|
||||
"new": "新聊天",
|
||||
"empty_message_error": "無法發布空消息",
|
||||
"you": "你:",
|
||||
"message_user": "發消息給 {nickname}",
|
||||
"delete": "刪除",
|
||||
"chats": "聊天"
|
||||
},
|
||||
"file_type": {
|
||||
"audio": "音頻",
|
||||
"video": "視頻",
|
||||
"image": "图片",
|
||||
"file": "檔案"
|
||||
},
|
||||
"display_date": {
|
||||
"today": "今天"
|
||||
},
|
||||
"status": {
|
||||
"mute_conversation": "靜音對話",
|
||||
"replies_list": "回覆:",
|
||||
"reply_to": "回覆",
|
||||
"pin": "在個人資料置頂",
|
||||
"unpin": "取消在個人資料置頂",
|
||||
"favorites": "喜歡",
|
||||
"repeats": "轉發",
|
||||
"delete": "刪除發文",
|
||||
"pinned": "置頂",
|
||||
"bookmark": "書籤",
|
||||
"unbookmark": "取消書籤",
|
||||
"delete_confirm": "你真的想要刪除這條發文嗎?",
|
||||
"unmute_conversation": "對話取消靜音",
|
||||
"status_unavailable": "發文不可取得",
|
||||
"copy_link": "複製發文鏈接",
|
||||
"thread_muted": "静音線程",
|
||||
"show_full_subject": "顯示完整標題",
|
||||
"thread_muted_and_words": ",有这些字:",
|
||||
"hide_full_subject": "隱藏完整標題",
|
||||
"show_content": "顯示內容",
|
||||
"hide_content": "隱藏內容",
|
||||
"status_deleted": "該帖已被刪除",
|
||||
"expand": "展开",
|
||||
"external_source": "外部來源",
|
||||
"nsfw": "工作不安全"
|
||||
},
|
||||
"time": {
|
||||
"hours": "{0} 時",
|
||||
"days_short": "{0}天",
|
||||
"day_short": "{0}天",
|
||||
"days": "{0} 天",
|
||||
"hour": "{0} 時",
|
||||
"hour_short": "{0}時",
|
||||
"hours_short": "{0}時",
|
||||
"years_short": "{0} y",
|
||||
"now": "剛剛",
|
||||
"day": "{0} 天",
|
||||
"in_future": "還有 {0}",
|
||||
"in_past": "{0} 之前",
|
||||
"minute": "{0} 分鐘",
|
||||
"minute_short": "{0} 分",
|
||||
"minutes_short": "{0} 分",
|
||||
"minutes": "{0} 分鐘",
|
||||
"month": "{0} 月",
|
||||
"months": "{0} 月",
|
||||
"month_short": "{0} 月",
|
||||
"months_short": "{0} 月",
|
||||
"now_short": "剛剛",
|
||||
"second": "{0} 秒",
|
||||
"seconds": "{0} 秒",
|
||||
"second_short": "{0} 秒",
|
||||
"seconds_short": "{0} 秒",
|
||||
"week": "{0}周",
|
||||
"weeks": "{0}周",
|
||||
"week_short": "{0}周",
|
||||
"weeks_short": "{0}周",
|
||||
"year": "{0} 年",
|
||||
"years": "{0} 年",
|
||||
"year_short": "{0}年"
|
||||
},
|
||||
"post_status": {
|
||||
"media_description_error": "無法更新媒體,請重試",
|
||||
"media_description": "媒體描述",
|
||||
"scope": {
|
||||
"unlisted": "不公開 - 不會發送到公共時間軸",
|
||||
"public": "公共 - 發送到公共時間軸",
|
||||
"private": "僅關注者 - 只有關注了你的人能看到",
|
||||
"direct": "私信 - 只發送給被提及的用戶"
|
||||
},
|
||||
"scope_notice": {
|
||||
"unlisted": "本條內容既不在公共時間線,也不會在所有已知網絡上可見",
|
||||
"private": "關注你的人才能看到本條內容",
|
||||
"public": "本條帖子可以被所有人看到"
|
||||
},
|
||||
"preview_empty": "空的",
|
||||
"preview": "預覽",
|
||||
"posting": "正在發送",
|
||||
"direct_warning_to_first_only": "本條內容只有被在消息開始處提及的用戶能夠看到。",
|
||||
"direct_warning_to_all": "本條內容只有被提及的用戶能夠看到。",
|
||||
"account_not_locked_warning": "你的帳號沒有 {0}。任何人都可以關注你並瀏覽你的上鎖內容。",
|
||||
"new_status": "發佈新發文",
|
||||
"content_warning": "主題(可選)",
|
||||
"content_type": {
|
||||
"text/bbcode": "BBCode",
|
||||
"text/markdown": "Markdown",
|
||||
"text/html": "HTML",
|
||||
"text/plain": "純文本"
|
||||
},
|
||||
"attachments_sensitive": "標記附件為敏感內容",
|
||||
"account_not_locked_warning_link": "上鎖",
|
||||
"default": "剛剛抵達洛杉磯。",
|
||||
"empty_status_error": "不能發布沒有內容,沒有附件的發文",
|
||||
"post": "發送"
|
||||
},
|
||||
"errors": {
|
||||
"storage_unavailable": "Pleroma無法訪問瀏覽器存儲。您的登錄名或本地設置將不會保存,您可能會遇到意外問題。嘗試啟用Cookie。"
|
||||
},
|
||||
"timeline": {
|
||||
"error_fetching": "獲取更新時發生錯誤",
|
||||
"conversation": "對話",
|
||||
"no_retweet_hint": "這條內容僅關注者可見,或者是私信,因此不能轉發",
|
||||
"collapse": "摺疊",
|
||||
"load_older": "載入更早的發文",
|
||||
"repeated": "已轉發",
|
||||
"show_new": "顯示新內容",
|
||||
"reload": "重新載入",
|
||||
"up_to_date": "已是最新",
|
||||
"no_more_statuses": "没有更多發文",
|
||||
"no_statuses": "没有發文",
|
||||
"error": "取得時間線時發生錯誤:{0}",
|
||||
"socket_reconnected": "已建立實時連接",
|
||||
"socket_broke": "丟失實時連接:CloseEvent代碼{0}"
|
||||
},
|
||||
"interactions": {
|
||||
"load_older": "載入更早的互動",
|
||||
"moves": "用戶遷移",
|
||||
"follows": "新的關注者",
|
||||
"favs_repeats": "轉發和喜歡"
|
||||
},
|
||||
"selectable_list": {
|
||||
"select_all": "選擇全部"
|
||||
},
|
||||
"remote_user_resolver": {
|
||||
"error": "未找到。",
|
||||
"searching_for": "搜索",
|
||||
"remote_user_resolver": "遠程用戶解析器"
|
||||
},
|
||||
"registration": {
|
||||
"validations": {
|
||||
"password_confirmation_match": "不能和密碼一樣",
|
||||
"password_confirmation_required": "不能留空",
|
||||
"password_required": "不能留空",
|
||||
"email_required": "不能留空",
|
||||
"fullname_required": "不能留空",
|
||||
"username_required": "不能留空"
|
||||
},
|
||||
"fullname": "顯示名稱",
|
||||
"bio_placeholder": "例如:\n你好,我是玲音。\n我是一個住在日本郊區的動畫少女。你可能在 Wired 見過我。",
|
||||
"fullname_placeholder": "例如:岩倉玲音",
|
||||
"username_placeholder": "例如:lain",
|
||||
"new_captcha": "點擊圖片獲取新的驗證碼",
|
||||
"captcha": "CAPTCHA",
|
||||
"token": "邀請碼",
|
||||
"registration": "註冊",
|
||||
"password_confirm": "確認密碼",
|
||||
"email": "電子郵箱",
|
||||
"bio": "簡介",
|
||||
"reason_placeholder": "此實例的註冊需要手動批准。\n請讓管理知道您為什麼想要註冊。",
|
||||
"reason": "註冊理由",
|
||||
"register": "註冊"
|
||||
},
|
||||
"user_card": {
|
||||
"its_you": "就是你!!",
|
||||
"media": "媒體",
|
||||
"per_day": "每天",
|
||||
"remote_follow": "跨站關注",
|
||||
"subscribe": "訂閱",
|
||||
"mute_progress": "靜音中…",
|
||||
"admin_menu": {
|
||||
"delete_account": "刪除賬號",
|
||||
"delete_user": "刪除用戶",
|
||||
"moderation": "調停",
|
||||
"grant_admin": "賦予管理權限",
|
||||
"revoke_admin": "撤銷管理權限",
|
||||
"grant_moderator": "賦予主持人權限",
|
||||
"revoke_moderator": "撤銷主持人權限",
|
||||
"activate_account": "啟用賬號",
|
||||
"deactivate_account": "關閉賬號",
|
||||
"force_nsfw": "標記所有的帖子都是工作場合不適",
|
||||
"strip_media": "從帖子裡刪除媒體文件",
|
||||
"force_unlisted": "強制帖子為不公開",
|
||||
"sandbox": "強制帖子為只有關注者可看",
|
||||
"disable_remote_subscription": "禁止從遠程實例關注用戶",
|
||||
"disable_any_subscription": "完全禁止關注用戶",
|
||||
"quarantine": "從聯合實例中禁止用戶帖子"
|
||||
},
|
||||
"approve": "批准",
|
||||
"block": "封鎖",
|
||||
"blocked": "已封鎖!",
|
||||
"deny": "拒絕",
|
||||
"favorites": "喜歡",
|
||||
"follow": "關注",
|
||||
"follow_sent": "請求已發送!",
|
||||
"follow_progress": "請求中…",
|
||||
"follow_unfollow": "取消關注",
|
||||
"followees": "正在關注",
|
||||
"followers": "關注者",
|
||||
"following": "正在關注!",
|
||||
"follows_you": "關注了你!",
|
||||
"hidden": "已隱藏",
|
||||
"mention": "提及",
|
||||
"message": "消息",
|
||||
"mute": "靜音",
|
||||
"muted": "已靜音",
|
||||
"report": "報告",
|
||||
"statuses": "發文",
|
||||
"unsubscribe": "退訂",
|
||||
"unblock": "取消封鎖",
|
||||
"unblock_progress": "取消封鎖中…",
|
||||
"block_progress": "封鎖中…",
|
||||
"unmute": "取消靜音",
|
||||
"unmute_progress": "取消靜音中…",
|
||||
"hide_repeats": "隱藏轉發",
|
||||
"show_repeats": "顯示轉發",
|
||||
"roles": {
|
||||
"moderator": "主持人",
|
||||
"admin": "管理員"
|
||||
},
|
||||
"highlight": {
|
||||
"disabled": "無突出顯示",
|
||||
"solid": "單色背景",
|
||||
"striped": "條紋背景",
|
||||
"side": "彩條"
|
||||
},
|
||||
"bot": "機器人",
|
||||
"edit_profile": "編輯個人資料"
|
||||
},
|
||||
"user_profile": {
|
||||
"timeline_title": "用戶時間線",
|
||||
"profile_does_not_exist": "抱歉,此個人資料不存在。",
|
||||
"profile_loading_error": "抱歉,載入個人資料時出錯。"
|
||||
},
|
||||
"user_reporting": {
|
||||
"title": "報告 {0}",
|
||||
"add_comment_description": "此報告會發送給你的實例管理員。你可以在下面提供更多詳細信息解釋報告的緣由:",
|
||||
"forward_to": "轉發 {0}",
|
||||
"submit": "提交",
|
||||
"generic_error": "當處理你的請求時,發生了一個錯誤。",
|
||||
"additional_comments": "其它評論",
|
||||
"forward_description": "這個賬號是從另外一個服務器。同時發送一個報告到那裡?"
|
||||
},
|
||||
"who_to_follow": {
|
||||
"more": "更多",
|
||||
"who_to_follow": "推薦關注"
|
||||
},
|
||||
"tool_tip": {
|
||||
"media_upload": "上傳多媒體",
|
||||
"repeat": "轉發",
|
||||
"favorite": "喜歡",
|
||||
"add_reaction": "添加互動",
|
||||
"reply": "回覆",
|
||||
"user_settings": "用戶設置",
|
||||
"accept_follow_request": "接受關注請求",
|
||||
"reject_follow_request": "拒絕關注請求",
|
||||
"bookmark": "書籤"
|
||||
},
|
||||
"upload": {
|
||||
"file_size_units": {
|
||||
"B": "B",
|
||||
"KiB": "KiB",
|
||||
"TiB": "TiB",
|
||||
"MiB": "MiB",
|
||||
"GiB": "GiB"
|
||||
},
|
||||
"error": {
|
||||
"base": "上傳失敗。",
|
||||
"file_too_big": "文件太大[{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]",
|
||||
"default": "稍後再試",
|
||||
"message": "上傳錯誤:{0}"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"people": "人",
|
||||
"hashtags": "標籤",
|
||||
"person_talking": "{count} 人正在討論",
|
||||
"people_talking": "{count} 人正在討論",
|
||||
"no_results": "沒有搜索結果"
|
||||
},
|
||||
"password_reset": {
|
||||
"forgot_password": "忘記密碼了?",
|
||||
"password_reset": "重置密碼",
|
||||
"instruction": "輸入你的電郵地址或者用戶名,我們將發送一個鏈接到你的郵箱,用於重置密碼。",
|
||||
"placeholder": "你的電郵地址或者用戶名",
|
||||
"check_email": "檢查你的郵箱,會有一個鏈接用於重置密碼。",
|
||||
"return_home": "回到首頁",
|
||||
"too_many_requests": "你觸發了嘗試的限制,請稍後再試。",
|
||||
"password_reset_disabled": "密碼重置已經被禁用。請聯繫你的實例管理員。",
|
||||
"password_reset_required": "您必須重置密碼才能登陸。",
|
||||
"password_reset_required_but_mailer_is_disabled": "您必須重置密碼,但是密碼重置被禁用了。請聯繫您所在實例的管理員。"
|
||||
},
|
||||
"announcements": {
|
||||
"post_error": "錯誤: {error}",
|
||||
"close_error": "關閉",
|
||||
"delete_action": "刪除",
|
||||
"start_time_prompt": "開始時間: ",
|
||||
"end_time_prompt": "結束時間: ",
|
||||
"all_day_prompt": "這是全日活動",
|
||||
"start_time_display": "{time} 開始",
|
||||
"end_time_display": "{time} 結束",
|
||||
"published_time_display": "{time} 發布",
|
||||
"edit_action": "編輯",
|
||||
"submit_edit_action": "送出",
|
||||
"cancel_edit_action": "取消",
|
||||
"inactive_message": "此公告無效",
|
||||
"page_header": "公告",
|
||||
"title": "公告",
|
||||
"mark_as_read_action": "標示為以閱讀",
|
||||
"post_placeholder": "在此輸入您的公告內容……",
|
||||
"post_form_header": "發布公告",
|
||||
"post_action": "發布"
|
||||
}
|
||||
}
|
|
@ -97,6 +97,7 @@ export const defaultState = {
|
|||
sidebarColumnWidth: '25rem',
|
||||
contentColumnWidth: '45rem',
|
||||
notifsColumnWidth: '25rem',
|
||||
emojiReactionsScale: 1.0,
|
||||
navbarColumnStretch: false,
|
||||
greentext: true,
|
||||
useAtIcon: undefined, // instance default
|
||||
|
@ -115,7 +116,8 @@ export const defaultState = {
|
|||
conversationTreeAdvanced: undefined, // instance default
|
||||
conversationOtherRepliesButton: undefined, // instance default
|
||||
conversationTreeFadeAncestors: undefined, // instance default
|
||||
maxDepthInThread: undefined // instance default
|
||||
maxDepthInThread: undefined, // instance default
|
||||
autocompleteSelect: undefined // instance default
|
||||
}
|
||||
|
||||
// caching the instance default properties
|
||||
|
@ -184,6 +186,7 @@ const config = {
|
|||
case 'sidebarColumnWidth':
|
||||
case 'contentColumnWidth':
|
||||
case 'notifsColumnWidth':
|
||||
case 'emojiReactionsScale':
|
||||
applyConfig(state)
|
||||
break
|
||||
case 'customTheme':
|
||||
|
|
|
@ -104,6 +104,7 @@ const defaultState = {
|
|||
conversationOtherRepliesButton: 'below',
|
||||
conversationTreeFadeAncestors: false,
|
||||
maxDepthInThread: 6,
|
||||
autocompleteSelect: false,
|
||||
|
||||
// Nasty stuff
|
||||
customEmoji: [],
|
||||
|
@ -122,6 +123,7 @@ const defaultState = {
|
|||
// Feature-set, apparently, not everything here is reported...
|
||||
shoutAvailable: false,
|
||||
pleromaChatMessagesAvailable: false,
|
||||
pleromaCustomEmojiReactionsAvailable: false,
|
||||
gopherAvailable: false,
|
||||
mediaProxyAvailable: false,
|
||||
suggestionsEnabled: false,
|
||||
|
|
|
@ -840,7 +840,7 @@ const postStatus = ({
|
|||
})
|
||||
if (pollOptions.some(option => option !== '')) {
|
||||
const normalizedPoll = {
|
||||
expires_in: poll.expiresIn,
|
||||
expires_in: parseInt(poll.expiresIn, 10),
|
||||
multiple: poll.multiple
|
||||
}
|
||||
Object.keys(normalizedPoll).forEach(key => {
|
||||
|
@ -897,7 +897,7 @@ const editStatus = ({
|
|||
|
||||
if (pollOptions.some(option => option !== '')) {
|
||||
const normalizedPoll = {
|
||||
expires_in: poll.expiresIn,
|
||||
expires_in: parseInt(poll.expiresIn, 10),
|
||||
multiple: poll.multiple
|
||||
}
|
||||
Object.keys(normalizedPoll).forEach(key => {
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
import { kebabCase } from 'lodash'
|
||||
|
||||
const propsToNative = props => Object.keys(props).reduce((acc, cur) => {
|
||||
acc[kebabCase(cur)] = props[cur]
|
||||
return acc
|
||||
}, {})
|
||||
|
||||
export { propsToNative }
|
|
@ -441,6 +441,7 @@ export const parseNotification = (data) => {
|
|||
: parseUser(data.target)
|
||||
output.from_profile = parseUser(data.account)
|
||||
output.emoji = data.emoji
|
||||
output.emoji_url = data.emoji_url
|
||||
if (data.report) {
|
||||
output.report = data.report
|
||||
output.report.content = data.report.content
|
||||
|
|
|
@ -21,8 +21,8 @@ export const applyTheme = (input) => {
|
|||
body.classList.remove('hidden')
|
||||
}
|
||||
|
||||
const configColumns = ({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth }) =>
|
||||
({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth })
|
||||
const configColumns = ({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth, emojiReactionsScale }) =>
|
||||
({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth, emojiReactionsScale })
|
||||
|
||||
const defaultConfigColumns = configColumns(defaultState)
|
||||
|
||||
|
|
|
@ -14,7 +14,8 @@ const generateInput = (value, padEmoji = true) => {
|
|||
padEmoji
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
$t: (msg) => msg
|
||||
},
|
||||
stubs: {
|
||||
FAIcon: true
|
||||
|
|
339
yarn.lock
339
yarn.lock
|
@ -9,6 +9,14 @@
|
|||
dependencies:
|
||||
"@jridgewell/trace-mapping" "^0.3.0"
|
||||
|
||||
"@ampproject/remapping@^2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
|
||||
integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
|
||||
dependencies:
|
||||
"@jridgewell/gen-mapping" "^0.1.0"
|
||||
"@jridgewell/trace-mapping" "^0.3.9"
|
||||
|
||||
"@babel/code-frame@7.0.0", "@babel/code-frame@^7.0.0":
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
|
||||
|
@ -45,25 +53,25 @@
|
|||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733"
|
||||
integrity sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==
|
||||
|
||||
"@babel/core@7.20.7":
|
||||
version "7.20.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.7.tgz#37072f951bd4d28315445f66e0ec9f6ae0c8c35f"
|
||||
integrity sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==
|
||||
"@babel/core@7.21.0":
|
||||
version "7.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13"
|
||||
integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==
|
||||
dependencies:
|
||||
"@ampproject/remapping" "^2.1.0"
|
||||
"@ampproject/remapping" "^2.2.0"
|
||||
"@babel/code-frame" "^7.18.6"
|
||||
"@babel/generator" "^7.20.7"
|
||||
"@babel/generator" "^7.21.0"
|
||||
"@babel/helper-compilation-targets" "^7.20.7"
|
||||
"@babel/helper-module-transforms" "^7.20.7"
|
||||
"@babel/helpers" "^7.20.7"
|
||||
"@babel/parser" "^7.20.7"
|
||||
"@babel/helper-module-transforms" "^7.21.0"
|
||||
"@babel/helpers" "^7.21.0"
|
||||
"@babel/parser" "^7.21.0"
|
||||
"@babel/template" "^7.20.7"
|
||||
"@babel/traverse" "^7.20.7"
|
||||
"@babel/types" "^7.20.7"
|
||||
"@babel/traverse" "^7.21.0"
|
||||
"@babel/types" "^7.21.0"
|
||||
convert-source-map "^1.7.0"
|
||||
debug "^4.1.0"
|
||||
gensync "^1.0.0-beta.2"
|
||||
json5 "^2.2.1"
|
||||
json5 "^2.2.2"
|
||||
semver "^6.3.0"
|
||||
|
||||
"@babel/core@^7.12.3":
|
||||
|
@ -150,6 +158,16 @@
|
|||
"@jridgewell/gen-mapping" "^0.3.2"
|
||||
jsesc "^2.5.1"
|
||||
|
||||
"@babel/generator@^7.21.0":
|
||||
version "7.21.1"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd"
|
||||
integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==
|
||||
dependencies:
|
||||
"@babel/types" "^7.21.0"
|
||||
"@jridgewell/gen-mapping" "^0.3.2"
|
||||
"@jridgewell/trace-mapping" "^0.3.17"
|
||||
jsesc "^2.5.1"
|
||||
|
||||
"@babel/helper-annotate-as-pure@^7.16.7":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862"
|
||||
|
@ -299,6 +317,14 @@
|
|||
"@babel/template" "^7.18.10"
|
||||
"@babel/types" "^7.19.0"
|
||||
|
||||
"@babel/helper-function-name@^7.21.0":
|
||||
version "7.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4"
|
||||
integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==
|
||||
dependencies:
|
||||
"@babel/template" "^7.20.7"
|
||||
"@babel/types" "^7.21.0"
|
||||
|
||||
"@babel/helper-get-function-arity@^7.16.7":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419"
|
||||
|
@ -410,6 +436,20 @@
|
|||
"@babel/traverse" "^7.20.7"
|
||||
"@babel/types" "^7.20.7"
|
||||
|
||||
"@babel/helper-module-transforms@^7.21.0":
|
||||
version "7.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz#89a8f86ad748870e3d024e470b2e8405e869db67"
|
||||
integrity sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==
|
||||
dependencies:
|
||||
"@babel/helper-environment-visitor" "^7.18.9"
|
||||
"@babel/helper-module-imports" "^7.18.6"
|
||||
"@babel/helper-simple-access" "^7.20.2"
|
||||
"@babel/helper-split-export-declaration" "^7.18.6"
|
||||
"@babel/helper-validator-identifier" "^7.19.1"
|
||||
"@babel/template" "^7.20.7"
|
||||
"@babel/traverse" "^7.21.0"
|
||||
"@babel/types" "^7.21.0"
|
||||
|
||||
"@babel/helper-optimise-call-expression@^7.18.6":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
|
||||
|
@ -591,14 +631,14 @@
|
|||
"@babel/traverse" "^7.18.9"
|
||||
"@babel/types" "^7.18.9"
|
||||
|
||||
"@babel/helpers@^7.20.7":
|
||||
version "7.20.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce"
|
||||
integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==
|
||||
"@babel/helpers@^7.21.0":
|
||||
version "7.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e"
|
||||
integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==
|
||||
dependencies:
|
||||
"@babel/template" "^7.20.7"
|
||||
"@babel/traverse" "^7.20.7"
|
||||
"@babel/types" "^7.20.7"
|
||||
"@babel/traverse" "^7.21.0"
|
||||
"@babel/types" "^7.21.0"
|
||||
|
||||
"@babel/highlight@^7.0.0":
|
||||
version "7.0.0"
|
||||
|
@ -666,6 +706,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b"
|
||||
integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==
|
||||
|
||||
"@babel/parser@^7.21.0":
|
||||
version "7.21.1"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.1.tgz#a8f81ee2fe872af23faea4b17a08fcc869de7bcc"
|
||||
integrity sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==
|
||||
|
||||
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
|
||||
|
@ -1138,13 +1183,13 @@
|
|||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.18.6"
|
||||
|
||||
"@babel/plugin-transform-runtime@7.19.6":
|
||||
version "7.19.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz#9d2a9dbf4e12644d6f46e5e75bfbf02b5d6e9194"
|
||||
integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==
|
||||
"@babel/plugin-transform-runtime@7.21.0":
|
||||
version "7.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz#2a884f29556d0a68cd3d152dcc9e6c71dfb6eee8"
|
||||
integrity sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.18.6"
|
||||
"@babel/helper-plugin-utils" "^7.19.0"
|
||||
"@babel/helper-plugin-utils" "^7.20.2"
|
||||
babel-plugin-polyfill-corejs2 "^0.3.3"
|
||||
babel-plugin-polyfill-corejs3 "^0.6.0"
|
||||
babel-plugin-polyfill-regenerator "^0.4.1"
|
||||
|
@ -1293,10 +1338,10 @@
|
|||
"@babel/types" "^7.4.4"
|
||||
esutils "^2.0.2"
|
||||
|
||||
"@babel/register@7.18.9":
|
||||
version "7.18.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.18.9.tgz#1888b24bc28d5cc41c412feb015e9ff6b96e439c"
|
||||
integrity sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==
|
||||
"@babel/register@7.21.0":
|
||||
version "7.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.21.0.tgz#c97bf56c2472e063774f31d344c592ebdcefa132"
|
||||
integrity sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==
|
||||
dependencies:
|
||||
clone-deep "^4.0.1"
|
||||
find-cache-dir "^2.0.0"
|
||||
|
@ -1304,10 +1349,10 @@
|
|||
pirates "^4.0.5"
|
||||
source-map-support "^0.5.16"
|
||||
|
||||
"@babel/runtime@7.20.7":
|
||||
version "7.20.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd"
|
||||
integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==
|
||||
"@babel/runtime@7.21.0":
|
||||
version "7.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673"
|
||||
integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==
|
||||
dependencies:
|
||||
regenerator-runtime "^0.13.11"
|
||||
|
||||
|
@ -1450,6 +1495,22 @@
|
|||
debug "^4.1.0"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/traverse@^7.21.0":
|
||||
version "7.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.0.tgz#0e1807abd5db98e6a19c204b80ed1e3f5bca0edc"
|
||||
integrity sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.18.6"
|
||||
"@babel/generator" "^7.21.0"
|
||||
"@babel/helper-environment-visitor" "^7.18.9"
|
||||
"@babel/helper-function-name" "^7.21.0"
|
||||
"@babel/helper-hoist-variables" "^7.18.6"
|
||||
"@babel/helper-split-export-declaration" "^7.18.6"
|
||||
"@babel/parser" "^7.21.0"
|
||||
"@babel/types" "^7.21.0"
|
||||
debug "^4.1.0"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49":
|
||||
version "7.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e"
|
||||
|
@ -1509,6 +1570,15 @@
|
|||
"@babel/helper-validator-identifier" "^7.19.1"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@^7.21.0":
|
||||
version "7.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.0.tgz#1da00d89c2f18b226c9207d96edbeb79316a1819"
|
||||
integrity sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.19.4"
|
||||
"@babel/helper-validator-identifier" "^7.19.1"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@^7.7.4":
|
||||
version "7.7.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193"
|
||||
|
@ -1548,36 +1618,36 @@
|
|||
minimatch "^3.1.2"
|
||||
strip-json-comments "^3.1.1"
|
||||
|
||||
"@fortawesome/fontawesome-common-types@6.2.1":
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.1.tgz#411e02a820744d3f7e0d8d9df9d82b471beaa073"
|
||||
integrity sha512-Sz07mnQrTekFWLz5BMjOzHl/+NooTdW8F8kDQxjWwbpOJcnoSg4vUDng8d/WR1wOxM0O+CY9Zw0nR054riNYtQ==
|
||||
"@fortawesome/fontawesome-common-types@6.3.0":
|
||||
version "6.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz#51f734e64511dbc3674cd347044d02f4dd26e86b"
|
||||
integrity sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg==
|
||||
|
||||
"@fortawesome/fontawesome-svg-core@6.2.1":
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.2.1.tgz#e87e905e444b5e7b715af09b64d27b53d4c8f9d9"
|
||||
integrity sha512-HELwwbCz6C1XEcjzyT1Jugmz2NNklMrSPjZOWMlc+ZsHIVk+XOvOXLGGQtFBwSyqfJDNgRq4xBCwWOaZ/d9DEA==
|
||||
"@fortawesome/fontawesome-svg-core@6.3.0":
|
||||
version "6.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz#b6a17d48d231ac1fad93e43fca7271676bf316cf"
|
||||
integrity sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw==
|
||||
dependencies:
|
||||
"@fortawesome/fontawesome-common-types" "6.2.1"
|
||||
"@fortawesome/fontawesome-common-types" "6.3.0"
|
||||
|
||||
"@fortawesome/free-regular-svg-icons@6.2.1":
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.2.1.tgz#650e56d937755a8341f2eef258ecb6f95458820f"
|
||||
integrity sha512-wiqcNDNom75x+pe88FclpKz7aOSqS2lOivZeicMV5KRwOAeypxEYWAK/0v+7r+LrEY30+qzh8r2XDaEHvoLsMA==
|
||||
"@fortawesome/free-regular-svg-icons@6.3.0":
|
||||
version "6.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.3.0.tgz#286f87f777e6c96af59151e86647c81083029ee2"
|
||||
integrity sha512-cZnwiVHZ51SVzWHOaNCIA+u9wevZjCuAGSvSYpNlm6A4H4Vhwh8481Bf/5rwheIC3fFKlgXxLKaw8Xeroz8Ntg==
|
||||
dependencies:
|
||||
"@fortawesome/fontawesome-common-types" "6.2.1"
|
||||
"@fortawesome/fontawesome-common-types" "6.3.0"
|
||||
|
||||
"@fortawesome/free-solid-svg-icons@6.2.1":
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.1.tgz#2290ea5adcf1537cbd0c43de6feb38af02141d27"
|
||||
integrity sha512-oKuqrP5jbfEPJWTij4sM+/RvgX+RMFwx3QZCZcK9PrBDgxC35zuc7AOFsyMjMd/PIFPeB2JxyqDr5zs/DZFPPw==
|
||||
"@fortawesome/free-solid-svg-icons@6.3.0":
|
||||
version "6.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz#d3bd33ae18bb15fdfc3ca136e2fea05f32768a65"
|
||||
integrity sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA==
|
||||
dependencies:
|
||||
"@fortawesome/fontawesome-common-types" "6.2.1"
|
||||
"@fortawesome/fontawesome-common-types" "6.3.0"
|
||||
|
||||
"@fortawesome/vue-fontawesome@3.0.2":
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.2.tgz#1b2ec546caab790c38d3dcb38407485a70703dd2"
|
||||
integrity sha512-xHVtVY8ASUeEvgcA/7vULUesENhD+pi/EirRHdMBqooHlXBqK+yrV6d8tUye1m5UKQKVgYAHMhUBfOnoiwvc8Q==
|
||||
"@fortawesome/vue-fontawesome@3.0.3":
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.3.tgz#633e2998d11f7d4ed41f0d5ea461a22ec9b9d034"
|
||||
integrity sha512-KCPHi9QemVXGMrfuwf3nNnNo129resAIQWut9QTAMXmXqL2ErABC6ohd2yY5Ipq0CLWNbKHk8TMdTXL/Zf3ZhA==
|
||||
|
||||
"@humanwhocodes/config-array@^0.11.8":
|
||||
version "0.11.8"
|
||||
|
@ -1695,6 +1765,14 @@
|
|||
"@types/yargs" "^17.0.8"
|
||||
chalk "^4.0.0"
|
||||
|
||||
"@jridgewell/gen-mapping@^0.1.0":
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
|
||||
integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
|
||||
dependencies:
|
||||
"@jridgewell/set-array" "^1.0.0"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
|
||||
|
@ -1704,12 +1782,17 @@
|
|||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
"@jridgewell/trace-mapping" "^0.3.9"
|
||||
|
||||
"@jridgewell/resolve-uri@3.1.0":
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
|
||||
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
|
||||
|
||||
"@jridgewell/resolve-uri@^3.0.3":
|
||||
version "3.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c"
|
||||
integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==
|
||||
|
||||
"@jridgewell/set-array@^1.0.1":
|
||||
"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
|
||||
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
|
||||
|
@ -1722,6 +1805,11 @@
|
|||
"@jridgewell/gen-mapping" "^0.3.0"
|
||||
"@jridgewell/trace-mapping" "^0.3.9"
|
||||
|
||||
"@jridgewell/sourcemap-codec@1.4.14":
|
||||
version "1.4.14"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
|
||||
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
|
||||
|
||||
"@jridgewell/sourcemap-codec@^1.4.10":
|
||||
version "1.4.11"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec"
|
||||
|
@ -1743,6 +1831,14 @@
|
|||
"@jridgewell/resolve-uri" "^3.0.3"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.17":
|
||||
version "0.3.17"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
|
||||
integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
|
||||
dependencies:
|
||||
"@jridgewell/resolve-uri" "3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "1.4.14"
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.9":
|
||||
version "0.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed"
|
||||
|
@ -2172,10 +2268,12 @@
|
|||
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.45.tgz#a3fffa7489eafff38d984e23d0236e230c818bc2"
|
||||
integrity sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==
|
||||
|
||||
"@vue/test-utils@2.2.7":
|
||||
version "2.2.7"
|
||||
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.2.7.tgz#0d93d635031a4cca2de70b825aef3fe20a41e702"
|
||||
integrity sha512-BMuoruUFTEqhLoOgsMcgNVMiByYbfHCKGr2C4CPdGtz/affUtDVX5zr1RnPuq0tYSiaqq+Enw5voUpG6JY8Q7g==
|
||||
"@vue/test-utils@2.2.8":
|
||||
version "2.2.8"
|
||||
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.2.8.tgz#2002a2b2c90309f66c5c175b735621438832a610"
|
||||
integrity sha512-/R8DKzp41Ip/RqTt1jvOVi5gxby3EwNWiYHNYsG9FAjEvt0gzDvYN55lCKzX7IdnI5zVIOo5tHtts0SLT+JrWw==
|
||||
dependencies:
|
||||
js-beautify "1.14.6"
|
||||
|
||||
"@vuelidate/core@2.0.0":
|
||||
version "2.0.0"
|
||||
|
@ -2325,6 +2423,11 @@ abab@^2.0.5, abab@^2.0.6:
|
|||
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
|
||||
integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
|
||||
|
||||
abbrev@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
||||
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
|
||||
|
||||
accepts@~1.3.4:
|
||||
version "1.3.7"
|
||||
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
|
||||
|
@ -2603,10 +2706,10 @@ axios@^1.1.3:
|
|||
form-data "^4.0.0"
|
||||
proxy-from-env "^1.1.0"
|
||||
|
||||
babel-loader@9.1.0:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.0.tgz#839e9ae88aea930864ef9ec0f356dfca96ecf238"
|
||||
integrity sha512-Antt61KJPinUMwHwIIz9T5zfMgevnfZkEVWYDWlG888fgdvRRGD0JTuf/fFozQnfT+uq64sk1bmdHDy/mOEWnA==
|
||||
babel-loader@9.1.2:
|
||||
version "9.1.2"
|
||||
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.2.tgz#a16a080de52d08854ee14570469905a5fc00d39c"
|
||||
integrity sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==
|
||||
dependencies:
|
||||
find-cache-dir "^3.3.2"
|
||||
schema-utils "^4.0.0"
|
||||
|
@ -3135,7 +3238,7 @@ combined-stream@^1.0.8:
|
|||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
commander@^2.20.0:
|
||||
commander@^2.19.0, commander@^2.20.0:
|
||||
version "2.20.3"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||
|
@ -3168,6 +3271,14 @@ concat-map@0.0.1:
|
|||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
|
||||
config-chain@^1.1.13:
|
||||
version "1.1.13"
|
||||
resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
|
||||
integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
|
||||
dependencies:
|
||||
ini "^1.3.4"
|
||||
proto-list "~1.2.1"
|
||||
|
||||
connect-history-api-fallback@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8"
|
||||
|
@ -3731,6 +3842,16 @@ dotenv@10.0.0:
|
|||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
|
||||
integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
|
||||
|
||||
editorconfig@^0.15.3:
|
||||
version "0.15.3"
|
||||
resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5"
|
||||
integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==
|
||||
dependencies:
|
||||
commander "^2.19.0"
|
||||
lru-cache "^4.1.5"
|
||||
semver "^5.6.0"
|
||||
sigmund "^1.0.1"
|
||||
|
||||
ee-first@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
|
@ -4123,10 +4244,10 @@ eslint-webpack-plugin@3.2.0:
|
|||
normalize-path "^3.0.0"
|
||||
schema-utils "^4.0.0"
|
||||
|
||||
eslint@8.32.0:
|
||||
version "8.32.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.32.0.tgz#d9690056bb6f1a302bd991e7090f5b68fbaea861"
|
||||
integrity sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==
|
||||
eslint@8.33.0:
|
||||
version "8.33.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.33.0.tgz#02f110f32998cb598c6461f24f4d306e41ca33d7"
|
||||
integrity sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==
|
||||
dependencies:
|
||||
"@eslint/eslintrc" "^1.4.1"
|
||||
"@humanwhocodes/config-array" "^0.11.8"
|
||||
|
@ -4661,6 +4782,17 @@ glob@^7.2.3:
|
|||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^8.0.3:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
|
||||
integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^5.0.1"
|
||||
once "^1.3.0"
|
||||
|
||||
global-modules@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
|
||||
|
@ -5077,6 +5209,11 @@ inherits@2.0.4, inherits@^2.0.4:
|
|||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||
|
||||
ini@^1.3.4:
|
||||
version "1.3.8"
|
||||
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
|
||||
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
|
||||
|
||||
ini@^1.3.5:
|
||||
version "1.3.5"
|
||||
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
|
||||
|
@ -5475,6 +5612,16 @@ jest-worker@^29.1.2:
|
|||
merge-stream "^2.0.0"
|
||||
supports-color "^8.0.0"
|
||||
|
||||
js-beautify@1.14.6:
|
||||
version "1.14.6"
|
||||
resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.6.tgz#b23ca5d74a462c282c7711bb51150bcc97f2b507"
|
||||
integrity sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==
|
||||
dependencies:
|
||||
config-chain "^1.1.13"
|
||||
editorconfig "^0.15.3"
|
||||
glob "^8.0.3"
|
||||
nopt "^6.0.0"
|
||||
|
||||
js-cookie@3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414"
|
||||
|
@ -5588,6 +5735,11 @@ json5@^2.2.0, json5@^2.2.1:
|
|||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
|
||||
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
|
||||
|
||||
json5@^2.2.2:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
||||
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
||||
|
||||
jsonc-eslint-parser@^1.0.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz#8cbe99f6f5199acbc5a823c4c0b6135411027fa6"
|
||||
|
@ -6110,6 +6262,14 @@ lower-case@^2.0.2:
|
|||
dependencies:
|
||||
tslib "^2.0.3"
|
||||
|
||||
lru-cache@^4.1.5:
|
||||
version "4.1.5"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
|
||||
integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
|
||||
dependencies:
|
||||
pseudomap "^1.0.2"
|
||||
yallist "^2.1.2"
|
||||
|
||||
lru-cache@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
|
||||
|
@ -6478,10 +6638,10 @@ nightwatch-axe-verbose@^2.1.0:
|
|||
dependencies:
|
||||
axe-core "^4.6.1"
|
||||
|
||||
nightwatch@2.6.10:
|
||||
version "2.6.10"
|
||||
resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-2.6.10.tgz#eda82a6a0ff0002fdbeb9d160938d3c53a92dd88"
|
||||
integrity sha512-nn5HVEtETLQ8qgu7APAZKg/yXTBkMflwdmzhfywP8mZUfKk0/dRQbeDqY2RawHr/sYsFmZV6eMirlJaaQoQ7Yw==
|
||||
nightwatch@2.6.11:
|
||||
version "2.6.11"
|
||||
resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-2.6.11.tgz#ba36d13855b003b488b74f64b4ffd8d13a5d1807"
|
||||
integrity sha512-HLi9gTgcxqlDWfgZ/jT1QP8g3SzjBMZlFNdiDm065dopXR95jvyIpjA0Js8MsWRYzSTkRLGZvPVk28dwGaGXcQ==
|
||||
dependencies:
|
||||
"@nightwatch/chai" "5.0.2"
|
||||
"@nightwatch/html-reporter-template" "0.1.4"
|
||||
|
@ -6541,6 +6701,13 @@ node-releases@^2.0.5, node-releases@^2.0.6:
|
|||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
|
||||
integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
|
||||
|
||||
nopt@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d"
|
||||
integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==
|
||||
dependencies:
|
||||
abbrev "^1.0.0"
|
||||
|
||||
normalize-package-data@^2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
|
||||
|
@ -7293,6 +7460,11 @@ process-nextick-args@~2.0.0:
|
|||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
|
||||
|
||||
proto-list@~1.2.1:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
|
||||
integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
|
||||
|
||||
proxy-addr@~2.0.7:
|
||||
version "2.0.7"
|
||||
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
|
||||
|
@ -7310,6 +7482,11 @@ prr@~1.0.1:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
|
||||
|
||||
pseudomap@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
|
||||
integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==
|
||||
|
||||
psl@^1.1.33:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
|
||||
|
@ -7322,10 +7499,10 @@ pump@^3.0.0:
|
|||
end-of-stream "^1.1.0"
|
||||
once "^1.3.1"
|
||||
|
||||
punycode.js@2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.1.0.tgz#f3937f7a914152c2dc17e9c280a2cf86a26b7cda"
|
||||
integrity sha512-LvGUJ9QHiESLM4yn8JuJWicstRcJKRmP46psQw1HvCZ9puLFwYMKJWvkAkP3OHBVzNzZGx/D53EYJrIaKd9gZQ==
|
||||
punycode.js@2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.0.tgz#6aaa35964ffecc676545995ecb65980bd8302f61"
|
||||
integrity sha512-AM9kSplQQCRlRkRZzx2EcqW2AQ9HuYoUzzl/tjJDNJEUeYHFGJ/rGE0a9cE1b41iuFz94pAwcEekC137Dd9Eyw==
|
||||
|
||||
punycode@1.3.2:
|
||||
version "1.3.2"
|
||||
|
@ -7881,6 +8058,11 @@ side-channel@^1.0.4:
|
|||
get-intrinsic "^1.0.2"
|
||||
object-inspect "^1.9.0"
|
||||
|
||||
sigmund@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
|
||||
integrity sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==
|
||||
|
||||
signal-exit@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||
|
@ -9043,6 +9225,11 @@ y18n@^5.0.5:
|
|||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
|
||||
integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
|
||||
|
||||
yallist@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
|
||||
integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==
|
||||
|
||||
yallist@^3.0.2:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
|
||||
|
|
読み込み中…
新しいイシューから参照