Merge remote-tracking branch 'origin/develop' into themes3
This commit is contained in:
commit
54e3a99bc7
29 changed files with 793 additions and 252 deletions
|
|
@ -114,6 +114,7 @@ const EmojiPicker = {
|
|||
groupsScrolledClass: 'scrolled-top',
|
||||
keepOpen: false,
|
||||
customEmojiTimeout: null,
|
||||
hideCustomEmojiInPicker: false,
|
||||
// Lazy-load only after the first time `showing` becomes true.
|
||||
contentLoaded: false,
|
||||
groupRefs: {},
|
||||
|
|
@ -286,7 +287,7 @@ const EmojiPicker = {
|
|||
return 0
|
||||
},
|
||||
allCustomGroups () {
|
||||
if (this.hideCustomEmoji) {
|
||||
if (this.hideCustomEmoji || this.hideCustomEmojiInPicker) {
|
||||
return {}
|
||||
}
|
||||
const emojis = this.$store.getters.groupedCustomEmojis
|
||||
|
|
|
|||
|
|
@ -30,11 +30,16 @@ $emoji-picker-emoji-size: 32px;
|
|||
}
|
||||
|
||||
.keep-open,
|
||||
.too-many-emoji {
|
||||
.too-many-emoji,
|
||||
.hide-custom-emoji {
|
||||
padding: 7px;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
.hide-custom-emoji {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.too-many-emoji {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
|
|
|||
|
|
@ -142,6 +142,17 @@
|
|||
{{ $t('emoji.keep_open') }}
|
||||
</Checkbox>
|
||||
</div>
|
||||
<div
|
||||
v-if="!hideCustomEmoji"
|
||||
class="hide-custom-emoji"
|
||||
>
|
||||
<Checkbox
|
||||
v-model="hideCustomEmojiInPicker"
|
||||
@change="onShowing"
|
||||
>
|
||||
{{ $t('emoji.hide_custom_emoji') }}
|
||||
</Checkbox>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="showingStickers"
|
||||
|
|
|
|||
|
|
@ -83,6 +83,8 @@ const registration = {
|
|||
signedIn: (state) => !!state.users.currentUser,
|
||||
isPending: (state) => state.users.signUpPending,
|
||||
serverValidationErrors: (state) => state.users.signUpErrors,
|
||||
signUpNotice: (state) => state.users.signUpNotice,
|
||||
hasSignUpNotice: (state) => !!state.users.signUpNotice.message,
|
||||
termsOfService: (state) => state.instance.tos,
|
||||
accountActivationRequired: (state) => state.instance.accountActivationRequired,
|
||||
accountApprovalRequired: (state) => state.instance.accountApprovalRequired,
|
||||
|
|
@ -107,8 +109,12 @@ const registration = {
|
|||
|
||||
if (!this.v$.$invalid) {
|
||||
try {
|
||||
await this.signUp(this.user)
|
||||
this.$router.push({ name: 'friends' })
|
||||
const status = await this.signUp(this.user)
|
||||
if (status === 'ok') {
|
||||
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) {
|
||||
console.warn('Registration failed: ', error)
|
||||
this.setCaptcha()
|
||||
|
|
|
|||
|
|
@ -3,7 +3,10 @@
|
|||
<div class="panel-heading">
|
||||
{{ $t('registration.registration') }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div
|
||||
v-if="!hasSignUpNotice"
|
||||
class="panel-body"
|
||||
>
|
||||
<form
|
||||
class="registration-form"
|
||||
@submit.prevent="submit(user)"
|
||||
|
|
@ -307,6 +310,11 @@
|
|||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div v-else>
|
||||
<p class="registration-notice">
|
||||
{{ signUpNotice.message }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
|
@ -404,6 +412,10 @@ $validations-cRed: #f04124;
|
|||
}
|
||||
}
|
||||
|
||||
.registration-notice {
|
||||
margin: 0.6em;
|
||||
}
|
||||
|
||||
@media all and (max-width: 800px) {
|
||||
.registration-form .container {
|
||||
flex-direction: column-reverse;
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
</li>
|
||||
<li>
|
||||
<BooleanSetting path="hideBotIndication">
|
||||
{{ $t('settings.hide_bot_indication') }}
|
||||
{{ $t('settings.hide_actor_type_indication') }}
|
||||
</BooleanSetting>
|
||||
</li>
|
||||
<ChoiceSetting
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import suggestor from 'src/components/emoji_input/suggestor.js'
|
|||
import Autosuggest from 'src/components/autosuggest/autosuggest.vue'
|
||||
import Checkbox from 'src/components/checkbox/checkbox.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 SharedComputedObject from '../helpers/shared_computed_object.js'
|
||||
import localeService from 'src/services/locale/locale.service.js'
|
||||
|
|
@ -39,6 +40,7 @@ const ProfileTab = {
|
|||
showRole: this.$store.state.users.currentUser.show_role,
|
||||
role: this.$store.state.users.currentUser.role,
|
||||
bot: this.$store.state.users.currentUser.bot,
|
||||
actorType: this.$store.state.users.currentUser.actor_type,
|
||||
pickAvatarBtnVisible: true,
|
||||
bannerUploading: false,
|
||||
backgroundUploading: false,
|
||||
|
|
@ -57,7 +59,8 @@ const ProfileTab = {
|
|||
ProgressButton,
|
||||
Checkbox,
|
||||
BooleanSetting,
|
||||
InterfaceLanguageSwitcher
|
||||
InterfaceLanguageSwitcher,
|
||||
Select
|
||||
},
|
||||
computed: {
|
||||
user () {
|
||||
|
|
@ -116,6 +119,12 @@ const ProfileTab = {
|
|||
bannerImgSrc () {
|
||||
const src = this.$store.state.users.currentUser.cover_photo
|
||||
return (!src) ? this.defaultBanner : src
|
||||
},
|
||||
groupActorAvailable () {
|
||||
return this.$store.state.instance.groupActorAvailable
|
||||
},
|
||||
availableActorTypes () {
|
||||
return this.groupActorAvailable ? ['Person', 'Service', 'Group'] : ['Person', 'Service']
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
|
@ -127,7 +136,7 @@ const ProfileTab = {
|
|||
/* eslint-disable camelcase */
|
||||
display_name: this.newName,
|
||||
fields_attributes: this.newFields.filter(el => el != null),
|
||||
bot: this.bot,
|
||||
actor_type: this.actorType,
|
||||
show_role: this.showRole,
|
||||
birthday: this.newBirthday || '',
|
||||
show_birthday: this.showBirthday
|
||||
|
|
|
|||
|
|
@ -111,10 +111,24 @@
|
|||
</button>
|
||||
</div>
|
||||
<p>
|
||||
<Checkbox v-model="bot">
|
||||
{{ $t('settings.bot') }}
|
||||
</Checkbox>
|
||||
<label>
|
||||
{{ $t('settings.actor_type') }}
|
||||
<Select v-model="actorType">
|
||||
<option
|
||||
v-for="option in availableActorTypes"
|
||||
:key="option"
|
||||
:value="option"
|
||||
>
|
||||
{{ $t('settings.actor_type_' + option) }}
|
||||
</option>
|
||||
</Select>
|
||||
</label>
|
||||
</p>
|
||||
<div v-if="groupActorAvailable">
|
||||
<small>
|
||||
{{ $t('settings.actor_type_description') }}
|
||||
</small>
|
||||
</div>
|
||||
<p>
|
||||
<interface-language-switcher
|
||||
:prompt-text="$t('settings.email_language')"
|
||||
|
|
|
|||
|
|
@ -232,17 +232,11 @@ const Status = {
|
|||
muteWordHits () {
|
||||
return muteWordHits(this.status, this.muteWords)
|
||||
},
|
||||
rtBotStatus () {
|
||||
return this.statusoid.user.bot
|
||||
},
|
||||
botStatus () {
|
||||
return this.status.user.bot
|
||||
return this.status.user.actor_type === 'Service'
|
||||
},
|
||||
botIndicator () {
|
||||
return this.botStatus && !this.hideBotIndication
|
||||
},
|
||||
rtBotIndicator () {
|
||||
return this.rtBotStatus && !this.hideBotIndication
|
||||
showActorTypeIndicator () {
|
||||
return !this.hideBotIndication
|
||||
},
|
||||
mentionsLine () {
|
||||
if (!this.headTailLinks) return []
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@
|
|||
<UserAvatar
|
||||
v-if="retweet"
|
||||
class="left-side repeater-avatar"
|
||||
:bot="rtBotIndicator"
|
||||
:show-actor-type-indicator="showActorTypeIndicator"
|
||||
:better-shadow="betterShadow"
|
||||
:user="statusoid.user"
|
||||
/>
|
||||
|
|
@ -133,7 +133,7 @@
|
|||
>
|
||||
<UserAvatar
|
||||
class="post-avatar"
|
||||
:bot="botIndicator"
|
||||
:show-actor-type-indicator="showActorTypeIndicator"
|
||||
:compact="compact"
|
||||
:better-shadow="betterShadow"
|
||||
:user="status.user"
|
||||
|
|
@ -559,7 +559,7 @@
|
|||
<UserAvatar
|
||||
class="post-avatar"
|
||||
:compact="compact"
|
||||
:bot="botIndicator"
|
||||
:show-actor-type-indicator="showActorTypeIndicator"
|
||||
/>
|
||||
</div>
|
||||
<div class="right-side">
|
||||
|
|
|
|||
|
|
@ -3,11 +3,13 @@ import StillImage from '../still-image/still-image.vue'
|
|||
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||
|
||||
import {
|
||||
faRobot
|
||||
faRobot,
|
||||
faPeopleGroup
|
||||
} from '@fortawesome/free-solid-svg-icons'
|
||||
|
||||
library.add(
|
||||
faRobot
|
||||
faRobot,
|
||||
faPeopleGroup
|
||||
)
|
||||
|
||||
const UserAvatar = {
|
||||
|
|
@ -15,7 +17,7 @@ const UserAvatar = {
|
|||
'user',
|
||||
'betterShadow',
|
||||
'compact',
|
||||
'bot'
|
||||
'showActorTypeIndicator'
|
||||
],
|
||||
data () {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -18,9 +18,14 @@
|
|||
:class="{ '-compact': compact }"
|
||||
/>
|
||||
<FAIcon
|
||||
v-if="bot"
|
||||
v-if="showActorTypeIndicator && user?.actor_type === 'Service'"
|
||||
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>
|
||||
</template>
|
||||
|
|
@ -75,7 +80,7 @@
|
|||
height: 100%;
|
||||
}
|
||||
|
||||
.bot-indicator {
|
||||
.actor-type-indicator {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
|
|
|
|||
|
|
@ -124,11 +124,17 @@
|
|||
{{ $t(`general.role.${visibleRole}`) }}
|
||||
</span>
|
||||
<span
|
||||
v-if="user.bot"
|
||||
v-if="user.actor_type === 'Service'"
|
||||
class="alert neutral user-role"
|
||||
>
|
||||
{{ $t('user_card.bot') }}
|
||||
</span>
|
||||
<span
|
||||
v-if="user.actor_type === 'Group'"
|
||||
class="alert user-role"
|
||||
>
|
||||
{{ $t('user_card.group') }}
|
||||
</span>
|
||||
</template>
|
||||
<span v-if="user.locked">
|
||||
<FAIcon
|
||||
|
|
|
|||
|
|
@ -80,6 +80,9 @@ const UserProfile = {
|
|||
followersTabVisible () {
|
||||
return this.isUs || !this.user.hide_followers
|
||||
},
|
||||
favoritesTabVisible () {
|
||||
return this.isUs || !this.user.hide_favorites
|
||||
},
|
||||
formattedBirthday () {
|
||||
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' })
|
||||
|
|
@ -103,6 +106,8 @@ const UserProfile = {
|
|||
startFetchingTimeline('user', userId)
|
||||
startFetchingTimeline('media', userId)
|
||||
if (this.isUs) {
|
||||
startFetchingTimeline('favorites')
|
||||
} else if (!this.user.hide_favorites) {
|
||||
startFetchingTimeline('favorites', userId)
|
||||
}
|
||||
// Fetch all pinned statuses immediately
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@
|
|||
:footer-slipgate="footerRef"
|
||||
/>
|
||||
<Timeline
|
||||
v-if="isUs"
|
||||
v-if="favoritesTabVisible"
|
||||
key="favorites"
|
||||
:label="$t('user_card.favorites')"
|
||||
:disabled="!favorites.visibleStatuses.length"
|
||||
|
|
@ -117,6 +117,7 @@
|
|||
:title="$t('user_card.favorites')"
|
||||
timeline-name="favorites"
|
||||
:timeline="favorites"
|
||||
:user-id="userId"
|
||||
:in-profile="true"
|
||||
:footer-slipgate="footerRef"
|
||||
/>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue