Vuetify updates
This commit is contained in:
parent
c913a40e18
commit
c47b975723
43 changed files with 197 additions and 150 deletions
|
|
@ -22,7 +22,7 @@
|
||||||
</v-container>
|
</v-container>
|
||||||
|
|
||||||
<v-skeleton-loader
|
<v-skeleton-loader
|
||||||
type="list-item-avatar-two-line, divider, list-item-three-line, card-heading"
|
type="list-item-avatar-two-line,divider,list-item-three-line,heading"
|
||||||
v-if="showLoadingScreen"
|
v-if="showLoadingScreen"
|
||||||
></v-skeleton-loader>
|
></v-skeleton-loader>
|
||||||
<unsupported-browser-alert />
|
<unsupported-browser-alert />
|
||||||
|
|
@ -227,7 +227,7 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@import '~vuetify/src/styles/settings/_variables.scss';
|
@import 'vuetify/settings';
|
||||||
@import '@/assets/css/variables';
|
@import '@/assets/css/variables';
|
||||||
|
|
||||||
.copyright {
|
.copyright {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
@import "~vuetify/src/styles/settings/_variables.scss";
|
@import "vuetify/settings";
|
||||||
@import "@/assets/css/main.scss";
|
@import "@/assets/css/main.scss";
|
||||||
@import "@/assets/css/vendors/v-emoji-picker";
|
@import "@/assets/css/vendors/v-emoji-picker";
|
||||||
@import "@/assets/css/filedrop.scss";
|
@import "@/assets/css/filedrop.scss";
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
@import "~vuetify/src/styles/settings/_variables.scss";
|
@import "vuetify/settings";
|
||||||
@import "@/assets/css/main.scss";
|
@import "@/assets/css/main.scss";
|
||||||
|
|
||||||
.v-btn.btn-light {
|
.v-btn.btn-light {
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
<transition-group name="list" tag="div">
|
<transition-group name="list" tag="div">
|
||||||
<v-avatar v-for="(member) in recordingMembersExceptMe" :key="member.userId" class="typing-user" size="32" color="grey">
|
<v-avatar v-for="(member) in recordingMembersExceptMe" :key="member.userId" class="typing-user" size="32" color="grey">
|
||||||
<AuthedImage v-if="memberAvatar(member)" :src="memberAvatar(member)" />
|
<AuthedImage v-if="memberAvatar(member)" :src="memberAvatar(member)" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
member.name.substring(0, 1).toUpperCase()
|
member.name.substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
<v-avatar v-if="currentAudioEvent" class="avatar" ref="avatar" size="32" color="#ededed"
|
<v-avatar v-if="currentAudioEvent" class="avatar" ref="avatar" size="32" color="#ededed"
|
||||||
@click.stop="otherAvatarClicked($refs.avatar.$el)">
|
@click.stop="otherAvatarClicked($refs.avatar.$el)">
|
||||||
<img v-if="messageEventAvatar(currentAudioEvent)" :src="messageEventAvatar(currentAudioEvent)" />
|
<img v-if="messageEventAvatar(currentAudioEvent)" :src="messageEventAvatar(currentAudioEvent)" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
eventSenderDisplayName(currentAudioEvent).substring(0, 1).toUpperCase()
|
eventSenderDisplayName(currentAudioEvent).substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
<transition-group name="list" tag="div">
|
<transition-group name="list" tag="div">
|
||||||
<v-avatar v-for="reaction in reactions" :key="reaction.member.userId" class="typing-user" size="32" color="grey">
|
<v-avatar v-for="reaction in reactions" :key="reaction.member.userId" class="typing-user" size="32" color="grey">
|
||||||
<AuthedImage v-if="memberAvatar(reaction.member)" :src="memberAvatar(reaction.member)" />
|
<AuthedImage v-if="memberAvatar(reaction.member)" :src="memberAvatar(reaction.member)" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
reaction.member.name.substring(0, 1).toUpperCase()
|
reaction.member.name.substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
<div class="reaction-emoji">{{ reaction.emoji }}</div>
|
<div class="reaction-emoji">{{ reaction.emoji }}</div>
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,7 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import '~vuetify/src/styles/settings/_variables.scss';
|
@import 'vuetify/settings';
|
||||||
@import '@/assets/css/variables';
|
@import '@/assets/css/variables';
|
||||||
.sheetContent {
|
.sheetContent {
|
||||||
position:absolute;
|
position:absolute;
|
||||||
|
|
|
||||||
|
|
@ -238,7 +238,7 @@
|
||||||
accept="image/*,audio/*,video/*,.mp3,.mp4,.wav,.m4a,.pdf,application/pdf,.apk,application/vnd.android.package-archive,.ipa,.zip,application/zip,application/x-zip-compressed,multipart/x-zip" class="d-none" multiple/>
|
accept="image/*,audio/*,video/*,.mp3,.mp4,.wav,.m4a,.pdf,application/pdf,.apk,application/vnd.android.package-archive,.ipa,.zip,application/zip,application/x-zip-compressed,multipart/x-zip" class="d-none" multiple/>
|
||||||
|
|
||||||
<div v-if="currentFileInputsDialog && !useFileModeNonAdmin">
|
<div v-if="currentFileInputsDialog && !useFileModeNonAdmin">
|
||||||
<v-dialog v-model="currentFileInputsDialog" class="ma-0 pa-0" :width="$vuetify.breakpoint.smAndUp ? '50%' : '85%'" persistent scrollable>
|
<v-dialog v-model="currentFileInputsDialog" class="ma-0 pa-0" :width="$vuetify.display.smAndUp ? '50%' : '85%'" persistent scrollable>
|
||||||
<v-card class="ma-0 pa-0">
|
<v-card class="ma-0 pa-0">
|
||||||
<v-card-text v-if="!currentFileInputs.length">
|
<v-card-text v-if="!currentFileInputs.length">
|
||||||
{{ this.$t("message.preparing_to_upload")}}
|
{{ this.$t("message.preparing_to_upload")}}
|
||||||
|
|
@ -249,7 +249,7 @@
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<v-card-title>
|
<v-card-title>
|
||||||
<div v-if="currentSendErrorExceededFile" class="red--text">{{ currentSendErrorExceededFile }}</div>
|
<div v-if="currentSendErrorExceededFile" class="text-red">{{ currentSendErrorExceededFile }}</div>
|
||||||
<span v-else> {{ $t('message.send_attachements_dialog_title') }} </span>
|
<span v-else> {{ $t('message.send_attachements_dialog_title') }} </span>
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
<v-divider></v-divider>
|
<v-divider></v-divider>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
>
|
>
|
||||||
<v-avatar size="48" class="clickable me-2 chat-header-avatar" color="grey" @click.stop="onAvatarClicked">
|
<v-avatar size="48" class="clickable me-2 chat-header-avatar" color="grey" @click.stop="onAvatarClicked">
|
||||||
<AuthedImage v-if="roomAvatar" :src="roomAvatar" />
|
<AuthedImage v-if="roomAvatar" :src="roomAvatar" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
room.name.substring(0, 1).toUpperCase()
|
room.name.substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
<v-avatar :class="{ 'avatar-32': true, 'clickable': true, 'popup-open': showProfileInfo }" size="26"
|
<v-avatar :class="{ 'avatar-32': true, 'clickable': true, 'popup-open': showProfileInfo }" size="26"
|
||||||
color="#e0e0e0" @click.stop="showProfileInfo = true">
|
color="#e0e0e0" @click.stop="showProfileInfo = true">
|
||||||
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
||||||
<span v-else class="white--text">{{ userAvatarLetter }}</span>
|
<span v-else class="text-white">{{ userAvatarLetter }}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="auto" class="text-end ma-0 pa-0 ms-1">
|
<v-col cols="auto" class="text-end ma-0 pa-0 ms-1">
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
>
|
>
|
||||||
<v-avatar size="48" class="clickable me-2 chat-header-avatar rounded-circle" color="grey" @click.stop="onAvatarClicked">
|
<v-avatar size="48" class="clickable me-2 chat-header-avatar rounded-circle" color="grey" @click.stop="onAvatarClicked">
|
||||||
<v-img v-if="privatePartyAvatar(40)" :src="privatePartyAvatar(40)" />
|
<v-img v-if="privatePartyAvatar(40)" :src="privatePartyAvatar(40)" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
privateParty.name.substring(0, 1).toUpperCase()
|
privateParty.name.substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
|
|
@ -38,7 +38,7 @@
|
||||||
<v-avatar :class="{ 'avatar-32': true, 'clickable': true, 'popup-open': showProfileInfo }" size="26"
|
<v-avatar :class="{ 'avatar-32': true, 'clickable': true, 'popup-open': showProfileInfo }" size="26"
|
||||||
color="#e0e0e0" @click.stop="showProfileInfo = true">
|
color="#e0e0e0" @click.stop="showProfileInfo = true">
|
||||||
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
||||||
<span v-else class="white--text">{{ userAvatarLetter }}</span>
|
<span v-else class="text-white">{{ userAvatarLetter }}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
<v-text-field v-model="roomTopic" :label="$t('createchannel.channel_topic')"
|
<v-text-field v-model="roomTopic" :label="$t('createchannel.channel_topic')"
|
||||||
v-bind="{ ...roomTopicInputFields }" v-on="{ ...roomTopicInputListeners }"></v-text-field>
|
v-bind="{ ...roomTopicInputFields }" v-on="{ ...roomTopicInputListeners }"></v-text-field>
|
||||||
<div class="caption-2 text-center mt-2 mb-8">{{ $t('createchannel.channel_topic_label') }}</div>
|
<div class="caption-2 text-center mt-2 mb-8">{{ $t('createchannel.channel_topic_label') }}</div>
|
||||||
<div class="error--text" v-if="errorMessage != null">{{ this.errorMessage }}</div>
|
<div class="text-red" v-if="errorMessage != null">{{ this.errorMessage }}</div>
|
||||||
|
|
||||||
<interactive-auth ref="interactiveAuth" />
|
<interactive-auth ref="interactiveAuth" />
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
<v-text-field v-model="roomName" :label="$t('createfiledrop.filedrop_name')"
|
<v-text-field v-model="roomName" :label="$t('createfiledrop.filedrop_name')"
|
||||||
v-bind="{ ...roomNameInputFields }" v-on="{ ...roomNameInputListeners }"></v-text-field>
|
v-bind="{ ...roomNameInputFields }" v-on="{ ...roomNameInputListeners }"></v-text-field>
|
||||||
|
|
||||||
<div class="error--text" v-if="errorMessage != null">{{ this.errorMessage }}</div>
|
<div class="text-red" v-if="errorMessage != null">{{ this.errorMessage }}</div>
|
||||||
|
|
||||||
<interactive-auth ref="interactiveAuth" />
|
<interactive-auth ref="interactiveAuth" />
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
v-show="room"
|
v-show="room"
|
||||||
scrollable
|
scrollable
|
||||||
class="ma-0 pa-0"
|
class="ma-0 pa-0"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '940px' : '95%'"
|
:width="$vuetify.display.smAndUp ? '940px' : '95%'"
|
||||||
>
|
>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-card-title>
|
<v-card-title>
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|
||||||
|
|
||||||
<div class="error--text" v-if="errorMessage != null">{{ this.errorMessage }}</div>
|
<div class="text-red" v-if="errorMessage != null">{{ this.errorMessage }}</div>
|
||||||
|
|
||||||
<!-- Create button -->
|
<!-- Create button -->
|
||||||
<v-btn :disabled="!formIsValid || creatingRoom" color="#6360F0" depressed @click.stop="onCreate"
|
<v-btn :disabled="!formIsValid || creatingRoom" color="#6360F0" depressed @click.stop="onCreate"
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
<input id="user-avatar-picker" ref="useravatar" type="file" name="user-avatar"
|
<input id="user-avatar-picker" ref="useravatar" type="file" name="user-avatar"
|
||||||
@change="handlePickedUserAvatar($event)" accept="image/*" class="d-none" />
|
@change="handlePickedUserAvatar($event)" accept="image/*" class="d-none" />
|
||||||
|
|
||||||
<v-dialog v-model="enterRoomDialog" :width="$vuetify.breakpoint.smAndUp ? '50%' : '90%'">
|
<v-dialog v-model="enterRoomDialog" :width="$vuetify.display.smAndUp ? '50%' : '90%'">
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-container v-if="canEditProfile" class="pa-10">
|
<v-container v-if="canEditProfile" class="pa-10">
|
||||||
<v-row class="align-center">
|
<v-row class="align-center">
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<v-list dense @click.native.stop="nullEvent">
|
<v-list dense @click.stop="nullEvent" color="primary">
|
||||||
<v-list-item-group color="primary">
|
|
||||||
<v-list-item
|
<v-list-item
|
||||||
v-for="device in devices"
|
v-for="device in devices"
|
||||||
:key="device.deviceId"
|
:key="device.deviceId"
|
||||||
|
|
@ -27,7 +26,6 @@
|
||||||
</v-list-item-action>
|
</v-list-item-action>
|
||||||
</template>
|
</template>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list-item-group>
|
|
||||||
</v-list>
|
</v-list>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,9 @@
|
||||||
:error-messages="userErrorMessage" required v-on:keyup.enter="onUsernameEnter"
|
:error-messages="userErrorMessage" required v-on:keyup.enter="onUsernameEnter"
|
||||||
v-on:keydown="hasError = false"></v-text-field>
|
v-on:keydown="hasError = false"></v-text-field>
|
||||||
|
|
||||||
<!-- <div class="error--text" v-if="loadingLoginFlows">Loading login flows...</div> -->
|
<!-- <div class="text-red" v-if="loadingLoginFlows">Loading login flows...</div> -->
|
||||||
|
|
||||||
<div class="error--text" v-if="hasError">{{ this.message }}</div>
|
<div class="text-red" v-if="hasError">{{ this.message }}</div>
|
||||||
|
|
||||||
<interactive-auth ref="interactiveAuth" />
|
<interactive-auth ref="interactiveAuth" />
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,20 +29,21 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex-grow-1 flex-shrink-1">
|
<div class="flex-grow-1 flex-shrink-1">
|
||||||
<v-list class="member ma-2">
|
<v-list class="member ma-2" v-model:selected="selectedMembers">
|
||||||
<v-list-item-group multiple v-model="selectedMembers">
|
|
||||||
<v-list-item
|
<v-list-item
|
||||||
v-for="member in $matrix.getAllFriends()"
|
v-for="member in $matrix.getAllFriends()"
|
||||||
:key="member.userId"
|
:key="member.userId"
|
||||||
:value="member"
|
:value="member"
|
||||||
>
|
>
|
||||||
<template v-slot:default="{ active }">
|
<template v-slot:prepend>
|
||||||
<v-list-item-avatar color="grey">
|
<v-avatar color="grey">
|
||||||
<AuthedImage v-if="memberAvatar(member)" :src="memberAvatar(member)" />
|
<AuthedImage v-if="memberAvatar(member)" :src="memberAvatar(member)" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
member.name.substring(0, 1).toUpperCase()
|
member.name.substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
</v-list-item-avatar>
|
</v-avatar>
|
||||||
|
</template>
|
||||||
|
<template v-slot:default="{ active }">
|
||||||
<v-list-item-title>{{ memberName(member) }}</v-list-item-title>
|
<v-list-item-title>{{ memberName(member) }}</v-list-item-title>
|
||||||
<v-list-item-subtitle
|
<v-list-item-subtitle
|
||||||
v-text="member.userId"
|
v-text="member.userId"
|
||||||
|
|
@ -54,7 +55,6 @@
|
||||||
</v-list-item-action>
|
</v-list-item-action>
|
||||||
</template>
|
</template>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list-item-group>
|
|
||||||
</v-list>
|
</v-list>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<v-avatar class="join-avatar">
|
<v-avatar class="join-avatar">
|
||||||
<AuthedImage v-if="roomAvatar" :src="roomAvatar" />
|
<AuthedImage v-if="roomAvatar" :src="roomAvatar" />
|
||||||
<span v-else class="white--text headline">
|
<span v-else class="text-white headline">
|
||||||
{{ roomName.substring(0, 1).toUpperCase() }}
|
{{ roomName.substring(0, 1).toUpperCase() }}
|
||||||
</span>
|
</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
<div class="d-inline-block">
|
<div class="d-inline-block">
|
||||||
<v-avatar color="#e0e0e0">
|
<v-avatar color="#e0e0e0">
|
||||||
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
||||||
<span v-else class="white--text headline">{{ userAvatarLetter }}</span>
|
<span v-else class="text-white headline">{{ userAvatarLetter }}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
</div>
|
</div>
|
||||||
{{ userDisplayName }}
|
{{ userDisplayName }}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
v-model="showDialog"
|
v-model="showDialog"
|
||||||
v-show="room"
|
v-show="room"
|
||||||
class="ma-0 pa-0"
|
class="ma-0 pa-0"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '688px' : '95%'"
|
:width="$vuetify.display.smAndUp ? '688px' : '95%'"
|
||||||
>
|
>
|
||||||
<div class="dialog-content text-center">
|
<div class="dialog-content text-center">
|
||||||
<template v-if="roomJoinRule == 'public'">
|
<template v-if="roomJoinRule == 'public'">
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@
|
||||||
v-on:blur="onUsernameBlur"
|
v-on:blur="onUsernameBlur"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
|
|
||||||
<div class="error--text" v-if="loadingLoginFlows">Loading login flows...</div>
|
<div class="text-red" v-if="loadingLoginFlows">Loading login flows...</div>
|
||||||
|
|
||||||
<v-text-field
|
<v-text-field
|
||||||
v-show="showPasswordField"
|
v-show="showPasswordField"
|
||||||
|
|
@ -67,7 +67,7 @@
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
<div class="error--text" v-if="hasError">{{ this.message }}</div>
|
<div class="text-red" v-if="hasError">{{ this.message }}</div>
|
||||||
<v-checkbox
|
<v-checkbox
|
||||||
id="chk-remember-me"
|
id="chk-remember-me"
|
||||||
class="mt-0"
|
class="mt-0"
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<v-dialog
|
<v-dialog
|
||||||
:value="showLogoutPopup"
|
:value="showLogoutPopup"
|
||||||
class="ma-0 pa-0"
|
class="ma-0 pa-0"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '688px' : '95%'"
|
:width="$vuetify.display.smAndUp ? '688px' : '95%'"
|
||||||
@click:outside="$emit('onOutsideLogoutPopupClicked')"
|
@click:outside="$emit('onOutsideLogoutPopupClicked')"
|
||||||
>
|
>
|
||||||
<div class="dialog-content text-center">
|
<div class="dialog-content text-center">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="showDialog" v-show="room" class="ma-0 pa-0" :width="$vuetify.breakpoint.smAndUp ? '688px' : '95%'">
|
<v-dialog v-model="showDialog" v-show="room" class="ma-0 pa-0" :width="$vuetify.display.smAndUp ? '688px' : '95%'">
|
||||||
<div class="dialog-content text-center">
|
<div class="dialog-content text-center">
|
||||||
<template>
|
<template>
|
||||||
<h2>{{ $t("room_info.message_retention") }}</h2>
|
<h2>{{ $t("room_info.message_retention") }}</h2>
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<v-col cols="auto" class="me-2">
|
<v-col cols="auto" class="me-2">
|
||||||
<v-avatar class="avatar-32" size="32" color="#e0e0e0" @click.stop="viewProfile">
|
<v-avatar class="avatar-32" size="32" color="#e0e0e0" @click.stop="viewProfile">
|
||||||
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
||||||
<span v-else class="white--text">{{ userAvatarLetter }}</span>
|
<span v-else class="text-white">{{ userAvatarLetter }}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col>
|
<v-col>
|
||||||
|
|
@ -84,7 +84,7 @@ export default {
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@import "@/assets/css/chat.scss";
|
@import "@/assets/css/chat.scss";
|
||||||
@import '~vuetify/src/styles/settings/_variables.scss';
|
@import 'vuetify/settings';
|
||||||
|
|
||||||
.popup-wrapper {
|
.popup-wrapper {
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
v-if="isAvatarLoaded"
|
v-if="isAvatarLoaded"
|
||||||
>
|
>
|
||||||
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
||||||
<span v-else class="white--text">{{ userAvatarLetter }}</span>
|
<span v-else class="text-white">{{ userAvatarLetter }}</span>
|
||||||
<input
|
<input
|
||||||
id="avatar-picker"
|
id="avatar-picker"
|
||||||
ref="avatar"
|
ref="avatar"
|
||||||
|
|
@ -111,7 +111,7 @@
|
||||||
<v-dialog
|
<v-dialog
|
||||||
v-model="showEditPasswordDialog"
|
v-model="showEditPasswordDialog"
|
||||||
class="ma-0 pa-0"
|
class="ma-0 pa-0"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '940px' : '80%'"
|
:width="$vuetify.display.smAndUp ? '940px' : '80%'"
|
||||||
>
|
>
|
||||||
<v-card :disabled="settingPassword">
|
<v-card :disabled="settingPassword">
|
||||||
<v-card-title>{{ $matrix.currentUser.is_guest ? $t("profile.set_password") : $t("profile.change_password") }}</v-card-title>
|
<v-card-title>{{ $matrix.currentUser.is_guest ? $t("profile.set_password") : $t("profile.change_password") }}</v-card-title>
|
||||||
|
|
@ -144,7 +144,7 @@
|
||||||
:type="showPassword2 ? 'text' : 'password'"
|
:type="showPassword2 ? 'text' : 'password'"
|
||||||
@click:append="showPassword2 = !showPassword2"
|
@click:append="showPassword2 = !showPassword2"
|
||||||
/>
|
/>
|
||||||
<div class="red--text" v-if="passwordErrorMessage">
|
<div class="text-red" v-if="passwordErrorMessage">
|
||||||
{{ passwordErrorMessage }}
|
{{ passwordErrorMessage }}
|
||||||
</div>
|
</div>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
|
|
@ -177,7 +177,7 @@
|
||||||
<v-dialog
|
<v-dialog
|
||||||
v-model="showEditDisplaynameDialog"
|
v-model="showEditDisplaynameDialog"
|
||||||
class="ma-0 pa-0"
|
class="ma-0 pa-0"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '940px' : '80%'"
|
:width="$vuetify.display.smAndUp ? '940px' : '80%'"
|
||||||
>
|
>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-card-title>{{ $t("profile.display_name") }}</v-card-title>
|
<v-card-title>{{ $t("profile.display_name") }}</v-card-title>
|
||||||
|
|
@ -218,7 +218,7 @@
|
||||||
v-model="notificationDialog"
|
v-model="notificationDialog"
|
||||||
persistent
|
persistent
|
||||||
class="ma-0 pa-0"
|
class="ma-0 pa-0"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '688px' : '95%'"
|
:width="$vuetify.display.smAndUp ? '688px' : '95%'"
|
||||||
>
|
>
|
||||||
<div class="dialog-content text-center">
|
<div class="dialog-content text-center">
|
||||||
<v-icon size="30">notifications_active</v-icon>
|
<v-icon size="30">notifications_active</v-icon>
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
<v-col cols="auto" class="pa-2">
|
<v-col cols="auto" class="pa-2">
|
||||||
<v-avatar class="avatar-32" size="32" color="#e0e0e0" @click.stop="viewProfile">
|
<v-avatar class="avatar-32" size="32" color="#e0e0e0" @click.stop="viewProfile">
|
||||||
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
||||||
<span v-else class="white--text">{{ userAvatarLetter }}</span>
|
<span v-else class="text-white">{{ userAvatarLetter }}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
@ -120,7 +120,7 @@ export default {
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@import "@/assets/css/chat.scss";
|
@import "@/assets/css/chat.scss";
|
||||||
@import '~vuetify/src/styles/settings/_variables.scss';
|
@import 'vuetify/settings';
|
||||||
|
|
||||||
.profile-info-popup {
|
.profile-info-popup {
|
||||||
font-family: "Inter", sans-serif !important;
|
font-family: "Inter", sans-serif !important;
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
persistent
|
persistent
|
||||||
v-model="showDialog"
|
v-model="showDialog"
|
||||||
v-show="room" class="ma-0 pa-0"
|
v-show="room" class="ma-0 pa-0"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '688px' : '95%'"
|
:width="$vuetify.display.smAndUp ? '688px' : '95%'"
|
||||||
>
|
>
|
||||||
<div v-if="timeout == -1" class="dialog-content text-center">
|
<div v-if="timeout == -1" class="dialog-content text-center">
|
||||||
<template>
|
<template>
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<v-dialog
|
<v-dialog
|
||||||
v-model="showDialog"
|
v-model="showDialog"
|
||||||
class="ma-0 pa-0"
|
class="ma-0 pa-0"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '940px' : '95%'"
|
:width="$vuetify.display.smAndUp ? '940px' : '95%'"
|
||||||
>
|
>
|
||||||
<div class="dialog-content text-center" ref="qrContainer">
|
<div class="dialog-content text-center" ref="qrContainer">
|
||||||
<div class="d-flex justify-center">
|
<div class="d-flex justify-center">
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,11 @@
|
||||||
<div v-if="roomWasPurged">
|
<div v-if="roomWasPurged">
|
||||||
<v-img src="@/assets/icons/trash.svg" />
|
<v-img src="@/assets/icons/trash.svg" />
|
||||||
</div>
|
</div>
|
||||||
<h2 v-if="roomWasPurged" class="white--text mt-2 mb-8">
|
<h2 v-if="roomWasPurged" class="text-white mt-2 mb-8">
|
||||||
{{ $t("goodbye.room_deleted") }}
|
{{ $t("goodbye.room_deleted") }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="quote white--text">{{ quote }}</div>
|
<div class="quote text-white">{{ quote }}</div>
|
||||||
<div class="author white--text mt-4">- {{ author }}</div>
|
<div class="author text-white mt-4">- {{ author }}</div>
|
||||||
|
|
||||||
<v-btn
|
<v-btn
|
||||||
v-if="joinedToAnyRoom"
|
v-if="joinedToAnyRoom"
|
||||||
|
|
@ -42,13 +42,13 @@
|
||||||
class="goodbye-profile clickable"
|
class="goodbye-profile clickable"
|
||||||
@click.stop="viewOtherRooms"
|
@click.stop="viewOtherRooms"
|
||||||
>
|
>
|
||||||
<div class="d-inline-block me-2 white--text">
|
<div class="d-inline-block me-2 text-white">
|
||||||
{{ $t("profile_info_popup.you_are") }}
|
{{ $t("profile_info_popup.you_are") }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="$matrix.currentUser.is_guest"
|
v-if="$matrix.currentUser.is_guest"
|
||||||
class="d-inline-block me-2 white--text"
|
class="d-inline-block me-2 text-white"
|
||||||
>
|
>
|
||||||
<i18n-t keypath="profile_info_popup.identity_temporary" tag="span">
|
<i18n-t keypath="profile_info_popup.identity_temporary" tag="span">
|
||||||
<template v-slot:displayName>
|
<template v-slot:displayName>
|
||||||
|
|
@ -56,7 +56,7 @@
|
||||||
</template>
|
</template>
|
||||||
</i18n-t>
|
</i18n-t>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="d-inline-block me-2 white--text">
|
<div v-else class="d-inline-block me-2 text-white">
|
||||||
<i18n-t keypath="profile_info_popup.identity" tag="span">
|
<i18n-t keypath="profile_info_popup.identity" tag="span">
|
||||||
<template v-slot:displayName>
|
<template v-slot:displayName>
|
||||||
<b>{{ displayName }}</b>
|
<b>{{ displayName }}</b>
|
||||||
|
|
@ -69,7 +69,7 @@
|
||||||
color="#e0e0e0"
|
color="#e0e0e0"
|
||||||
>
|
>
|
||||||
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
||||||
<span v-else class="white--text">{{ userAvatarLetter }}</span>
|
<span v-else class="text-white">{{ userAvatarLetter }}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
v-model="showDialog"
|
v-model="showDialog"
|
||||||
v-show="room"
|
v-show="room"
|
||||||
class="ma-0 pa-0"
|
class="ma-0 pa-0"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '688px' : '95%'"
|
:width="$vuetify.display.smAndUp ? '688px' : '95%'"
|
||||||
>
|
>
|
||||||
<div class="dialog-content text-center">
|
<div class="dialog-content text-center">
|
||||||
<h2 class="dialog-title">{{ $t("room_info.report") }}</h2>
|
<h2 class="dialog-title">{{ $t("room_info.report") }}</h2>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<v-avatar :class="{'room-avatar':true, 'cursor-pointer':userCanPurgeRoom}" @click="userCanPurgeRoom?showRoomAvatarPicker():null" v-if="isRoomAvatarLoaded">
|
<v-avatar :class="{'room-avatar':true, 'cursor-pointer':userCanPurgeRoom}" @click="userCanPurgeRoom?showRoomAvatarPicker():null" v-if="isRoomAvatarLoaded">
|
||||||
<AuthedImage v-if="roomAvatar" :src="roomAvatar"/>
|
<AuthedImage v-if="roomAvatar" :src="roomAvatar"/>
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
roomName.substring(0, 1).toUpperCase()
|
roomName.substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
<input
|
<input
|
||||||
|
|
|
||||||
|
|
@ -109,9 +109,11 @@
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:item="{ item, attrs, on }">
|
<template v-slot:item="{ item, attrs, on }">
|
||||||
<v-list-item v-on="on" v-bind="attrs" #default="{ active }">
|
<v-list-item v-on="on" v-bind="attrs" #default="{ active }">
|
||||||
<v-list-item-avatar>
|
<template v-slot:prepend>
|
||||||
<v-icon color="black">{{ item.icon }}</v-icon>
|
<v-avatar color="grey">
|
||||||
</v-list-item-avatar>
|
<v-icon color="black">{{ item.icon }}</v-icon>
|
||||||
|
</v-avatar>
|
||||||
|
</template>
|
||||||
<v-list-item-title v-text="item.text"></v-list-item-title>
|
<v-list-item-title v-text="item.text"></v-list-item-title>
|
||||||
<v-list-item-action>
|
<v-list-item-action>
|
||||||
<v-btn icon v-if="active">
|
<v-btn icon v-if="active">
|
||||||
|
|
@ -141,14 +143,17 @@
|
||||||
<v-card-text v-if="canViewRetentionPolicy">
|
<v-card-text v-if="canViewRetentionPolicy">
|
||||||
<v-list v-if="canChangeRetentionPolicy">
|
<v-list v-if="canChangeRetentionPolicy">
|
||||||
<v-list-item link v-on:click="showMessageRetentionDialog = true" class="px-0 pb-0">
|
<v-list-item link v-on:click="showMessageRetentionDialog = true" class="px-0 pb-0">
|
||||||
<v-list-item-avatar class="mr-0 pb-0 mb-0">
|
<template v-slot:prepend>
|
||||||
<v-img
|
<v-avatar class="mr-0 pb-0 mb-0">
|
||||||
contain
|
<v-img
|
||||||
width="24"
|
contain
|
||||||
height="24"
|
width="24"
|
||||||
src="@/assets/icons/timer.svg"
|
height="24"
|
||||||
/>
|
src="@/assets/icons/timer.svg"
|
||||||
</v-list-item-avatar>
|
/>
|
||||||
|
</v-avatar>
|
||||||
|
</template>
|
||||||
|
|
||||||
{{ messageRetentionDisplay }}
|
{{ messageRetentionDisplay }}
|
||||||
|
|
||||||
<v-list-item-action class="pb-0 mb-0">
|
<v-list-item-action class="pb-0 mb-0">
|
||||||
|
|
@ -197,10 +202,8 @@
|
||||||
<div>{{ members.length }}</div></v-card-title
|
<div>{{ members.length }}</div></v-card-title
|
||||||
>
|
>
|
||||||
<v-list>
|
<v-list>
|
||||||
<v-list-item-group>
|
<template v-for="(member, index) in members" :key="member.userId">
|
||||||
<template v-for="(member, index) in members" >
|
|
||||||
<v-list-item
|
<v-list-item
|
||||||
:key="member.userId"
|
|
||||||
class="member"
|
class="member"
|
||||||
v-show="showAllMembers || index < SHOW_MEMBER_LIMIT"
|
v-show="showAllMembers || index < SHOW_MEMBER_LIMIT"
|
||||||
@click="onListItemClick(member)"
|
@click="onListItemClick(member)"
|
||||||
|
|
@ -209,7 +212,7 @@
|
||||||
<div class="user-icon-with-badge">
|
<div class="user-icon-with-badge">
|
||||||
<v-avatar class="avatar" size="32" color="grey">
|
<v-avatar class="avatar" size="32" color="grey">
|
||||||
<AuthedImage v-if="memberAvatar(member)" :src="memberAvatar(member)" />
|
<AuthedImage v-if="memberAvatar(member)" :src="memberAvatar(member)" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
member.name.substring(0, 1).toUpperCase()
|
member.name.substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
|
|
@ -241,7 +244,6 @@
|
||||||
:key="index"
|
:key="index"
|
||||||
></v-divider>
|
></v-divider>
|
||||||
</template>
|
</template>
|
||||||
</v-list-item-group>
|
|
||||||
</v-list>
|
</v-list>
|
||||||
<div class="show-all p-2" @click="showAllMembers = !showAllMembers" v-if="members.length > SHOW_MEMBER_LIMIT">
|
<div class="show-all p-2" @click="showAllMembers = !showAllMembers" v-if="members.length > SHOW_MEMBER_LIMIT">
|
||||||
{{ showAllMembers ? $t("room_info.hide_all") : $t("room_info.show_all") }}
|
{{ showAllMembers ? $t("room_info.hide_all") : $t("room_info.show_all") }}
|
||||||
|
|
|
||||||
|
|
@ -1,54 +1,61 @@
|
||||||
<template>
|
<template>
|
||||||
<v-list dense class="room-list">
|
<v-list dense class="room-list">
|
||||||
<v-list-item-group @change="roomChange" color="primary">
|
<v-list-item v-if="showCreate" @click.stop="$emit('newroom')" class="room-list-room" :value="null">
|
||||||
|
<template v-slot:prepend>
|
||||||
<v-list-item v-if="showCreate" @click.stop="$emit('newroom')" class="room-list-room" :value="null">
|
<v-avatar class="round" size="42" color="#d9d9d9">
|
||||||
<v-list-item-avatar class="round" size="42" color="#d9d9d9">
|
|
||||||
<v-icon size="11">$vuetify.icons.ic_new_room</v-icon>
|
<v-icon size="11">$vuetify.icons.ic_new_room</v-icon>
|
||||||
</v-list-item-avatar>
|
</v-avatar>
|
||||||
<v-list-item-title class="room-list-new-room">{{
|
</template>
|
||||||
$t("menu.new_room")
|
|
||||||
}}</v-list-item-title>
|
|
||||||
</v-list-item>
|
|
||||||
|
|
||||||
<!-- invites -->
|
<v-list-item-title class="room-list-new-room">{{
|
||||||
<v-list-item :disabled="roomsProcessing[room.roomId]" v-for="room in invitedRooms" :key="room.roomId"
|
$t("menu.new_room")
|
||||||
:value="room" class="room-list-room">
|
}}</v-list-item-title>
|
||||||
<v-list-item-avatar size="42" color="#d9d9d9">
|
</v-list-item>
|
||||||
|
|
||||||
|
<!-- invites -->
|
||||||
|
<v-list-item :disabled="roomsProcessing[room.roomId]" v-for="room in invitedRooms" :key="room.roomId"
|
||||||
|
:value="room.roomId" class="room-list-room">
|
||||||
|
<template v-slot:prepend>
|
||||||
|
<v-avatar size="42" color="#d9d9d9">
|
||||||
<AuthedImage v-if="roomAvatar(room)" :src="roomAvatar(room)" />
|
<AuthedImage v-if="roomAvatar(room)" :src="roomAvatar(room)" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
room.name.substring(0, 1).toUpperCase()
|
room.name.substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
</v-list-item-avatar>
|
</v-avatar>
|
||||||
<v-list-item-title class="room-list-name">{{ room.name }}</v-list-item-title>
|
</template>
|
||||||
<v-list-item-subtitle>{{ room.topic }}</v-list-item-subtitle>
|
|
||||||
<v-list-item-action>
|
<v-list-item-title class="room-list-name">{{ room.name }}</v-list-item-title>
|
||||||
<v-btn id="btn-accept" class="filled-button" depressed color="black" @click.stop="acceptInvitation(room)">{{
|
<v-list-item-subtitle>{{ room.topic }}</v-list-item-subtitle>
|
||||||
$t("menu.join") }}</v-btn>
|
<v-list-item-action>
|
||||||
<v-btn v-if="!room.isServiceNoticeRoom" id="btn-reject" class="filled-button" color="black" @click.stop="rejectInvitation(room)" text>{{
|
<v-btn id="btn-accept" class="filled-button" depressed color="black" @click.stop="acceptInvitation(room)">{{
|
||||||
|
$t("menu.join") }}</v-btn>
|
||||||
|
<v-btn v-if="!room.isServiceNoticeRoom" id="btn-reject" class="filled-button" color="black"
|
||||||
|
@click.stop="rejectInvitation(room)" text>{{
|
||||||
$t("menu.ignore") }}</v-btn>
|
$t("menu.ignore") }}</v-btn>
|
||||||
</v-list-item-action>
|
</v-list-item-action>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
|
|
||||||
<v-list-item v-for="room in joinedRooms" :key="room.roomId" :value="room" class="room-list-room">
|
<v-list-item v-for="room in joinedRooms" :key="room.roomId" :value="room.roomId"
|
||||||
<v-list-item-avatar size="42" color="#d9d9d9" :class="[{'rounded-circle': isDirect(room)}]">
|
@click="currentRoomId = room.roomId" class="room-list-room">
|
||||||
|
<template v-slot:prepend>
|
||||||
|
<v-avatar size="42" color="#d9d9d9" :class="[{ 'rounded-circle': isDirect(room) }]">
|
||||||
<AuthedImage v-if="roomAvatar(room)" :src="roomAvatar(room)" />
|
<AuthedImage v-if="roomAvatar(room)" :src="roomAvatar(room)" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
room.name.substring(0, 1).toUpperCase()
|
room.name.substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
</v-list-item-avatar>
|
</v-avatar>
|
||||||
<v-list-item-title class="room-list-name">{{ room.name }}
|
</template>
|
||||||
<!-- <v-icon class="ml-2 mb-1" size="10" v-if="isPublic(room)">$vuetify.icons.ic_public</v-icon> -->
|
<v-list-item-title class="room-list-name">{{ room.name }}
|
||||||
</v-list-item-title>
|
<!-- <v-icon class="ml-2 mb-1" size="10" v-if="isPublic(room)">$vuetify.icons.ic_public</v-icon> -->
|
||||||
<v-list-item-subtitle class="room-list-new-messages" v-if="notificationCount(room) > 0">
|
</v-list-item-title>
|
||||||
{{ $t("room.room_list_new_messages", { count: notificationCount(room) }) }}
|
<v-list-item-subtitle class="room-list-new-messages" v-if="notificationCount(room) > 0">
|
||||||
</v-list-item-subtitle>
|
{{ $t("room.room_list_new_messages", { count: notificationCount(room) }) }}
|
||||||
<v-list-item-action>
|
</v-list-item-subtitle>
|
||||||
<v-icon size="16" v-if="room.roomId == $matrix.currentRoomId">$vuetify.icons.ic_circle_filled</v-icon>
|
<v-list-item-action>
|
||||||
<v-icon size="16" v-else>$vuetify.icons.ic_circle</v-icon>
|
<v-icon size="16" v-if="room.roomId == $matrix.currentRoomId">$vuetify.icons.ic_circle_filled</v-icon>
|
||||||
</v-list-item-action>
|
<v-icon size="16" v-else>$vuetify.icons.ic_circle</v-icon>
|
||||||
</v-list-item>
|
</v-list-item-action>
|
||||||
</v-list-item-group>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
@ -75,6 +82,8 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
data: () => ({
|
data: () => ({
|
||||||
|
currentRoomId: null,
|
||||||
|
|
||||||
/** A list of rooms currently processing some operation, like "join" or "reject" */
|
/** A list of rooms currently processing some operation, like "join" or "reject" */
|
||||||
roomsProcessing: {},
|
roomsProcessing: {},
|
||||||
}),
|
}),
|
||||||
|
|
@ -181,25 +190,25 @@ export default {
|
||||||
isDirect(room) {
|
isDirect(room) {
|
||||||
return this.$matrix.isDirectRoom(room);
|
return this.$matrix.isDirectRoom(room);
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
|
||||||
roomChange(room) {
|
watch: {
|
||||||
if (room == null || room == undefined || room == 0) {
|
currentRoomId() {
|
||||||
|
if (this.currentRoomId == null || this.currentRoomId == undefined) {
|
||||||
// Ignore, this is caused by "new room" etc.
|
// Ignore, this is caused by "new room" etc.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (room.isServiceNoticeRoom && room.selfMembership === "invite") {
|
|
||||||
return; // Nothing should happen when click on invite to server notices room, just the "join" button is enabled.
|
|
||||||
}
|
|
||||||
this.$emit("close");
|
this.$emit("close");
|
||||||
this.$navigation.push(
|
this.$navigation.push(
|
||||||
{
|
{
|
||||||
name: "Chat",
|
name: "Chat",
|
||||||
params: { roomId: util.sanitizeRoomId(room.roomId) },
|
params: { roomId: util.sanitizeRoomId(this.currentRoomId) },
|
||||||
},
|
},
|
||||||
-1
|
-1
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
class="ma-0 pa-0"
|
class="ma-0 pa-0"
|
||||||
v-bind="{ ...$props, ...$attrs }"
|
v-bind="{ ...$props, ...$attrs }"
|
||||||
v-on="$listeners"
|
v-on="$listeners"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '940px' : '90%'"
|
:width="$vuetify.display.smAndUp ? '940px' : '90%'"
|
||||||
>
|
>
|
||||||
<v-card class="dialog-card">
|
<v-card class="dialog-card">
|
||||||
<v-card-title class="dialog-title d-block">
|
<v-card-title class="dialog-title d-block">
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
class="ma-0 pa-0"
|
class="ma-0 pa-0"
|
||||||
v-model="isUnSupportedBrowser"
|
v-model="isUnSupportedBrowser"
|
||||||
persistent
|
persistent
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '50%' : '90%'"
|
:width="$vuetify.display.smAndUp ? '50%' : '90%'"
|
||||||
>
|
>
|
||||||
<div class="dialog-content text-center">
|
<div class="dialog-content text-center">
|
||||||
<h2 class="dialog-title">{{ $t("global.different_browser_title") }}</h2>
|
<h2 class="dialog-title">{{ $t("global.different_browser_title") }}</h2>
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,13 @@
|
||||||
v-model="showDialog"
|
v-model="showDialog"
|
||||||
v-show="room"
|
v-show="room"
|
||||||
class="ma-0 pa-0"
|
class="ma-0 pa-0"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '688px' : '95%'"
|
:width="$vuetify.display.smAndUp ? '688px' : '95%'"
|
||||||
>
|
>
|
||||||
<div class="dialog-content text-center member-action-dialog">
|
<div class="dialog-content text-center member-action-dialog">
|
||||||
<div class="pt-4">
|
<div class="pt-4">
|
||||||
<v-avatar class="avatar" size="56" color="grey">
|
<v-avatar class="avatar" size="56" color="grey">
|
||||||
<AuthedImage v-if="memberAvatarComp" :src="memberAvatarComp" />
|
<AuthedImage v-if="memberAvatarComp" :src="memberAvatarComp" />
|
||||||
<span v-else class="white--text headline">{{ firstLetterUserName }}</span>
|
<span v-else class="text-white headline">{{ firstLetterUserName }}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
<div>
|
<div>
|
||||||
<span class="user-name">
|
<span class="user-name">
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
</span>
|
</span>
|
||||||
<v-avatar color="#e0e0e0" right @click.stop="viewProfile">
|
<v-avatar color="#e0e0e0" right @click.stop="viewProfile">
|
||||||
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
||||||
<span v-else class="white--text">{{ userAvatarLetter }}</span>
|
<span v-else class="text-white">{{ userAvatarLetter }}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
</v-chip>
|
</v-chip>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
</div>
|
</div>
|
||||||
<v-avatar class="avatar" ref="avatar" size="32" color="#ededed" @click.stop="otherAvatarClicked($refs.avatar.$el)">
|
<v-avatar class="avatar" ref="avatar" size="32" color="#ededed" @click.stop="otherAvatarClicked($refs.avatar.$el)">
|
||||||
<img v-if="messageEventAvatar(event)" :src="messageEventAvatar(event)" onerror="this.style.display='none'" />
|
<img v-if="messageEventAvatar(event)" :src="messageEventAvatar(event)" onerror="this.style.display='none'" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
eventSenderDisplayName(event).substring(0, 1).toUpperCase()
|
eventSenderDisplayName(event).substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
</div>
|
</div>
|
||||||
<v-dialog
|
<v-dialog
|
||||||
v-model="dialog"
|
v-model="dialog"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '940px' : '90%'"
|
:width="$vuetify.display.smAndUp ? '940px' : '90%'"
|
||||||
>
|
>
|
||||||
<v-img :src="src"/>
|
<v-img :src="src"/>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
@click.stop="ownAvatarClicked"
|
@click.stop="ownAvatarClicked"
|
||||||
>
|
>
|
||||||
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
<AuthedImage v-if="userAvatar" :src="userAvatar" />
|
||||||
<span v-else class="white--text headline">{{ userAvatarLetter }}</span>
|
<span v-else class="text-white headline">{{ userAvatarLetter }}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
<QuickReactionsChannel v-if="room.displayType == ROOM_TYPE_CHANNEL" :event="eventForReactions" :timelineSet="timelineSet" v-on="$listeners"/>
|
<QuickReactionsChannel v-if="room.displayType == ROOM_TYPE_CHANNEL" :event="eventForReactions" :timelineSet="timelineSet" v-on="$listeners"/>
|
||||||
<QuickReactions v-else :event="eventForReactions" :timelineSet="timelineSet" v-on="$listeners"/>
|
<QuickReactions v-else :event="eventForReactions" :timelineSet="timelineSet" v-on="$listeners"/>
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
</div>
|
</div>
|
||||||
<v-dialog
|
<v-dialog
|
||||||
v-model="dialog"
|
v-model="dialog"
|
||||||
:width="$vuetify.breakpoint.smAndUp ? '940px' : '90%'"
|
:width="$vuetify.display.smAndUp ? '940px' : '90%'"
|
||||||
>
|
>
|
||||||
<v-img :src="src"/>
|
<v-img :src="src"/>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
<v-avatar v-for="(member, index) in seenBy" :key="member.roomMember.userId" class="seen-by-user" size="16" color="grey"
|
<v-avatar v-for="(member, index) in seenBy" :key="member.roomMember.userId" class="seen-by-user" size="16" color="grey"
|
||||||
v-show="index < SHOW_LIMIT" @click="open">
|
v-show="index < SHOW_LIMIT" @click="open">
|
||||||
<AuthedImage v-if="memberAvatar(member.roomMember)" :src="memberAvatar(member.roomMember)" />
|
<AuthedImage v-if="memberAvatar(member.roomMember)" :src="memberAvatar(member.roomMember)" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
member.roomMember.name.substring(0, 1).toUpperCase()
|
member.roomMember.name.substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
<v-list-item-icon>
|
<v-list-item-icon>
|
||||||
<v-avatar size="40" color="grey">
|
<v-avatar size="40" color="grey">
|
||||||
<AuthedImage v-if="memberAvatar(member.roomMember)" :src="memberAvatar(member.roomMember)" />
|
<AuthedImage v-if="memberAvatar(member.roomMember)" :src="memberAvatar(member.roomMember)" />
|
||||||
<span v-else class="white--text headline">{{
|
<span v-else class="text-white headline">{{
|
||||||
member.roomMember.name.substring(0, 1).toUpperCase()
|
member.roomMember.name.substring(0, 1).toUpperCase()
|
||||||
}}</span>
|
}}</span>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ import VueResize from 'vue3-resize';
|
||||||
import 'vue3-resize/dist/vue3-resize.css';
|
import 'vue3-resize/dist/vue3-resize.css';
|
||||||
import VueClipboard from 'vue-clipboard2'
|
import VueClipboard from 'vue-clipboard2'
|
||||||
import Vue3Sanitize from "vue-3-sanitize";
|
import Vue3Sanitize from "vue-3-sanitize";
|
||||||
import createVuetify from './plugins/vuetify';
|
import vuetify from './plugins/vuetify';
|
||||||
import { Buffer } from 'buffer/'
|
import { Buffer } from 'buffer/'
|
||||||
import { createApp, h } from 'vue';
|
import { createApp, h } from 'vue';
|
||||||
globalThis.Buffer = Buffer;
|
globalThis.Buffer = Buffer;
|
||||||
|
|
@ -41,8 +41,6 @@ app.use(analytics);
|
||||||
app.use(VueClipboard);
|
app.use(VueClipboard);
|
||||||
app.use(audioPlayer);
|
app.use(audioPlayer);
|
||||||
|
|
||||||
const vuetify = createVuetify(config);
|
|
||||||
|
|
||||||
// Add bubble functionality to custom events.
|
// Add bubble functionality to custom events.
|
||||||
// From here: https://stackoverflow.com/questions/41993508/vuejs-bubbling-custom-events
|
// From here: https://stackoverflow.com/questions/41993508/vuejs-bubbling-custom-events
|
||||||
app.use((instance) => {
|
app.use((instance) => {
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,69 @@
|
||||||
import {createVuetify } from "vuetify";
|
import { createVuetify } from "vuetify";
|
||||||
|
import * as components from "vuetify/components";
|
||||||
|
import * as directives from "vuetify/directives";
|
||||||
|
import { aliases, md } from "vuetify/iconsets/md";
|
||||||
|
import { h } from "vue";
|
||||||
|
|
||||||
// Import all .vue icons and process them, so they can be used
|
// Import all .vue icons and process them, so they can be used
|
||||||
// as $vuetify.icons.<iconname>
|
// as $vuetify.icons.<iconname>
|
||||||
var icons = {}
|
var icons = {};
|
||||||
const modules = import.meta.glob('@/assets/icons/*.vue', {eager: true});
|
var customAliases = {};
|
||||||
Object.keys(modules).map(path => {
|
const modules = import.meta.glob("@/assets/icons/*.vue", { eager: true });
|
||||||
|
Object.keys(modules).map((path) => {
|
||||||
// Remove"./"
|
// Remove"./"
|
||||||
const parts = path.split("/");
|
const parts = path.split("/");
|
||||||
const iconName = parts[parts.length - 1].split(".")[0];
|
const iconName = parts[parts.length - 1].split(".")[0];
|
||||||
icons[iconName] = { component: modules[path].default }
|
icons[iconName] = { component: modules[path].default };
|
||||||
|
customAliases["vuetify.icons." + iconName] = "custom:" + iconName;
|
||||||
});
|
});
|
||||||
|
|
||||||
export default function(ignoredconfig) {
|
const custom = {
|
||||||
return createVuetify({
|
component: (props) => {
|
||||||
|
const {
|
||||||
|
icon,
|
||||||
|
...rest
|
||||||
|
} = props;
|
||||||
|
const stringIcon = icon;
|
||||||
|
if (icons[stringIcon]) {
|
||||||
|
return h(props.tag, rest, [h(icons[stringIcon].component)]);
|
||||||
|
}
|
||||||
|
return md.component(props);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
install(app, ignoredOptions) {
|
||||||
|
const options = {
|
||||||
|
components,
|
||||||
|
directives,
|
||||||
icons: {
|
icons: {
|
||||||
iconfont: 'md',
|
defaultSet: "md",
|
||||||
values: icons,
|
aliases: {
|
||||||
|
...aliases,
|
||||||
|
...customAliases,
|
||||||
|
},
|
||||||
|
sets: {
|
||||||
|
md, custom,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
options: {
|
defaults: {
|
||||||
customProperties: true
|
global: {
|
||||||
|
density: "comfortable",
|
||||||
|
},
|
||||||
|
VBtn: {
|
||||||
|
variant: "flat",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
theme: {
|
theme: {
|
||||||
options: {
|
options: {
|
||||||
customProperties: true,
|
customProperties: true,
|
||||||
},
|
},
|
||||||
dark: false,
|
dark: false,
|
||||||
}
|
},
|
||||||
});
|
};
|
||||||
}
|
const vuetify = createVuetify(options);
|
||||||
|
app.use(vuetify);
|
||||||
|
app.config.globalProperties.$vuetify = vuetify;
|
||||||
|
app.$vuetify = vuetify;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -251,6 +251,8 @@ export default {
|
||||||
// if (user.is_guest) {
|
// if (user.is_guest) {
|
||||||
// this.matrixClient.setGuest(true);
|
// this.matrixClient.setGuest(true);
|
||||||
// }
|
// }
|
||||||
|
console.log("MATRIX CLIENT", this.matrixClient);
|
||||||
|
|
||||||
return this.matrixClient
|
return this.matrixClient
|
||||||
.initCrypto()
|
.initCrypto()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ function VuetifyResolver() {
|
||||||
resolve: (name) => {
|
resolve: (name) => {
|
||||||
console.log("rESOLVE", name);
|
console.log("rESOLVE", name);
|
||||||
if (name.match(/^V[A-Z]/) && !name.includes("VEmojiPicker"))
|
if (name.match(/^V[A-Z]/) && !name.includes("VEmojiPicker"))
|
||||||
return { name, from: './node_modules/vuetify/lib/components' }
|
return { name, from: './node_modules/vuetify/components' }
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -59,7 +59,6 @@ export default defineConfig(({mode}) => ({
|
||||||
alias: [
|
alias: [
|
||||||
{ find: "@", replacement: fileURLToPath(new URL("./src", import.meta.url)) },
|
{ find: "@", replacement: fileURLToPath(new URL("./src", import.meta.url)) },
|
||||||
{ find: "~@", replacement: fileURLToPath(new URL("./src", import.meta.url)) },
|
{ find: "~@", replacement: fileURLToPath(new URL("./src", import.meta.url)) },
|
||||||
{ find: "~vuetify/src", replacement: fileURLToPath(new URL("./node_modules/vuetify/lib", import.meta.url)) },
|
|
||||||
{ find: "vue", replacement: fileURLToPath(new URL("./node_modules/vue/dist/vue.esm-bundler.js", import.meta.url)) },
|
{ find: "vue", replacement: fileURLToPath(new URL("./node_modules/vue/dist/vue.esm-bundler.js", import.meta.url)) },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue