aboutsummaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/components')
-rw-r--r--src/components/emoji_picker/emoji_picker.js3
-rw-r--r--src/components/emoji_picker/emoji_picker.scss7
-rw-r--r--src/components/emoji_picker/emoji_picker.vue11
-rw-r--r--src/components/registration/registration.js10
-rw-r--r--src/components/registration/registration.vue14
-rw-r--r--src/components/settings_modal/tabs/filtering_tab.vue2
-rw-r--r--src/components/settings_modal/tabs/profile_tab.js13
-rw-r--r--src/components/settings_modal/tabs/profile_tab.vue20
-rw-r--r--src/components/status/status.js12
-rw-r--r--src/components/status/status.vue6
-rw-r--r--src/components/user_avatar/user_avatar.js8
-rw-r--r--src/components/user_avatar/user_avatar.vue11
-rw-r--r--src/components/user_card/user_card.vue8
-rw-r--r--src/components/user_profile/user_profile.js5
-rw-r--r--src/components/user_profile/user_profile.vue3
15 files changed, 102 insertions, 31 deletions
diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js
index 30c01aa5..eb665c40 100644
--- a/src/components/emoji_picker/emoji_picker.js
+++ b/src/components/emoji_picker/emoji_picker.js
@@ -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
diff --git a/src/components/emoji_picker/emoji_picker.scss b/src/components/emoji_picker/emoji_picker.scss
index 7dcaeb6c..7d42fcfb 100644
--- a/src/components/emoji_picker/emoji_picker.scss
+++ b/src/components/emoji_picker/emoji_picker.scss
@@ -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;
diff --git a/src/components/emoji_picker/emoji_picker.vue b/src/components/emoji_picker/emoji_picker.vue
index 7b7353ab..7c36deaa 100644
--- a/src/components/emoji_picker/emoji_picker.vue
+++ b/src/components/emoji_picker/emoji_picker.vue
@@ -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"
diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js
index b88bdeec..78d31980 100644
--- a/src/components/registration/registration.js
+++ b/src/components/registration/registration.js
@@ -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()
diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue
index d5fb4bf5..046fba1f 100644
--- a/src/components/registration/registration.vue
+++ b/src/components/registration/registration.vue
@@ -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;
diff --git a/src/components/settings_modal/tabs/filtering_tab.vue b/src/components/settings_modal/tabs/filtering_tab.vue
index 3e68911e..7360e6fe 100644
--- a/src/components/settings_modal/tabs/filtering_tab.vue
+++ b/src/components/settings_modal/tabs/filtering_tab.vue
@@ -51,7 +51,7 @@
</li>
<li>
<BooleanSetting path="hideBotIndication">
- {{ $t('settings.hide_bot_indication') }}
+ {{ $t('settings.hide_actor_type_indication') }}
</BooleanSetting>
</li>
<ChoiceSetting
diff --git a/src/components/settings_modal/tabs/profile_tab.js b/src/components/settings_modal/tabs/profile_tab.js
index eeacad48..dee17450 100644
--- a/src/components/settings_modal/tabs/profile_tab.js
+++ b/src/components/settings_modal/tabs/profile_tab.js
@@ -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
diff --git a/src/components/settings_modal/tabs/profile_tab.vue b/src/components/settings_modal/tabs/profile_tab.vue
index 65df89ca..034034a1 100644
--- a/src/components/settings_modal/tabs/profile_tab.vue
+++ b/src/components/settings_modal/tabs/profile_tab.vue
@@ -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')"
diff --git a/src/components/status/status.js b/src/components/status/status.js
index 129929a3..8f22b708 100644
--- a/src/components/status/status.js
+++ b/src/components/status/status.js
@@ -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
- },
- botIndicator () {
- return this.botStatus && !this.hideBotIndication
+ return this.status.user.actor_type === 'Service'
},
- rtBotIndicator () {
- return this.rtBotStatus && !this.hideBotIndication
+ showActorTypeIndicator () {
+ return !this.hideBotIndication
},
mentionsLine () {
if (!this.headTailLinks) return []
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index 2a46c5b9..4d9e1c3c 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -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">
diff --git a/src/components/user_avatar/user_avatar.js b/src/components/user_avatar/user_avatar.js
index 33d9a258..ffd81f87 100644
--- a/src/components/user_avatar/user_avatar.js
+++ b/src/components/user_avatar/user_avatar.js
@@ -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 {
diff --git a/src/components/user_avatar/user_avatar.vue b/src/components/user_avatar/user_avatar.vue
index 755346b2..a71e6992 100644
--- a/src/components/user_avatar/user_avatar.vue
+++ b/src/components/user_avatar/user_avatar.vue
@@ -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;
diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue
index a616f526..0f627f62 100644
--- a/src/components/user_card/user_card.vue
+++ b/src/components/user_card/user_card.vue
@@ -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
diff --git a/src/components/user_profile/user_profile.js b/src/components/user_profile/user_profile.js
index acb612ed..751bfd5a 100644
--- a/src/components/user_profile/user_profile.js
+++ b/src/components/user_profile/user_profile.js
@@ -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
diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue
index 46aef990..042d5221 100644
--- a/src/components/user_profile/user_profile.vue
+++ b/src/components/user_profile/user_profile.vue
@@ -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"
/>