Merge branch 'dev'

This commit is contained in:
N-Pex 2022-10-19 16:20:38 +02:00
commit d7b6d14cf8
28 changed files with 21840 additions and 6321 deletions

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 78 KiB

28012
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -9,11 +9,14 @@
"create-sticker-config": "node ./create_sticker_config.js $1" "create-sticker-config": "node ./create_sticker_config.js $1"
}, },
"dependencies": { "dependencies": {
"@matrix-org/olm": "^3.2.8", "@matrix-org/olm": "^3.2.12",
"aes-js": "^3.1.2", "aes-js": "^3.1.2",
"axios": "^0.21.0", "axios": "^0.21.0",
"browserify-fs": "^1.0.0",
"buffer": "^6.0.3",
"clean-insights-sdk": "^2.4", "clean-insights-sdk": "^2.4",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"crypto-browserify": "^3.12.0",
"data-uri-to-buffer": "^3.0.1", "data-uri-to-buffer": "^3.0.1",
"dayjs": "^1.10.3", "dayjs": "^1.10.3",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
@ -26,13 +29,15 @@
"jszip": "^3.9.1", "jszip": "^3.9.1",
"linkifyjs": "3.0.0-beta.3", "linkifyjs": "3.0.0-beta.3",
"material-design-icons-iconfont": "^6.1", "material-design-icons-iconfont": "^6.1",
"matrix-js-sdk": "^17.2.0", "matrix-js-sdk": "^19.7.0",
"md-gum-polyfill": "^1.0.0", "md-gum-polyfill": "^1.0.0",
"mic-recorder-to-mp3": "^2.2.2", "mic-recorder-to-mp3": "^2.2.2",
"path-browserify": "^1.0.1",
"pretty-bytes": "^5.6.0", "pretty-bytes": "^5.6.0",
"qrcode": "^1.4.4", "qrcode": "^1.4.4",
"raw-loader": "^4.0.2", "raw-loader": "^4.0.2",
"roboto-fontface": "*", "roboto-fontface": "*",
"stream-browserify": "^3.0.0",
"v-emoji-picker": "^2.3.1", "v-emoji-picker": "^2.3.1",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-clipboard2": "^0.3.1", "vue-clipboard2": "^0.3.1",
@ -46,11 +51,11 @@
"vuex-persist": "^3.1.3" "vuex-persist": "^3.1.3"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0", "@vue/cli-plugin-babel": "^5.0.8",
"@vue/cli-plugin-eslint": "~4.5.0", "@vue/cli-plugin-eslint": "^5.0.8",
"@vue/cli-service": "~4.5.0", "@vue/cli-service": "^5.0.8",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"copy-webpack-plugin": "^5.1.2", "copy-webpack-plugin": "^11.0.0",
"eslint": "^7.0", "eslint": "^7.0",
"eslint-plugin-vue": "^7.0", "eslint-plugin-vue": "^7.0",
"sass": "^1.19.0", "sass": "^1.19.0",

View file

@ -9,11 +9,14 @@
"create-sticker-config": "node ./create_sticker_config.js $1" "create-sticker-config": "node ./create_sticker_config.js $1"
}, },
"dependencies": { "dependencies": {
"@matrix-org/olm": "^3.2.8", "@matrix-org/olm": "^3.2.12",
"aes-js": "^3.1.2", "aes-js": "^3.1.2",
"axios": "^0.21.0", "axios": "^0.21.0",
"browserify-fs": "^1.0.0",
"buffer": "^6.0.3",
"clean-insights-sdk": "^2.4", "clean-insights-sdk": "^2.4",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"crypto-browserify": "^3.12.0",
"data-uri-to-buffer": "^3.0.1", "data-uri-to-buffer": "^3.0.1",
"dayjs": "^1.10.3", "dayjs": "^1.10.3",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
@ -29,10 +32,12 @@
"matrix-js-sdk": "^17.2.0", "matrix-js-sdk": "^17.2.0",
"md-gum-polyfill": "^1.0.0", "md-gum-polyfill": "^1.0.0",
"mic-recorder-to-mp3": "^2.2.2", "mic-recorder-to-mp3": "^2.2.2",
"path-browserify": "^1.0.1",
"pretty-bytes": "^5.6.0", "pretty-bytes": "^5.6.0",
"qrcode": "^1.4.4", "qrcode": "^1.4.4",
"raw-loader": "^4.0.2", "raw-loader": "^4.0.2",
"roboto-fontface": "*", "roboto-fontface": "*",
"stream-browserify": "^3.0.0",
"v-emoji-picker": "^2.3.1", "v-emoji-picker": "^2.3.1",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-clipboard2": "^0.3.1", "vue-clipboard2": "^0.3.1",
@ -46,11 +51,11 @@
"vuex-persist": "^3.1.3" "vuex-persist": "^3.1.3"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0", "@vue/cli-plugin-babel": "^5.0.8",
"@vue/cli-plugin-eslint": "~4.5.0", "@vue/cli-plugin-eslint": "^5.0.8",
"@vue/cli-service": "~4.5.0", "@vue/cli-service": "^5.0.8",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"copy-webpack-plugin": "^5.1.2", "copy-webpack-plugin": "^11.0.0",
"eslint": "^7.0", "eslint": "^7.0",
"eslint-plugin-vue": "^7.0", "eslint-plugin-vue": "^7.0",
"sass": "^1.19.0", "sass": "^1.19.0",

View file

@ -1,5 +1,13 @@
.cursor-pointer { .cursor-pointer {
cursor: pointer; cursor: pointer !important;
}
.cursor-default {
cursor: default !important;
}
.cursor-text {
cursor: text !important;
} }
.text-transform-0 { .text-transform-0 {

View file

@ -782,6 +782,8 @@ $admin-fg: white;
width: 64px !important; width: 64px !important;
height: 64px !important; height: 64px !important;
margin-bottom: 20px; margin-bottom: 20px;
cursor: default;
.headline { .headline {
font-size: 70 * $chat-text-size !important; font-size: 70 * $chat-text-size !important;
} }
@ -791,6 +793,9 @@ $admin-fg: white;
font-family: "Poppins", sans-serif; font-family: "Poppins", sans-serif;
font-size: 32px; font-size: 32px;
font-weight: 800; font-weight: 800;
input {
text-align: center;
}
} }
.topic { .topic {
@ -1051,6 +1056,16 @@ $admin-fg: white;
background: linear-gradient(180deg, #ffffff 0%, rgba(255, 255, 255, 0) 100%), #f5f5f7; background: linear-gradient(180deg, #ffffff 0%, rgba(255, 255, 255, 0) 100%), #f5f5f7;
box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.15); box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.15);
border-radius: 18px; border-radius: 18px;
input {
text-align: center;
}
.h2 {
&:hover {
cursor: text;
}
}
} }
.room-avatar { .room-avatar {
@ -1058,6 +1073,8 @@ $admin-fg: white;
width: 44px !important; width: 44px !important;
height: 44px !important; height: 44px !important;
margin-bottom: 20px; margin-bottom: 20px;
cursor: default;
.headline { .headline {
font-size: 70 * $chat-text-size !important; font-size: 70 * $chat-text-size !important;
} }

View file

@ -132,7 +132,8 @@
"purge_failed": "ཁ་བརྡ་ཁང་བཤིག་ཐུབ་མ་སོང་།", "purge_failed": "ཁ་བརྡ་ཁང་བཤིག་ཐུབ་མ་སོང་།",
"purge_removing_members": "ཚོགས་མི་ཁག་ཕྱིར་འདོན།", "purge_removing_members": "ཚོགས་མི་ཁག་ཕྱིར་འདོན།",
"purge_redacting_events": "ཁ་བརྡ་གཙང་གསུབ།", "purge_redacting_events": "ཁ་བརྡ་གཙང་གསུབ།",
"purge_set_room_state": "ཁ་བརྡ་ཁང་གི་རྣམ་པ་སྒྲིག་འགོད།" "purge_set_room_state": "ཁ་བརྡ་ཁང་གི་རྣམ་པ་སྒྲིག་འགོད།",
"room_name_required": ""
}, },
"message": { "message": {
"users_are_typing": "{count} ཚོགས་མི་ཡིས་གཏགས་བཞིན་འདུག", "users_are_typing": "{count} ཚོགས་མི་ཡིས་གཏགས་བཞིན་འདུག",

View file

@ -64,7 +64,8 @@
"members": "keine Mitglieder | 1 Mitglied | {count} Mitglieder", "members": "keine Mitglieder | 1 Mitglied | {count} Mitglieder",
"purge_removing_members": "Entfernen von Mitgliedern", "purge_removing_members": "Entfernen von Mitgliedern",
"purge_failed": "Fehler beim Bereinigen des Raums!", "purge_failed": "Fehler beim Bereinigen des Raums!",
"room_list_rooms": "Räume" "room_list_rooms": "Räume",
"room_name_required": ""
}, },
"room_welcome": { "room_welcome": {
"info": "Herzlich willkommen! Hier sind ein paar Dinge, die du über deinen Raum wissen solltest:", "info": "Herzlich willkommen! Hier sind ein paar Dinge, die du über deinen Raum wissen solltest:",

View file

@ -74,7 +74,8 @@
"purge_removing_members": "Removing members", "purge_removing_members": "Removing members",
"purge_failed": "Failed to purge room!", "purge_failed": "Failed to purge room!",
"room_list_invites": "Invites", "room_list_invites": "Invites",
"room_list_rooms": "Rooms" "room_list_rooms": "Rooms",
"room_name_required": "Room name is required"
}, },
"room_welcome": { "room_welcome": {
"info": "Welcome! Here are a few things to know about your room:", "info": "Welcome! Here are a few things to know about your room:",

View file

@ -143,7 +143,8 @@
"purge_set_room_state": "Estado de la sala", "purge_set_room_state": "Estado de la sala",
"purge_removing_members": "Eliminar miembros", "purge_removing_members": "Eliminar miembros",
"purge_failed": "¡Fallo en la purga de la sala!", "purge_failed": "¡Fallo en la purga de la sala!",
"room_list_rooms": "Salas" "room_list_rooms": "Salas",
"room_name_required": ""
}, },
"message": { "message": {
"user_powerlevel_change_from_to": "{user} de {powerOld} a {powerNew}", "user_powerlevel_change_from_to": "{user} de {powerOld} a {powerNew}",

View file

@ -104,7 +104,8 @@
}, },
"room": { "room": {
"leave": "Poistu", "leave": "Poistu",
"room_list_rooms": "Huoneet" "room_list_rooms": "Huoneet",
"room_name_required": ""
}, },
"room_welcome": { "room_welcome": {
"room_history_is": "Huoneen historia on {type}.", "room_history_is": "Huoneen historia on {type}.",

View file

@ -64,7 +64,8 @@
"purge_removing_members": "Suppression de membres", "purge_removing_members": "Suppression de membres",
"room_list_invites": "Invitations", "room_list_invites": "Invitations",
"room_list_rooms": "Salons", "room_list_rooms": "Salons",
"purge_redacting_events": "Rédaction des évènements" "purge_redacting_events": "Rédaction des évènements",
"room_name_required": ""
}, },
"room_welcome": { "room_welcome": {
"info": "Bienvenue ! Voici quelques informations à connaître sur votre salon :", "info": "Bienvenue ! Voici quelques informations à connaître sur votre salon :",

View file

@ -45,7 +45,8 @@
"purge_redacting_events": "Redazione di eventi", "purge_redacting_events": "Redazione di eventi",
"purge_failed": "Impossibile pulire la stanza!", "purge_failed": "Impossibile pulire la stanza!",
"room_list_invites": "Inviti", "room_list_invites": "Inviti",
"room_list_rooms": "Stanze" "room_list_rooms": "Stanze",
"room_name_required": ""
}, },
"menu": { "menu": {
"reply": "Risposta", "reply": "Risposta",

View file

@ -127,7 +127,8 @@
"room_list_rooms": "Rom", "room_list_rooms": "Rom",
"room_list_invites": "Invitasjoner", "room_list_invites": "Invitasjoner",
"purge_set_room_state": "Setter romtilstand", "purge_set_room_state": "Setter romtilstand",
"leave": "Forlat" "leave": "Forlat",
"room_name_required": ""
}, },
"purge_room": { "purge_room": {
"n_seconds": "{seconds} sekunder", "n_seconds": "{seconds} sekunder",

View file

@ -87,7 +87,8 @@
"purge_failed": "Houve uma falha ao eliminar a sala!", "purge_failed": "Houve uma falha ao eliminar a sala!",
"room_list_invites": "Convites", "room_list_invites": "Convites",
"room_list_rooms": "Salas", "room_list_rooms": "Salas",
"invitations": "Você não tem convites | Você tem 1 convite | Você tem {count} convites" "invitations": "Você não tem convites | Você tem 1 convite | Você tem {count} convites",
"room_name_required": ""
}, },
"room_welcome": { "room_welcome": {
"info": "Bem-vindo! Aqui estão algumas coisas que você deve saber sobre a sua sala:", "info": "Bem-vindo! Aqui estão algumas coisas que você deve saber sobre a sua sala:",

View file

@ -187,7 +187,8 @@
"purge_redacting_events": "Redactarea evenimentelor", "purge_redacting_events": "Redactarea evenimentelor",
"purge_set_room_state": "Setarea stării camerei", "purge_set_room_state": "Setarea stării camerei",
"leave": "Lăsați", "leave": "Lăsați",
"members": "fără membri | 1 membru | {count} membri" "members": "fără membri | 1 membru | {count} membri",
"room_name_required": ""
}, },
"message": { "message": {
"user_changed_guest_access_open": "{user} a permis oaspeților să intre în cameră", "user_changed_guest_access_open": "{user} a permis oaspeților să intre în cameră",

View file

@ -94,7 +94,8 @@
"purge_redacting_events": "پائالىيەتلەرنى تەھرىرلەش", "purge_redacting_events": "پائالىيەتلەرنى تەھرىرلەش",
"purge_set_room_state": "مۇنازىرەخانىنىڭ شەرتىنى قۇرۇش", "purge_set_room_state": "مۇنازىرەخانىنىڭ شەرتىنى قۇرۇش",
"leave": "كېتىش", "leave": "كېتىش",
"members": "ئەزالار يوق | بىر ئەزا | [نەپەر] ئەزا" "members": "ئەزالار يوق | بىر ئەزا | [نەپەر] ئەزا",
"room_name_required": ""
}, },
"leave": { "leave": {
"text_public_lastroom": "ئەگەر بۇ ئۆيگە يەنە قوشۇلماقچى بولسىڭىز ، يېڭى سالاھىيەت ئاستىدا قاتناشسىڭىز بولىدۇ. {ئىشلەتكۈچى} ، {ھەرىكەت} نى ساقلاش.", "text_public_lastroom": "ئەگەر بۇ ئۆيگە يەنە قوشۇلماقچى بولسىڭىز ، يېڭى سالاھىيەت ئاستىدا قاتناشسىڭىز بولىدۇ. {ئىشلەتكۈچى} ، {ھەرىكەت} نى ساقلاش.",

View file

@ -70,7 +70,8 @@
"purge_failed": "删除聊天室失败了!", "purge_failed": "删除聊天室失败了!",
"purge_removing_members": "移除成员", "purge_removing_members": "移除成员",
"purge_redacting_events": "编辑事件", "purge_redacting_events": "编辑事件",
"purge_set_room_state": "设置聊天室状态" "purge_set_room_state": "设置聊天室状态",
"room_name_required": ""
}, },
"message": { "message": {
"you": "您", "you": "您",

View file

@ -46,6 +46,7 @@
color="black" color="black"
:rules="roomNamerules" :rules="roomNamerules"
counter="50" counter="50"
maxlength="50"
background-color="white" background-color="white"
v-on:keyup.enter="$refs.topic.focus()" v-on:keyup.enter="$refs.topic.focus()"
:disabled="step > steps.INITIAL" :disabled="step > steps.INITIAL"

View file

@ -1,5 +1,5 @@
<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">
<v-img v-if="roomAvatar" :src="roomAvatar"/> <v-img v-if="roomAvatar" :src="roomAvatar"/>
<span v-else class="white--text headline">{{ <span v-else class="white--text headline">{{
roomName.substring(0, 1).toUpperCase() roomName.substring(0, 1).toUpperCase()

View file

@ -25,9 +25,33 @@
<div class="members ma-3 pa-3 mt-0 pt-0 text-center"> <div class="members ma-3 pa-3 mt-0 pt-0 text-center">
<room-avatar-picker /> <room-avatar-picker />
<div class="name">{{ roomName }}</div> <div :class="{'name':true,'cursor-default':!userCanPurgeRoom}">
<span
v-if="!isEditMode"
@click="onRoomNameClicked()"
>
{{ roomName }}
</span>
<v-text-field
v-model="editedRoomName"
ref="editedRoomName"
:rules="[(v) => !!v || $t('room.room_name_required')]"
:error="roomNameErrorMessage != null"
:error-messages="roomNameErrorMessage"
required
color="black"
counter="50"
background-color="white"
autofocus
v-if="isEditMode"
maxlength="50"
@blur="updateRoomName()"
@keyup.enter="updateRoomName()"
solo
></v-text-field>
</div>
<div class="topic">{{ roomTopic }}</div> <div class="topic">{{ roomTopic }}</div>
<div class="created-by"> <div :class="{'created-by':true, 'cursor-default':!userCanPurgeRoom}">
{{ $t("room_info.created_by", { user: creator }) }} {{ $t("room_info.created_by", { user: creator }) }}
</div> </div>
</div> </div>

View file

@ -8,7 +8,30 @@
<div class="text-center current-room"> <div class="text-center current-room">
<room-avatar-picker /> <room-avatar-picker />
<div class="h4">{{$t('room_info_sheet.this_room')}}</div> <div class="h4">{{$t('room_info_sheet.this_room')}}</div>
<div class="h2">{{ roomName }}</div> <div
class="h2"
v-if="!isEditMode"
@click="onRoomNameClicked()"
>
{{ roomName }}
</div>
<v-text-field
v-model="editedRoomName"
ref="editedRoomName"
:rules="[(v) => !!v || $t('room.room_name_required')]"
:error="roomNameErrorMessage != null"
:error-messages="roomNameErrorMessage"
required
color="black"
counter="50"
background-color="white"
autofocus
v-if="isEditMode"
maxlength="50"
@blur="updateRoomName()"
@keyup.enter="updateRoomName()"
solo
></v-text-field>
<v-btn <v-btn
id="btn-room-details" id="btn-room-details"
height="20px" height="20px"

View file

@ -1,7 +1,7 @@
export default { export default {
data() { data() {
return { return {
rememberMe: false rememberMe: this.$store.state.useLocalStorage
} }
}, },
methods: { methods: {

View file

@ -3,7 +3,10 @@ export default {
return { return {
roomJoinRule: null, roomJoinRule: null,
userCanChangeJoinRule: false, userCanChangeJoinRule: false,
userCanPurgeRoom: false userCanPurgeRoom: false,
editedRoomName: "",
isEditMode: false,
roomNameErrorMessage: null
} }
}, },
mounted() { mounted() {
@ -88,6 +91,20 @@ export default {
}, },
}, },
methods: { methods: {
onRoomNameClicked() {
if(this.userCanPurgeRoom) {
this.isEditMode = !this.isEditMode;
this.editedRoomName = this.roomName;
}
},
updateRoomName() {
if(this.editedRoomName) {
this.$matrix.matrixClient.setRoomName(this.room.roomId, this.editedRoomName);
this.isEditMode = !this.isEditMode;
} else {
this.$refs.editedRoomName.focus();
}
},
setRoomJoinRule(ignoredJoinRule) { setRoomJoinRule(ignoredJoinRule) {
// Do nothing in the general mixin, override in RoomInfo.vue // Do nothing in the general mixin, override in RoomInfo.vue
}, },

View file

@ -1,6 +1,6 @@
import olm from "@matrix-org/olm/olm"; import olm from "@matrix-org/olm/olm";
global.Olm = olm; global.Olm = olm;
import sdk from "matrix-js-sdk"; import * as sdk from "matrix-js-sdk";
import { TimelineWindow, EventTimeline } from "matrix-js-sdk"; import { TimelineWindow, EventTimeline } from "matrix-js-sdk";
import util from "../plugins/utils"; import util from "../plugins/utils";
import User from "../models/user"; import User from "../models/user";
@ -230,15 +230,11 @@ export default {
} }
const matrixStore = new sdk.MemoryStore(this.$store.getters.storage); const matrixStore = new sdk.MemoryStore(this.$store.getters.storage);
const webStorageSessionStore = new sdk.WebStorageSessionStore(
this.$store.getters.storage
);
var opts = { var opts = {
baseUrl: user.home_server, baseUrl: user.home_server,
userId: user.user_id, userId: user.user_id,
store: matrixStore, store: matrixStore,
sessionStore: webStorageSessionStore,
deviceId: user.device_id, deviceId: user.device_id,
accessToken: user.access_token, accessToken: user.access_token,
timelineSupport: true, timelineSupport: true,

View file

@ -1,4 +1,5 @@
const CopyWebpackPlugin = require("copy-webpack-plugin"); const CopyWebpackPlugin = require("copy-webpack-plugin");
const webpack = require("webpack");
module.exports = { module.exports = {
transpileDependencies: ["vuetify"], transpileDependencies: ["vuetify"],
@ -15,8 +16,23 @@ module.exports = {
configureWebpack: { configureWebpack: {
devtool: "source-map", devtool: "source-map",
resolve: {
fallback: {
"path": require.resolve("path-browserify"),
"crypto": false, //require.resolve("crypto-browserify"),
"stream": require.resolve("stream-browserify"),
"fs": require.resolve("browserify-fs"),
"buffer": require.resolve("buffer")
}
},
plugins: [ plugins: [
new CopyWebpackPlugin([ new webpack.ProvidePlugin({
Buffer: ['buffer', 'Buffer'],
}),
new webpack.ProvidePlugin({
process: 'process/browser',
}),
new CopyWebpackPlugin({patterns: [
{ {
from: "./src/assets/config.json", from: "./src/assets/config.json",
to: "./", to: "./",
@ -25,7 +41,7 @@ module.exports = {
from: "./node_modules/@matrix-org/olm/olm.wasm", from: "./node_modules/@matrix-org/olm/olm.wasm",
to: "./js/olm.wasm", to: "./js/olm.wasm",
}, },
]), ]}),
], ],
}, },