Merge remote-tracking branch 'origin/develop' into themes3
This commit is contained in:
commit
54e3a99bc7
1
changelog.d/group-actor.add
Normal file
1
changelog.d/group-actor.add
Normal file
@ -0,0 +1 @@
|
|||||||
|
Support group actors
|
1
changelog.d/hide-custom-emojis-in-picker.add
Normal file
1
changelog.d/hide-custom-emojis-in-picker.add
Normal file
@ -0,0 +1 @@
|
|||||||
|
Allow hiding custom emojis in picker.
|
1
changelog.d/public-favorites.add
Normal file
1
changelog.d/public-favorites.add
Normal file
@ -0,0 +1 @@
|
|||||||
|
Display public favorites on user profiles
|
1
changelog.d/registration-notice.add
Normal file
1
changelog.d/registration-notice.add
Normal file
@ -0,0 +1 @@
|
|||||||
|
Show a dedicated registration notice page when further action is required after registering
|
@ -261,6 +261,7 @@ const getNodeInfo = async ({ store }) => {
|
|||||||
store.dispatch('setInstanceOption', { name: 'pollLimits', value: metadata.pollLimits })
|
store.dispatch('setInstanceOption', { name: 'pollLimits', value: metadata.pollLimits })
|
||||||
store.dispatch('setInstanceOption', { name: 'mailerEnabled', value: metadata.mailerEnabled })
|
store.dispatch('setInstanceOption', { name: 'mailerEnabled', value: metadata.mailerEnabled })
|
||||||
store.dispatch('setInstanceOption', { name: 'quotingAvailable', value: features.includes('quote_posting') })
|
store.dispatch('setInstanceOption', { name: 'quotingAvailable', value: features.includes('quote_posting') })
|
||||||
|
store.dispatch('setInstanceOption', { name: 'groupActorAvailable', value: features.includes('pleroma:group_actors') })
|
||||||
|
|
||||||
const uploadLimits = metadata.uploadLimits
|
const uploadLimits = metadata.uploadLimits
|
||||||
store.dispatch('setInstanceOption', { name: 'uploadlimit', value: parseInt(uploadLimits.general) })
|
store.dispatch('setInstanceOption', { name: 'uploadlimit', value: parseInt(uploadLimits.general) })
|
||||||
|
@ -114,6 +114,7 @@ const EmojiPicker = {
|
|||||||
groupsScrolledClass: 'scrolled-top',
|
groupsScrolledClass: 'scrolled-top',
|
||||||
keepOpen: false,
|
keepOpen: false,
|
||||||
customEmojiTimeout: null,
|
customEmojiTimeout: null,
|
||||||
|
hideCustomEmojiInPicker: false,
|
||||||
// Lazy-load only after the first time `showing` becomes true.
|
// Lazy-load only after the first time `showing` becomes true.
|
||||||
contentLoaded: false,
|
contentLoaded: false,
|
||||||
groupRefs: {},
|
groupRefs: {},
|
||||||
@ -286,7 +287,7 @@ const EmojiPicker = {
|
|||||||
return 0
|
return 0
|
||||||
},
|
},
|
||||||
allCustomGroups () {
|
allCustomGroups () {
|
||||||
if (this.hideCustomEmoji) {
|
if (this.hideCustomEmoji || this.hideCustomEmojiInPicker) {
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
const emojis = this.$store.getters.groupedCustomEmojis
|
const emojis = this.$store.getters.groupedCustomEmojis
|
||||||
|
@ -30,11 +30,16 @@ $emoji-picker-emoji-size: 32px;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.keep-open,
|
.keep-open,
|
||||||
.too-many-emoji {
|
.too-many-emoji,
|
||||||
|
.hide-custom-emoji {
|
||||||
padding: 7px;
|
padding: 7px;
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hide-custom-emoji {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.too-many-emoji {
|
.too-many-emoji {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
@ -142,6 +142,17 @@
|
|||||||
{{ $t('emoji.keep_open') }}
|
{{ $t('emoji.keep_open') }}
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="!hideCustomEmoji"
|
||||||
|
class="hide-custom-emoji"
|
||||||
|
>
|
||||||
|
<Checkbox
|
||||||
|
v-model="hideCustomEmojiInPicker"
|
||||||
|
@change="onShowing"
|
||||||
|
>
|
||||||
|
{{ $t('emoji.hide_custom_emoji') }}
|
||||||
|
</Checkbox>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="showingStickers"
|
v-if="showingStickers"
|
||||||
|
@ -83,6 +83,8 @@ const registration = {
|
|||||||
signedIn: (state) => !!state.users.currentUser,
|
signedIn: (state) => !!state.users.currentUser,
|
||||||
isPending: (state) => state.users.signUpPending,
|
isPending: (state) => state.users.signUpPending,
|
||||||
serverValidationErrors: (state) => state.users.signUpErrors,
|
serverValidationErrors: (state) => state.users.signUpErrors,
|
||||||
|
signUpNotice: (state) => state.users.signUpNotice,
|
||||||
|
hasSignUpNotice: (state) => !!state.users.signUpNotice.message,
|
||||||
termsOfService: (state) => state.instance.tos,
|
termsOfService: (state) => state.instance.tos,
|
||||||
accountActivationRequired: (state) => state.instance.accountActivationRequired,
|
accountActivationRequired: (state) => state.instance.accountActivationRequired,
|
||||||
accountApprovalRequired: (state) => state.instance.accountApprovalRequired,
|
accountApprovalRequired: (state) => state.instance.accountApprovalRequired,
|
||||||
@ -107,8 +109,12 @@ const registration = {
|
|||||||
|
|
||||||
if (!this.v$.$invalid) {
|
if (!this.v$.$invalid) {
|
||||||
try {
|
try {
|
||||||
await this.signUp(this.user)
|
const status = await this.signUp(this.user)
|
||||||
|
if (status === 'ok') {
|
||||||
this.$router.push({ name: 'friends' })
|
this.$router.push({ name: 'friends' })
|
||||||
|
}
|
||||||
|
// If status is not 'ok' (i.e. it needs further actions to be done
|
||||||
|
// before you can login), display sign up notice, do not switch anywhere
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn('Registration failed: ', error)
|
console.warn('Registration failed: ', error)
|
||||||
this.setCaptcha()
|
this.setCaptcha()
|
||||||
|
@ -3,7 +3,10 @@
|
|||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
{{ $t('registration.registration') }}
|
{{ $t('registration.registration') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div
|
||||||
|
v-if="!hasSignUpNotice"
|
||||||
|
class="panel-body"
|
||||||
|
>
|
||||||
<form
|
<form
|
||||||
class="registration-form"
|
class="registration-form"
|
||||||
@submit.prevent="submit(user)"
|
@submit.prevent="submit(user)"
|
||||||
@ -307,6 +310,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<p class="registration-notice">
|
||||||
|
{{ signUpNotice.message }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -404,6 +412,10 @@ $validations-cRed: #f04124;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.registration-notice {
|
||||||
|
margin: 0.6em;
|
||||||
|
}
|
||||||
|
|
||||||
@media all and (max-width: 800px) {
|
@media all and (max-width: 800px) {
|
||||||
.registration-form .container {
|
.registration-form .container {
|
||||||
flex-direction: column-reverse;
|
flex-direction: column-reverse;
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<BooleanSetting path="hideBotIndication">
|
<BooleanSetting path="hideBotIndication">
|
||||||
{{ $t('settings.hide_bot_indication') }}
|
{{ $t('settings.hide_actor_type_indication') }}
|
||||||
</BooleanSetting>
|
</BooleanSetting>
|
||||||
</li>
|
</li>
|
||||||
<ChoiceSetting
|
<ChoiceSetting
|
||||||
|
@ -9,6 +9,7 @@ import suggestor from 'src/components/emoji_input/suggestor.js'
|
|||||||
import Autosuggest from 'src/components/autosuggest/autosuggest.vue'
|
import Autosuggest from 'src/components/autosuggest/autosuggest.vue'
|
||||||
import Checkbox from 'src/components/checkbox/checkbox.vue'
|
import Checkbox from 'src/components/checkbox/checkbox.vue'
|
||||||
import InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue'
|
import InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue'
|
||||||
|
import Select from 'src/components/select/select.vue'
|
||||||
import BooleanSetting from '../helpers/boolean_setting.vue'
|
import BooleanSetting from '../helpers/boolean_setting.vue'
|
||||||
import SharedComputedObject from '../helpers/shared_computed_object.js'
|
import SharedComputedObject from '../helpers/shared_computed_object.js'
|
||||||
import localeService from 'src/services/locale/locale.service.js'
|
import localeService from 'src/services/locale/locale.service.js'
|
||||||
@ -39,6 +40,7 @@ const ProfileTab = {
|
|||||||
showRole: this.$store.state.users.currentUser.show_role,
|
showRole: this.$store.state.users.currentUser.show_role,
|
||||||
role: this.$store.state.users.currentUser.role,
|
role: this.$store.state.users.currentUser.role,
|
||||||
bot: this.$store.state.users.currentUser.bot,
|
bot: this.$store.state.users.currentUser.bot,
|
||||||
|
actorType: this.$store.state.users.currentUser.actor_type,
|
||||||
pickAvatarBtnVisible: true,
|
pickAvatarBtnVisible: true,
|
||||||
bannerUploading: false,
|
bannerUploading: false,
|
||||||
backgroundUploading: false,
|
backgroundUploading: false,
|
||||||
@ -57,7 +59,8 @@ const ProfileTab = {
|
|||||||
ProgressButton,
|
ProgressButton,
|
||||||
Checkbox,
|
Checkbox,
|
||||||
BooleanSetting,
|
BooleanSetting,
|
||||||
InterfaceLanguageSwitcher
|
InterfaceLanguageSwitcher,
|
||||||
|
Select
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
user () {
|
user () {
|
||||||
@ -116,6 +119,12 @@ const ProfileTab = {
|
|||||||
bannerImgSrc () {
|
bannerImgSrc () {
|
||||||
const src = this.$store.state.users.currentUser.cover_photo
|
const src = this.$store.state.users.currentUser.cover_photo
|
||||||
return (!src) ? this.defaultBanner : src
|
return (!src) ? this.defaultBanner : src
|
||||||
|
},
|
||||||
|
groupActorAvailable () {
|
||||||
|
return this.$store.state.instance.groupActorAvailable
|
||||||
|
},
|
||||||
|
availableActorTypes () {
|
||||||
|
return this.groupActorAvailable ? ['Person', 'Service', 'Group'] : ['Person', 'Service']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -127,7 +136,7 @@ const ProfileTab = {
|
|||||||
/* eslint-disable camelcase */
|
/* eslint-disable camelcase */
|
||||||
display_name: this.newName,
|
display_name: this.newName,
|
||||||
fields_attributes: this.newFields.filter(el => el != null),
|
fields_attributes: this.newFields.filter(el => el != null),
|
||||||
bot: this.bot,
|
actor_type: this.actorType,
|
||||||
show_role: this.showRole,
|
show_role: this.showRole,
|
||||||
birthday: this.newBirthday || '',
|
birthday: this.newBirthday || '',
|
||||||
show_birthday: this.showBirthday
|
show_birthday: this.showBirthday
|
||||||
|
@ -111,10 +111,24 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<p>
|
<p>
|
||||||
<Checkbox v-model="bot">
|
<label>
|
||||||
{{ $t('settings.bot') }}
|
{{ $t('settings.actor_type') }}
|
||||||
</Checkbox>
|
<Select v-model="actorType">
|
||||||
|
<option
|
||||||
|
v-for="option in availableActorTypes"
|
||||||
|
:key="option"
|
||||||
|
:value="option"
|
||||||
|
>
|
||||||
|
{{ $t('settings.actor_type_' + option) }}
|
||||||
|
</option>
|
||||||
|
</Select>
|
||||||
|
</label>
|
||||||
</p>
|
</p>
|
||||||
|
<div v-if="groupActorAvailable">
|
||||||
|
<small>
|
||||||
|
{{ $t('settings.actor_type_description') }}
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
<p>
|
<p>
|
||||||
<interface-language-switcher
|
<interface-language-switcher
|
||||||
:prompt-text="$t('settings.email_language')"
|
:prompt-text="$t('settings.email_language')"
|
||||||
|
@ -232,17 +232,11 @@ const Status = {
|
|||||||
muteWordHits () {
|
muteWordHits () {
|
||||||
return muteWordHits(this.status, this.muteWords)
|
return muteWordHits(this.status, this.muteWords)
|
||||||
},
|
},
|
||||||
rtBotStatus () {
|
|
||||||
return this.statusoid.user.bot
|
|
||||||
},
|
|
||||||
botStatus () {
|
botStatus () {
|
||||||
return this.status.user.bot
|
return this.status.user.actor_type === 'Service'
|
||||||
},
|
},
|
||||||
botIndicator () {
|
showActorTypeIndicator () {
|
||||||
return this.botStatus && !this.hideBotIndication
|
return !this.hideBotIndication
|
||||||
},
|
|
||||||
rtBotIndicator () {
|
|
||||||
return this.rtBotStatus && !this.hideBotIndication
|
|
||||||
},
|
},
|
||||||
mentionsLine () {
|
mentionsLine () {
|
||||||
if (!this.headTailLinks) return []
|
if (!this.headTailLinks) return []
|
||||||
|
@ -79,7 +79,7 @@
|
|||||||
<UserAvatar
|
<UserAvatar
|
||||||
v-if="retweet"
|
v-if="retweet"
|
||||||
class="left-side repeater-avatar"
|
class="left-side repeater-avatar"
|
||||||
:bot="rtBotIndicator"
|
:show-actor-type-indicator="showActorTypeIndicator"
|
||||||
:better-shadow="betterShadow"
|
:better-shadow="betterShadow"
|
||||||
:user="statusoid.user"
|
:user="statusoid.user"
|
||||||
/>
|
/>
|
||||||
@ -133,7 +133,7 @@
|
|||||||
>
|
>
|
||||||
<UserAvatar
|
<UserAvatar
|
||||||
class="post-avatar"
|
class="post-avatar"
|
||||||
:bot="botIndicator"
|
:show-actor-type-indicator="showActorTypeIndicator"
|
||||||
:compact="compact"
|
:compact="compact"
|
||||||
:better-shadow="betterShadow"
|
:better-shadow="betterShadow"
|
||||||
:user="status.user"
|
:user="status.user"
|
||||||
@ -559,7 +559,7 @@
|
|||||||
<UserAvatar
|
<UserAvatar
|
||||||
class="post-avatar"
|
class="post-avatar"
|
||||||
:compact="compact"
|
:compact="compact"
|
||||||
:bot="botIndicator"
|
:show-actor-type-indicator="showActorTypeIndicator"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="right-side">
|
<div class="right-side">
|
||||||
|
@ -3,11 +3,13 @@ import StillImage from '../still-image/still-image.vue'
|
|||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
faRobot
|
faRobot,
|
||||||
|
faPeopleGroup
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faRobot
|
faRobot,
|
||||||
|
faPeopleGroup
|
||||||
)
|
)
|
||||||
|
|
||||||
const UserAvatar = {
|
const UserAvatar = {
|
||||||
@ -15,7 +17,7 @@ const UserAvatar = {
|
|||||||
'user',
|
'user',
|
||||||
'betterShadow',
|
'betterShadow',
|
||||||
'compact',
|
'compact',
|
||||||
'bot'
|
'showActorTypeIndicator'
|
||||||
],
|
],
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
@ -18,9 +18,14 @@
|
|||||||
:class="{ '-compact': compact }"
|
:class="{ '-compact': compact }"
|
||||||
/>
|
/>
|
||||||
<FAIcon
|
<FAIcon
|
||||||
v-if="bot"
|
v-if="showActorTypeIndicator && user?.actor_type === 'Service'"
|
||||||
icon="robot"
|
icon="robot"
|
||||||
class="bot-indicator"
|
class="actor-type-indicator"
|
||||||
|
/>
|
||||||
|
<FAIcon
|
||||||
|
v-if="showActorTypeIndicator && user?.actor_type === 'Group'"
|
||||||
|
icon="people-group"
|
||||||
|
class="actor-type-indicator"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
@ -75,7 +80,7 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bot-indicator {
|
.actor-type-indicator {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
|
@ -124,11 +124,17 @@
|
|||||||
{{ $t(`general.role.${visibleRole}`) }}
|
{{ $t(`general.role.${visibleRole}`) }}
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span
|
||||||
v-if="user.bot"
|
v-if="user.actor_type === 'Service'"
|
||||||
class="alert neutral user-role"
|
class="alert neutral user-role"
|
||||||
>
|
>
|
||||||
{{ $t('user_card.bot') }}
|
{{ $t('user_card.bot') }}
|
||||||
</span>
|
</span>
|
||||||
|
<span
|
||||||
|
v-if="user.actor_type === 'Group'"
|
||||||
|
class="alert user-role"
|
||||||
|
>
|
||||||
|
{{ $t('user_card.group') }}
|
||||||
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<span v-if="user.locked">
|
<span v-if="user.locked">
|
||||||
<FAIcon
|
<FAIcon
|
||||||
|
@ -80,6 +80,9 @@ const UserProfile = {
|
|||||||
followersTabVisible () {
|
followersTabVisible () {
|
||||||
return this.isUs || !this.user.hide_followers
|
return this.isUs || !this.user.hide_followers
|
||||||
},
|
},
|
||||||
|
favoritesTabVisible () {
|
||||||
|
return this.isUs || !this.user.hide_favorites
|
||||||
|
},
|
||||||
formattedBirthday () {
|
formattedBirthday () {
|
||||||
const browserLocale = localeService.internalToBrowserLocale(this.$i18n.locale)
|
const browserLocale = localeService.internalToBrowserLocale(this.$i18n.locale)
|
||||||
return this.user.birthday && new Date(Date.parse(this.user.birthday)).toLocaleDateString(browserLocale, { timeZone: 'UTC', day: 'numeric', month: 'long', year: 'numeric' })
|
return this.user.birthday && new Date(Date.parse(this.user.birthday)).toLocaleDateString(browserLocale, { timeZone: 'UTC', day: 'numeric', month: 'long', year: 'numeric' })
|
||||||
@ -103,6 +106,8 @@ const UserProfile = {
|
|||||||
startFetchingTimeline('user', userId)
|
startFetchingTimeline('user', userId)
|
||||||
startFetchingTimeline('media', userId)
|
startFetchingTimeline('media', userId)
|
||||||
if (this.isUs) {
|
if (this.isUs) {
|
||||||
|
startFetchingTimeline('favorites')
|
||||||
|
} else if (!this.user.hide_favorites) {
|
||||||
startFetchingTimeline('favorites', userId)
|
startFetchingTimeline('favorites', userId)
|
||||||
}
|
}
|
||||||
// Fetch all pinned statuses immediately
|
// Fetch all pinned statuses immediately
|
||||||
|
@ -109,7 +109,7 @@
|
|||||||
:footer-slipgate="footerRef"
|
:footer-slipgate="footerRef"
|
||||||
/>
|
/>
|
||||||
<Timeline
|
<Timeline
|
||||||
v-if="isUs"
|
v-if="favoritesTabVisible"
|
||||||
key="favorites"
|
key="favorites"
|
||||||
:label="$t('user_card.favorites')"
|
:label="$t('user_card.favorites')"
|
||||||
:disabled="!favorites.visibleStatuses.length"
|
:disabled="!favorites.visibleStatuses.length"
|
||||||
@ -117,6 +117,7 @@
|
|||||||
:title="$t('user_card.favorites')"
|
:title="$t('user_card.favorites')"
|
||||||
timeline-name="favorites"
|
timeline-name="favorites"
|
||||||
:timeline="favorites"
|
:timeline="favorites"
|
||||||
|
:user-id="userId"
|
||||||
:in-profile="true"
|
:in-profile="true"
|
||||||
:footer-slipgate="footerRef"
|
:footer-slipgate="footerRef"
|
||||||
/>
|
/>
|
||||||
|
@ -237,6 +237,7 @@
|
|||||||
"search_emoji": "Search for an emoji",
|
"search_emoji": "Search for an emoji",
|
||||||
"add_emoji": "Insert emoji",
|
"add_emoji": "Insert emoji",
|
||||||
"custom": "Custom emoji",
|
"custom": "Custom emoji",
|
||||||
|
"hide_custom_emoji": "Hide custom emojis",
|
||||||
"unpacked": "Unpacked emoji",
|
"unpacked": "Unpacked emoji",
|
||||||
"unicode": "Unicode emoji",
|
"unicode": "Unicode emoji",
|
||||||
"unicode_groups": {
|
"unicode_groups": {
|
||||||
@ -359,6 +360,11 @@
|
|||||||
"remove_language": "Remove",
|
"remove_language": "Remove",
|
||||||
"primary_language": "Primary language:",
|
"primary_language": "Primary language:",
|
||||||
"fallback_language": "Fallback language {index}:",
|
"fallback_language": "Fallback language {index}:",
|
||||||
|
"actor_type": "This account is:",
|
||||||
|
"actor_type_description": "Marking your account as a group will make it automatically repeat statuses that mention it.",
|
||||||
|
"actor_type_Person": "a normal user",
|
||||||
|
"actor_type_Service": "a bot",
|
||||||
|
"actor_type_Group": "a group",
|
||||||
"app_name": "App name",
|
"app_name": "App name",
|
||||||
"expert_mode": "Show advanced",
|
"expert_mode": "Show advanced",
|
||||||
"save": "Save changes",
|
"save": "Save changes",
|
||||||
@ -423,7 +429,6 @@
|
|||||||
"added_backup": "Added a new backup.",
|
"added_backup": "Added a new backup.",
|
||||||
"add_backup_error": "Error adding a new backup: {error}",
|
"add_backup_error": "Error adding a new backup: {error}",
|
||||||
"blocks_tab": "Blocks",
|
"blocks_tab": "Blocks",
|
||||||
"bot": "This is a bot account",
|
|
||||||
"btnRadius": "Buttons",
|
"btnRadius": "Buttons",
|
||||||
"cBlue": "Blue (Reply, follow)",
|
"cBlue": "Blue (Reply, follow)",
|
||||||
"cGreen": "Green (Retweet)",
|
"cGreen": "Green (Retweet)",
|
||||||
@ -495,7 +500,7 @@
|
|||||||
"hide_media_previews": "Hide media previews",
|
"hide_media_previews": "Hide media previews",
|
||||||
"hide_muted_posts": "Hide posts of muted users",
|
"hide_muted_posts": "Hide posts of muted users",
|
||||||
"mute_bot_posts": "Mute bot posts",
|
"mute_bot_posts": "Mute bot posts",
|
||||||
"hide_bot_indication": "Hide bot indication in posts",
|
"hide_actor_type_indication": "Hide actor type (bots, groups, etc.) indication in posts",
|
||||||
"hide_scrobbles": "Hide scrobbles",
|
"hide_scrobbles": "Hide scrobbles",
|
||||||
"hide_all_muted_posts": "Hide muted posts",
|
"hide_all_muted_posts": "Hide muted posts",
|
||||||
"max_thumbnails": "Maximum amount of thumbnails per post (empty = no limit)",
|
"max_thumbnails": "Maximum amount of thumbnails per post (empty = no limit)",
|
||||||
@ -1127,6 +1132,7 @@
|
|||||||
"hide_repeats": "Hide repeats",
|
"hide_repeats": "Hide repeats",
|
||||||
"show_repeats": "Show repeats",
|
"show_repeats": "Show repeats",
|
||||||
"bot": "Bot",
|
"bot": "Bot",
|
||||||
|
"group": "Group",
|
||||||
"birthday": "Born {birthday}",
|
"birthday": "Born {birthday}",
|
||||||
"admin_menu": {
|
"admin_menu": {
|
||||||
"moderation": "Moderation",
|
"moderation": "Moderation",
|
||||||
|
@ -163,7 +163,8 @@
|
|||||||
"search_close": "けんさくバーをとじる",
|
"search_close": "けんさくバーをとじる",
|
||||||
"edit_nav_mobile": "ナビゲーションバーのせっていをかえる",
|
"edit_nav_mobile": "ナビゲーションバーのせっていをかえる",
|
||||||
"mobile_sidebar": "モバイルのサイドバーをきりかえる",
|
"mobile_sidebar": "モバイルのサイドバーをきりかえる",
|
||||||
"edit_finish": "へんしゅうをおわりにする"
|
"edit_finish": "へんしゅうをおわりにする",
|
||||||
|
"mobile_notifications_mark_as_seen": "ぜんぶ みたことにする"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"broken_favorite": "ステータスがみつかりません。さがしています…",
|
"broken_favorite": "ステータスがみつかりません。さがしています…",
|
||||||
@ -179,7 +180,13 @@
|
|||||||
"migrated_to": "インスタンスを、ひっこしました",
|
"migrated_to": "インスタンスを、ひっこしました",
|
||||||
"reacted_with": "{0} でリアクションしました",
|
"reacted_with": "{0} でリアクションしました",
|
||||||
"poll_ended": "とうひょうが、おわりました",
|
"poll_ended": "とうひょうが、おわりました",
|
||||||
"submitted_report": "つうほうしました"
|
"submitted_report": "つうほうしました",
|
||||||
|
"unread_announcements": "まだ よんでいない おしらせが {num}こ あります",
|
||||||
|
"configuration_tip_settings": "せってい",
|
||||||
|
"configuration_tip_dismiss": "つぎは ひょうじしない",
|
||||||
|
"unread_chats": "よんでいない チャットが {num}こ あります",
|
||||||
|
"unread_follow_requests": "フォローリクエストが {num}こ あります",
|
||||||
|
"configuration_tip": "ここに ひょうじする ものを {theSettings}で へんこうできます。 {dismiss}"
|
||||||
},
|
},
|
||||||
"polls": {
|
"polls": {
|
||||||
"add_poll": "とうひょうをはじめる",
|
"add_poll": "とうひょうをはじめる",
|
||||||
@ -218,7 +225,8 @@
|
|||||||
"symbols": "きごう",
|
"symbols": "きごう",
|
||||||
"travel-and-places": "りょこう・ばしょ"
|
"travel-and-places": "りょこう・ばしょ"
|
||||||
},
|
},
|
||||||
"regional_indicator": "ばしょをしめすきごう {letter}"
|
"regional_indicator": "ばしょをしめすきごう {letter}",
|
||||||
|
"unpacked": "アンパックされた えもじ"
|
||||||
},
|
},
|
||||||
"stickers": {
|
"stickers": {
|
||||||
"add_sticker": "ステッカーをふやす"
|
"add_sticker": "ステッカーをふやす"
|
||||||
@ -269,7 +277,9 @@
|
|||||||
"preview": "プレビュー",
|
"preview": "プレビュー",
|
||||||
"preview_empty": "なにもありません",
|
"preview_empty": "なにもありません",
|
||||||
"empty_status_error": "とうこうないようを、にゅうりょくしてください",
|
"empty_status_error": "とうこうないようを、にゅうりょくしてください",
|
||||||
"scope_notice_dismiss": "このつうちをとじる"
|
"scope_notice_dismiss": "このつうちをとじる",
|
||||||
|
"reply_option": "この ステータスに へんしんする",
|
||||||
|
"quote_option": "この ステータスを いんようする"
|
||||||
},
|
},
|
||||||
"registration": {
|
"registration": {
|
||||||
"bio": "プロフィール",
|
"bio": "プロフィール",
|
||||||
@ -324,7 +334,7 @@
|
|||||||
"warning_of_generate_new_codes": "あたらしいリカバリーコードをつくったら、ふるいコードはつかえなくなります。",
|
"warning_of_generate_new_codes": "あたらしいリカバリーコードをつくったら、ふるいコードはつかえなくなります。",
|
||||||
"recovery_codes": "リカバリーコード。",
|
"recovery_codes": "リカバリーコード。",
|
||||||
"waiting_a_recovery_codes": "バックアップコードをうけとっています…",
|
"waiting_a_recovery_codes": "バックアップコードをうけとっています…",
|
||||||
"recovery_codes_warning": "コードをかきうつすか、ひとにみられないところにセーブしてください。そうでなければ、あなたはこのコードをふたたびみることはできません。もしあなたが、2FAアプリのアクセスをうしなって、なおかつ、リカバリーコードもおもいだせないならば、あなたはあなたのアカウントから、しめだされます。",
|
"recovery_codes_warning": "コードを かきうつすか、 ほかのひとが みれないところに ほぞんしてください。 そうしないと、 あなたは このコードを にどと みることができません。 もし あなたが 2FAアプリに アクセスできなくなり、 リカバリーコードも おもいだせないなら、 あなたは あなたの アカウントに はいれなくなります。",
|
||||||
"authentication_methods": "にんしょうメソッド",
|
"authentication_methods": "にんしょうメソッド",
|
||||||
"scan": {
|
"scan": {
|
||||||
"title": "スキャン",
|
"title": "スキャン",
|
||||||
@ -697,7 +707,7 @@
|
|||||||
"import_mutes_from_a_csv_file": "CSVファイルからミュートをインポートする",
|
"import_mutes_from_a_csv_file": "CSVファイルからミュートをインポートする",
|
||||||
"reset_avatar": "アバターをリセットする",
|
"reset_avatar": "アバターをリセットする",
|
||||||
"remove_language": "とりのぞく",
|
"remove_language": "とりのぞく",
|
||||||
"primary_language": "いちばんわかることば:",
|
"primary_language": "さいしょに つかう ことば:",
|
||||||
"add_language": "よびとしてつかうことばを、ついかする",
|
"add_language": "よびとしてつかうことばを、ついかする",
|
||||||
"fallback_language": "よびとして つかう ことば {index}:",
|
"fallback_language": "よびとして つかう ことば {index}:",
|
||||||
"lists_navigation": "ナビゲーションにリストをひょうじする",
|
"lists_navigation": "ナビゲーションにリストをひょうじする",
|
||||||
@ -797,7 +807,11 @@
|
|||||||
"virtual_scrolling": "タイムラインのレンダリングをよくする",
|
"virtual_scrolling": "タイムラインのレンダリングをよくする",
|
||||||
"use_at_icon": "{'@'} きごうを、もじのかわりに、アイコンでひょうじする",
|
"use_at_icon": "{'@'} きごうを、もじのかわりに、アイコンでひょうじする",
|
||||||
"mention_link_display_short": "いつも、みじかいなまえにする (れい: {'@'}hoge)",
|
"mention_link_display_short": "いつも、みじかいなまえにする (れい: {'@'}hoge)",
|
||||||
"mention_link_display": "メンションのリンクをひょうじするけいしき"
|
"mention_link_display": "メンションのリンクをひょうじするけいしき",
|
||||||
|
"url": "URL",
|
||||||
|
"preview": "プレビュー",
|
||||||
|
"emoji_reactions_scale": "リアクションを なんばいの おおきさで ひょうじするか",
|
||||||
|
"autocomplete_select_first": "じどうほかんが あれば、 さいしょの ものを じどうで えらぶ"
|
||||||
},
|
},
|
||||||
"time": {
|
"time": {
|
||||||
"day": "{0}日",
|
"day": "{0}日",
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -109,7 +109,8 @@
|
|||||||
"mobile_notifications_close": "알림 닫기",
|
"mobile_notifications_close": "알림 닫기",
|
||||||
"mobile_sidebar": "모바일 사이드바 토글",
|
"mobile_sidebar": "모바일 사이드바 토글",
|
||||||
"announcements": "공지사항",
|
"announcements": "공지사항",
|
||||||
"search_close": "검색 바 닫기"
|
"search_close": "검색 바 닫기",
|
||||||
|
"mobile_notifications_mark_as_seen": "모두 읽음으로 표시"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"broken_favorite": "알 수 없는 게시물입니다, 검색합니다…",
|
"broken_favorite": "알 수 없는 게시물입니다, 검색합니다…",
|
||||||
@ -125,7 +126,13 @@
|
|||||||
"error": "알림 불러오기 실패: {0}",
|
"error": "알림 불러오기 실패: {0}",
|
||||||
"follow_request": "팔로우 요청",
|
"follow_request": "팔로우 요청",
|
||||||
"submitted_report": "신고 내용을 전송함",
|
"submitted_report": "신고 내용을 전송함",
|
||||||
"poll_ended": "투표가 끝남"
|
"poll_ended": "투표가 끝남",
|
||||||
|
"unread_follow_requests": "{num}개의 새 팔로우 요청 | {num}개의 새 팔로우 요청",
|
||||||
|
"configuration_tip": "{theSettings}에서 어떻게 보이는지 바꿀 수 있습니다. {dismiss}",
|
||||||
|
"configuration_tip_settings": "설정",
|
||||||
|
"configuration_tip_dismiss": "다시 보지 않기",
|
||||||
|
"unread_announcements": "{num}개의 읽지 않은 공지사항 | {num}개의 읽지 않은 공지사항",
|
||||||
|
"unread_chats": "{num}개의 읽지 않은 채팅 | {num}개의 읽지 않은 채팅"
|
||||||
},
|
},
|
||||||
"post_status": {
|
"post_status": {
|
||||||
"new_status": "새 게시물 게시",
|
"new_status": "새 게시물 게시",
|
||||||
@ -165,7 +172,9 @@
|
|||||||
"post": "게시",
|
"post": "게시",
|
||||||
"direct_warning_to_first_only": "맨 앞에 멘션한 사용자들에게만 보여집니다.",
|
"direct_warning_to_first_only": "맨 앞에 멘션한 사용자들에게만 보여집니다.",
|
||||||
"content_type_selection": "게시물 형태",
|
"content_type_selection": "게시물 형태",
|
||||||
"scope_notice_dismiss": "알림 닫기"
|
"scope_notice_dismiss": "알림 닫기",
|
||||||
|
"reply_option": "이 게시물에 답글",
|
||||||
|
"quote_option": "이 게시물을 인용"
|
||||||
},
|
},
|
||||||
"registration": {
|
"registration": {
|
||||||
"bio": "소개",
|
"bio": "소개",
|
||||||
|
@ -943,7 +943,7 @@
|
|||||||
"sandbox": "强制帖子为只有关注者可看",
|
"sandbox": "强制帖子为只有关注者可看",
|
||||||
"disable_remote_subscription": "禁止从远程实例关注用户",
|
"disable_remote_subscription": "禁止从远程实例关注用户",
|
||||||
"disable_any_subscription": "完全禁止关注用户",
|
"disable_any_subscription": "完全禁止关注用户",
|
||||||
"quarantine": "从联合实例中禁止用户帖子",
|
"quarantine": "不许帖子传入别站",
|
||||||
"delete_user": "删除用户",
|
"delete_user": "删除用户",
|
||||||
"delete_user_data_and_deactivate_confirmation": "这将永久删除该账户的数据并停用该账户。你完全确定吗?"
|
"delete_user_data_and_deactivate_confirmation": "这将永久删除该账户的数据并停用该账户。你完全确定吗?"
|
||||||
},
|
},
|
||||||
|
@ -137,6 +137,7 @@ const defaultState = {
|
|||||||
suggestionsEnabled: false,
|
suggestionsEnabled: false,
|
||||||
suggestionsWeb: '',
|
suggestionsWeb: '',
|
||||||
quotingAvailable: false,
|
quotingAvailable: false,
|
||||||
|
groupActorAvailable: false,
|
||||||
|
|
||||||
// Html stuff
|
// Html stuff
|
||||||
instanceSpecificPanelContent: '',
|
instanceSpecificPanelContent: '',
|
||||||
|
@ -250,6 +250,7 @@ export const mutations = {
|
|||||||
signUpPending (state) {
|
signUpPending (state) {
|
||||||
state.signUpPending = true
|
state.signUpPending = true
|
||||||
state.signUpErrors = []
|
state.signUpErrors = []
|
||||||
|
state.signUpNotice = {}
|
||||||
},
|
},
|
||||||
signUpSuccess (state) {
|
signUpSuccess (state) {
|
||||||
state.signUpPending = false
|
state.signUpPending = false
|
||||||
@ -257,6 +258,12 @@ export const mutations = {
|
|||||||
signUpFailure (state, errors) {
|
signUpFailure (state, errors) {
|
||||||
state.signUpPending = false
|
state.signUpPending = false
|
||||||
state.signUpErrors = errors
|
state.signUpErrors = errors
|
||||||
|
state.signUpNotice = {}
|
||||||
|
},
|
||||||
|
signUpNotice (state, notice) {
|
||||||
|
state.signUpPending = false
|
||||||
|
state.signUpErrors = []
|
||||||
|
state.signUpNotice = notice
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -287,6 +294,7 @@ export const defaultState = {
|
|||||||
usersByNameObject: {},
|
usersByNameObject: {},
|
||||||
signUpPending: false,
|
signUpPending: false,
|
||||||
signUpErrors: [],
|
signUpErrors: [],
|
||||||
|
signUpNotice: {},
|
||||||
relationships: {}
|
relationships: {}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -524,9 +532,16 @@ const users = {
|
|||||||
const data = await rootState.api.backendInteractor.register(
|
const data = await rootState.api.backendInteractor.register(
|
||||||
{ params: { ...userInfo } }
|
{ params: { ...userInfo } }
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (data.access_token) {
|
||||||
store.commit('signUpSuccess')
|
store.commit('signUpSuccess')
|
||||||
store.commit('setToken', data.access_token)
|
store.commit('setToken', data.access_token)
|
||||||
store.dispatch('loginUser', data.access_token)
|
store.dispatch('loginUser', data.access_token)
|
||||||
|
return 'ok'
|
||||||
|
} else { // Request succeeded, but user cannot login yet.
|
||||||
|
store.commit('signUpNotice', data)
|
||||||
|
return 'request_sent'
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
const errors = e.message
|
const errors = e.message
|
||||||
store.commit('signUpFailure', errors)
|
store.commit('signUpFailure', errors)
|
||||||
|
@ -108,6 +108,7 @@ const PLEROMA_POST_ANNOUNCEMENT_URL = '/api/v1/pleroma/admin/announcements'
|
|||||||
const PLEROMA_EDIT_ANNOUNCEMENT_URL = id => `/api/v1/pleroma/admin/announcements/${id}`
|
const PLEROMA_EDIT_ANNOUNCEMENT_URL = id => `/api/v1/pleroma/admin/announcements/${id}`
|
||||||
const PLEROMA_DELETE_ANNOUNCEMENT_URL = id => `/api/v1/pleroma/admin/announcements/${id}`
|
const PLEROMA_DELETE_ANNOUNCEMENT_URL = id => `/api/v1/pleroma/admin/announcements/${id}`
|
||||||
const PLEROMA_SCROBBLES_URL = id => `/api/v1/pleroma/accounts/${id}/scrobbles`
|
const PLEROMA_SCROBBLES_URL = id => `/api/v1/pleroma/accounts/${id}/scrobbles`
|
||||||
|
const PLEROMA_USER_FAVORITES_TIMELINE_URL = id => `/api/v1/pleroma/accounts/${id}/favourites`
|
||||||
|
|
||||||
const PLEROMA_ADMIN_CONFIG_URL = '/api/pleroma/admin/config'
|
const PLEROMA_ADMIN_CONFIG_URL = '/api/pleroma/admin/config'
|
||||||
const PLEROMA_ADMIN_DESCRIPTIONS_URL = '/api/pleroma/admin/config/descriptions'
|
const PLEROMA_ADMIN_DESCRIPTIONS_URL = '/api/pleroma/admin/config/descriptions'
|
||||||
@ -690,6 +691,7 @@ const fetchTimeline = ({
|
|||||||
media: MASTODON_USER_TIMELINE_URL,
|
media: MASTODON_USER_TIMELINE_URL,
|
||||||
list: MASTODON_LIST_TIMELINE_URL,
|
list: MASTODON_LIST_TIMELINE_URL,
|
||||||
favorites: MASTODON_USER_FAVORITES_TIMELINE_URL,
|
favorites: MASTODON_USER_FAVORITES_TIMELINE_URL,
|
||||||
|
publicFavorites: PLEROMA_USER_FAVORITES_TIMELINE_URL,
|
||||||
tag: MASTODON_TAG_TIMELINE_URL,
|
tag: MASTODON_TAG_TIMELINE_URL,
|
||||||
bookmarks: MASTODON_BOOKMARK_TIMELINE_URL
|
bookmarks: MASTODON_BOOKMARK_TIMELINE_URL
|
||||||
}
|
}
|
||||||
@ -698,6 +700,10 @@ const fetchTimeline = ({
|
|||||||
|
|
||||||
let url = timelineUrls[timeline]
|
let url = timelineUrls[timeline]
|
||||||
|
|
||||||
|
if (timeline === 'favorites' && userId) {
|
||||||
|
url = timelineUrls.publicFavorites(userId)
|
||||||
|
}
|
||||||
|
|
||||||
if (timeline === 'user' || timeline === 'media') {
|
if (timeline === 'user' || timeline === 'media') {
|
||||||
url = url(userId)
|
url = url(userId)
|
||||||
}
|
}
|
||||||
|
@ -107,6 +107,7 @@ export const parseUser = (data) => {
|
|||||||
|
|
||||||
output.allow_following_move = data.pleroma.allow_following_move
|
output.allow_following_move = data.pleroma.allow_following_move
|
||||||
|
|
||||||
|
output.hide_favorites = data.pleroma.hide_favorites
|
||||||
output.hide_follows = data.pleroma.hide_follows
|
output.hide_follows = data.pleroma.hide_follows
|
||||||
output.hide_followers = data.pleroma.hide_followers
|
output.hide_followers = data.pleroma.hide_followers
|
||||||
output.hide_follows_count = data.pleroma.hide_follows_count
|
output.hide_follows_count = data.pleroma.hide_follows_count
|
||||||
@ -165,6 +166,7 @@ export const parseUser = (data) => {
|
|||||||
output.show_role = data.source.pleroma.show_role
|
output.show_role = data.source.pleroma.show_role
|
||||||
output.discoverable = data.source.pleroma.discoverable
|
output.discoverable = data.source.pleroma.discoverable
|
||||||
output.show_birthday = data.pleroma.show_birthday
|
output.show_birthday = data.pleroma.show_birthday
|
||||||
|
output.actor_type = data.source.pleroma.actor_type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user