Merge branch 'dev'
This commit is contained in:
commit
ceaf5ba08f
36 changed files with 384 additions and 151 deletions
4
package-lock.json
generated
4
package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "keanuapp-weblite",
|
||||
"version": "0.1.25",
|
||||
"version": "0.1.27",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "keanuapp-weblite",
|
||||
"version": "0.1.25",
|
||||
"version": "0.1.27",
|
||||
"dependencies": {
|
||||
"@matrix-org/olm": "^3.2.12",
|
||||
"aes-js": "^3.1.2",
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
"type": "ci",
|
||||
"config": {
|
||||
"server": "https://metrics.cleaninsights.org/cleaninsights.php",
|
||||
"siteId": 14,
|
||||
"siteId": 25,
|
||||
"timeout": 5,
|
||||
"persistEveryNTimes": 1,
|
||||
"debug": true,
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
"type": "matomo",
|
||||
"config": {
|
||||
"server": "https://metrics.cleaninsights.org/",
|
||||
"siteId": "17"
|
||||
"siteId": "25"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -486,9 +486,17 @@ $admin-fg: white;
|
|||
overflow-wrap: break-word;
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
text-align: left;
|
||||
|
||||
.deleted-text {
|
||||
cursor: not-allowed;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.edit-marker {
|
||||
font-size: 0.8rem;
|
||||
color: #888888;
|
||||
margin-left: 6px;
|
||||
}
|
||||
.from-admin & {
|
||||
color: $admin-fg;
|
||||
|
|
@ -601,8 +609,7 @@ $admin-fg: white;
|
|||
.avatar-operations-strut {
|
||||
position: relative;
|
||||
height: 0px;
|
||||
|
||||
z-index: 1;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.message-operations {
|
||||
|
|
@ -801,6 +808,10 @@ $admin-fg: white;
|
|||
.topic {
|
||||
font-family: "Inter", sans-serif;
|
||||
font-size: 16px;
|
||||
|
||||
input {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.created-by {
|
||||
|
|
|
|||
20
src/assets/icons/poll.vue
Normal file
20
src/assets/icons/poll.vue
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<template>
|
||||
<svg width="17" height="19" viewBox="0 0 17 19" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M3.31462 16.4718C3.31462 16.9496 3.70026 17.3368 4.17609 17.3368L16.1385 17.3368C16.6144 17.3368 17 16.9496 17 16.4718L16.9998 13.6229C16.9998 13.1452 16.6142 12.7579 16.1383 12.7579L4.1764 12.7579C3.70056 12.7579 3.31492 13.1452 3.31492 13.6229L3.31512 16.4718L3.31462 16.4718Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M3.31462 10.4557C3.31462 10.9335 3.70026 11.3208 4.17609 11.3208L11.3428 11.3208C11.8186 11.3208 12.2043 10.9335 12.2043 10.4557L12.2043 7.60711C12.2043 7.12931 11.8186 6.74208 11.3428 6.74208L4.17609 6.74208C3.70026 6.74208 3.31462 7.12932 3.31462 7.60711L3.31462 10.4557Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M3.31451 1.59127L3.31451 4.44011C3.31451 4.91791 3.70016 5.30514 4.17598 5.30514L6.99509 5.30514C7.47093 5.30514 7.85657 4.91791 7.85657 4.44011L7.85637 1.59127C7.85637 1.11347 7.47073 0.726242 6.9949 0.726242L4.17599 0.726242C3.70035 0.726242 3.31452 1.11348 3.31452 1.59127L3.31451 1.59127Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M-2.00529e-05 0.587841L-2.0791e-05 17.4747C-2.08052e-05 17.7995 0.262306 18.0625 0.585404 18.0625L1.38198 18.0625C1.70528 18.0625 1.96741 17.7995 1.96741 17.4747L1.96741 0.587841C1.96741 0.263208 1.70508 -1.14667e-08 1.38198 -2.55897e-08L0.585405 -6.04092e-08C0.261911 -7.45496e-08 -2.00387e-05 0.263213 -2.00529e-05 0.587841Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
</template>
|
||||
|
|
@ -3,6 +3,11 @@
|
|||
"name": "འདུ་འཛོམས།",
|
||||
"tag_line": "འབྲེལ་མཐུད་བྱོས།"
|
||||
},
|
||||
"global": {
|
||||
"save": "",
|
||||
"password_didnot_match": "",
|
||||
"password_hint": ""
|
||||
},
|
||||
"fallbacks": {
|
||||
"download_name": "ཕབ་ལེན།",
|
||||
"original_text": "<མ་ཡིག>",
|
||||
|
|
@ -70,7 +75,8 @@
|
|||
"name_room": "ཁ་བརྡ་ཁང་ལ་མིང་ཐོགས།",
|
||||
"room_topic": "གལ་ཏེ་འདོད་པ་ཡོད་ན། ཚོགས་པའི་སྐོར་གྱི་འགྲེལ་བཤད་ཐུང་ངུ་ཞིག་འབྲི་ཆོག",
|
||||
"create": "བཟོས།",
|
||||
"room_name_limit_error_msg": ""
|
||||
"room_name_limit_error_msg": "",
|
||||
"colon_not_allowed": ""
|
||||
},
|
||||
"menu": {
|
||||
"logout": "ཕྱིར་ཐོན།",
|
||||
|
|
@ -105,7 +111,8 @@
|
|||
"set_language": "སྐད་ཡིག་བརྗེ་སྒྱུར།",
|
||||
"language_description": "འདུ་འཛོམས་སྐད་ཡིག་མང་པོའི་ནང་དུ་ཡོད།",
|
||||
"dont_see_yours": "ཁྱེད་ཀྱི་མིང་མཐོང་གི་མི་འདུག་གམ།",
|
||||
"tell_us": "ང་ཚོར་ཤོོད།"
|
||||
"tell_us": "ང་ཚོར་ཤོོད།",
|
||||
"display_name_required": ""
|
||||
},
|
||||
"device_list": {
|
||||
"not_verified": "ར་སྤྲོད་བྱས་མི་འདུག",
|
||||
|
|
@ -133,7 +140,8 @@
|
|||
"purge_removing_members": "ཚོགས་མི་ཁག་ཕྱིར་འདོན།",
|
||||
"purge_redacting_events": "ཁ་བརྡ་གཙང་གསུབ།",
|
||||
"purge_set_room_state": "ཁ་བརྡ་ཁང་གི་རྣམ་པ་སྒྲིག་འགོད།",
|
||||
"room_name_required": ""
|
||||
"room_name_required": "",
|
||||
"room_topic_required": ""
|
||||
},
|
||||
"message": {
|
||||
"users_are_typing": "{count} ཚོགས་མི་ཡིས་གཏགས་བཞིན་འདུག",
|
||||
|
|
@ -174,7 +182,10 @@
|
|||
"user_changed_guest_access_closed": "{user} མགྲོན་པོ་ཁ་བརྡ་ཁང་དུ་འཛུལ་བཅུག་མ་སོང་།",
|
||||
"reply_image": "",
|
||||
"reply_audio_message": "",
|
||||
"reply_video": ""
|
||||
"reply_video": "",
|
||||
"reply_poll": "",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"power_level": {
|
||||
"moderator": "མདོ་འཛིན་པ།",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
{
|
||||
"language_display_name": "Deutsch",
|
||||
"global": {
|
||||
"save": "",
|
||||
"password_didnot_match": "",
|
||||
"password_hint": ""
|
||||
},
|
||||
"menu": {
|
||||
"start_private_chat": "Private Diskussion mit diesem Benutzer",
|
||||
"reply": "Antworten",
|
||||
|
|
@ -54,7 +59,9 @@
|
|||
"user_left": "{user} hat das Gespräch verlassen",
|
||||
"user_joined": "{Benutzer} ist dem Gespräch beigetreten",
|
||||
"download_progress": "{percentage} % heruntergeladen",
|
||||
"user_changed_room_name": "{user} hat den Raumnamen in {name} geändert"
|
||||
"user_changed_room_name": "{user} hat den Raumnamen in {name} geändert",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"room": {
|
||||
"leave": "Verlassen",
|
||||
|
|
@ -65,7 +72,8 @@
|
|||
"purge_removing_members": "Entfernen von Mitgliedern",
|
||||
"purge_failed": "Fehler beim Bereinigen des Raums!",
|
||||
"room_list_rooms": "Räume",
|
||||
"room_name_required": ""
|
||||
"room_name_required": "",
|
||||
"room_topic_required": ""
|
||||
},
|
||||
"room_welcome": {
|
||||
"info": "Herzlich willkommen! Hier sind ein paar Dinge, die du über deinen Raum wissen solltest:",
|
||||
|
|
@ -96,7 +104,8 @@
|
|||
"next": "Nächste",
|
||||
"name_room": "Raum benennen",
|
||||
"room_topic": "Füge eine Beschreibung hinzu, wenn du möchtest",
|
||||
"room_name_limit_error_msg": ""
|
||||
"room_name_limit_error_msg": "",
|
||||
"colon_not_allowed": ""
|
||||
},
|
||||
"device_list": {
|
||||
"title": "GERÄTE",
|
||||
|
|
@ -125,7 +134,8 @@
|
|||
"password_old": "Altes Passwort",
|
||||
"password_new": "Neues Kennwort",
|
||||
"password_repeat": "Wiederhole das neue Passwort",
|
||||
"display_name": "Anzeigename"
|
||||
"display_name": "Anzeigename",
|
||||
"display_name_required": ""
|
||||
},
|
||||
"profile_info_popup": {
|
||||
"you_are": "Du bist",
|
||||
|
|
|
|||
|
|
@ -4,6 +4,11 @@
|
|||
"name": "Convene",
|
||||
"tag_line": "Simply connect"
|
||||
},
|
||||
"global": {
|
||||
"save": "Save",
|
||||
"password_didnot_match": "Password didn't match",
|
||||
"password_hint": "Minimum 12 character containing atleast one numeric, one uppercase and one lowercase letter"
|
||||
},
|
||||
"menu": {
|
||||
"start_private_chat": "Private chat with this user",
|
||||
"reply": "Reply",
|
||||
|
|
@ -63,7 +68,10 @@
|
|||
"reply_image": "Image",
|
||||
"reply_audio_message": "Audio message",
|
||||
"reply_video": "Video",
|
||||
"time_ago": "Today | Yesterday | {count} days ago"
|
||||
"reply_poll": "Poll",
|
||||
"time_ago": "Today | Yesterday | {count} days ago",
|
||||
"outgoing_message_deleted_text": "You deleted this message.",
|
||||
"incoming_message_deleted_text": "This message was deleted."
|
||||
},
|
||||
"room": {
|
||||
"invitations": "You have no invitations | You have 1 invitation | You have {count} invitations",
|
||||
|
|
@ -75,7 +83,8 @@
|
|||
"purge_failed": "Failed to purge room!",
|
||||
"room_list_invites": "Invites",
|
||||
"room_list_rooms": "Rooms",
|
||||
"room_name_required": "Room name is required"
|
||||
"room_name_required": "Room name is required",
|
||||
"room_topic_required": "Room description is required"
|
||||
},
|
||||
"room_welcome": {
|
||||
"info": "Welcome! Here are a few things to know about your room:",
|
||||
|
|
@ -106,7 +115,8 @@
|
|||
"status_creating": "Creating room",
|
||||
"status_avatar_total": "Uploading avatar: {count} of {total}",
|
||||
"status_avatar": "Uploading avatar: {count}",
|
||||
"room_name_limit_error_msg": "Maximum 50 characters allowed"
|
||||
"room_name_limit_error_msg": "Maximum 50 characters allowed",
|
||||
"colon_not_allowed": "Colon is not allowed"
|
||||
},
|
||||
"device_list": {
|
||||
"title": "DEVICES",
|
||||
|
|
@ -139,7 +149,8 @@
|
|||
"password_old": "Old password",
|
||||
"password_new": "New password",
|
||||
"password_repeat": "Repeat new password",
|
||||
"display_name": "Display name"
|
||||
"display_name": "Display name",
|
||||
"display_name_required": "Display name is required"
|
||||
},
|
||||
"profile_info_popup": {
|
||||
"you_are": "You are",
|
||||
|
|
|
|||
|
|
@ -4,6 +4,11 @@
|
|||
"name": "Convene",
|
||||
"tag_line": "Simplemente conectar"
|
||||
},
|
||||
"global": {
|
||||
"save": "",
|
||||
"password_didnot_match": "",
|
||||
"password_hint": ""
|
||||
},
|
||||
"room_info": {
|
||||
"identity": "Has iniciado sesión como {displayName}.",
|
||||
"my_profile": "Mi perfil",
|
||||
|
|
@ -83,7 +88,8 @@
|
|||
"set_language": "Establece tu Idioma",
|
||||
"language_description": "Convine esta disponible en varios Idiomas.",
|
||||
"dont_see_yours": "¿No ves el tuyo?",
|
||||
"tell_us": "Dinos."
|
||||
"tell_us": "Dinos.",
|
||||
"display_name_required": ""
|
||||
},
|
||||
"login": {
|
||||
"login": "Iniciar sesión",
|
||||
|
|
@ -122,7 +128,8 @@
|
|||
"new_room": "Nueva Sala",
|
||||
"create": "Crear",
|
||||
"room_topic": "Añade una descripción si quieres",
|
||||
"room_name_limit_error_msg": ""
|
||||
"room_name_limit_error_msg": "",
|
||||
"colon_not_allowed": ""
|
||||
},
|
||||
"room_welcome": {
|
||||
"join_public": "Cualquiera puede unirse abriendo este vínculo: {link}",
|
||||
|
|
@ -144,7 +151,8 @@
|
|||
"purge_removing_members": "Eliminar miembros",
|
||||
"purge_failed": "¡Fallo en la purga de la sala!",
|
||||
"room_list_rooms": "Salas",
|
||||
"room_name_required": ""
|
||||
"room_name_required": "",
|
||||
"room_topic_required": ""
|
||||
},
|
||||
"message": {
|
||||
"user_powerlevel_change_from_to": "{user} de {powerOld} a {powerNew}",
|
||||
|
|
@ -184,8 +192,11 @@
|
|||
"reply_image": "Imagen",
|
||||
"reply_audio_message": "Mensaje de audio",
|
||||
"reply_video": "Vídeo",
|
||||
"reply_poll": "",
|
||||
"user_changed_guest_access_closed": "{user} no has permitido que los invitados se unan a la sala",
|
||||
"user_changed_guest_access_open": "{user} has permitido que los invitados se unieran a la sala"
|
||||
"user_changed_guest_access_open": "{user} has permitido que los invitados se unieran a la sala",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"menu": {
|
||||
"login": "Iniciar sesión",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
{
|
||||
"global": {
|
||||
"save": "",
|
||||
"password_didnot_match": "",
|
||||
"password_hint": ""
|
||||
},
|
||||
"menu": {
|
||||
"back": "TAKAISIN",
|
||||
"start_private_chat": "Yksityinen keskustelu tämän käyttäjän kanssa",
|
||||
|
|
@ -28,7 +33,8 @@
|
|||
"add_people": "Lisää ihmisiä",
|
||||
"link_copied": "Linkki kopioitu!",
|
||||
"public_info": "Kuka tahansa, jolla on linkki",
|
||||
"room_name_limit_error_msg": ""
|
||||
"room_name_limit_error_msg": "",
|
||||
"colon_not_allowed": ""
|
||||
},
|
||||
"purge_room": {
|
||||
"n_seconds": "{seconds} sekuntia",
|
||||
|
|
@ -100,12 +106,15 @@
|
|||
"user_joined": "{user} liittyi keskusteluun",
|
||||
"file_prefix": "Tiedosto: ",
|
||||
"edited": "(muokattu)",
|
||||
"users_are_typing": "{count} jäsentä kirjoitavat"
|
||||
"users_are_typing": "{count} jäsentä kirjoitavat",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"room": {
|
||||
"leave": "Poistu",
|
||||
"room_list_rooms": "Huoneet",
|
||||
"room_name_required": ""
|
||||
"room_name_required": "",
|
||||
"room_topic_required": ""
|
||||
},
|
||||
"room_welcome": {
|
||||
"room_history_is": "Huoneen historia on {type}.",
|
||||
|
|
@ -124,7 +133,8 @@
|
|||
"set_password": "Aseta salasana",
|
||||
"select_language": "Kieli",
|
||||
"password_old": "Vanha salasana",
|
||||
"display_name": "Näyttönimi"
|
||||
"display_name": "Näyttönimi",
|
||||
"display_name_required": ""
|
||||
},
|
||||
"profile_info_popup": {
|
||||
"want_more": "Haluatko lisää?",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
{
|
||||
"global": {
|
||||
"save": "",
|
||||
"password_didnot_match": "",
|
||||
"password_hint": ""
|
||||
},
|
||||
"menu": {
|
||||
"edit": "Modifier",
|
||||
"start_private_chat": "Discussion privée avec cet utilisateur",
|
||||
|
|
@ -54,7 +59,9 @@
|
|||
"room_joinrule_public": "public",
|
||||
"unread_messages": "Messages non lus",
|
||||
"users_are_typing": "{count} membres écrivent",
|
||||
"room_powerlevel_change": "{user} a changé le statut de {changes}"
|
||||
"room_powerlevel_change": "{user} a changé le statut de {changes}",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"room": {
|
||||
"members": "aucun membre | 1 membre | {count} membres",
|
||||
|
|
@ -65,7 +72,8 @@
|
|||
"room_list_invites": "Invitations",
|
||||
"room_list_rooms": "Salons",
|
||||
"purge_redacting_events": "Rédaction des évènements",
|
||||
"room_name_required": ""
|
||||
"room_name_required": "",
|
||||
"room_topic_required": ""
|
||||
},
|
||||
"room_welcome": {
|
||||
"info": "Bienvenue ! Voici quelques informations à connaître sur votre salon :",
|
||||
|
|
@ -96,7 +104,8 @@
|
|||
"public_info": "Quiconque avec un lien",
|
||||
"join_permissions_info": "Ces autorisations déterminent comment les personnes peuvent rejoindre le salon et avec quelle facilité d’autres personnes peuvent être invitées. Elles peuvent être modifiées à tout moment.",
|
||||
"status_creating": "Création du salon",
|
||||
"room_name_limit_error_msg": ""
|
||||
"room_name_limit_error_msg": "",
|
||||
"colon_not_allowed": ""
|
||||
},
|
||||
"device_list": {
|
||||
"title": "APPAREILS",
|
||||
|
|
@ -125,7 +134,8 @@
|
|||
"display_name": "Nom d’affichage",
|
||||
"title": "Mon profil",
|
||||
"set_password": "Définir un mot de passe",
|
||||
"password_new": "Nouveau mot de passe"
|
||||
"password_new": "Nouveau mot de passe",
|
||||
"display_name_required": ""
|
||||
},
|
||||
"profile_info_popup": {
|
||||
"you_are": "Vous êtes",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
{
|
||||
"global": {
|
||||
"save": "",
|
||||
"password_didnot_match": "",
|
||||
"password_hint": ""
|
||||
},
|
||||
"message": {
|
||||
"file_prefix": "File: ",
|
||||
"unread_messages": "Messaggi non letti",
|
||||
|
|
@ -35,7 +40,9 @@
|
|||
"room_history_world_readable": "leggibile da chiunque",
|
||||
"room_history_shared": "leggibile da tutti i membri nella stanza",
|
||||
"user_is_typing": "{user} sta scrivendo",
|
||||
"users_are_typing": "{count} membri stanno scrivendo"
|
||||
"users_are_typing": "{count} membri stanno scrivendo",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"room": {
|
||||
"purge_removing_members": "Rimozione di membri",
|
||||
|
|
@ -46,7 +53,8 @@
|
|||
"purge_failed": "Impossibile pulire la stanza!",
|
||||
"room_list_invites": "Inviti",
|
||||
"room_list_rooms": "Stanze",
|
||||
"room_name_required": ""
|
||||
"room_name_required": "",
|
||||
"room_topic_required": ""
|
||||
},
|
||||
"menu": {
|
||||
"reply": "Risposta",
|
||||
|
|
@ -95,7 +103,8 @@
|
|||
"invite_info": "Solo le persone aggiunte",
|
||||
"join_permissions_info": "Questi permessi determinano come le persone possono entrare nella stanza e quanto facilmente gli altri possono essere invitati. Possono essere cambiati in qualsiasi momento.",
|
||||
"public_info": "Chiunque abbia un collegamento",
|
||||
"room_name_limit_error_msg": ""
|
||||
"room_name_limit_error_msg": "",
|
||||
"colon_not_allowed": ""
|
||||
},
|
||||
"device_list": {
|
||||
"title": "DISPOSITIVI",
|
||||
|
|
@ -124,7 +133,8 @@
|
|||
"display_name": "Nome visualizzato",
|
||||
"change_name": "Cambia il nome",
|
||||
"change_password": "Cambia la password",
|
||||
"password_new": "Nuova password"
|
||||
"password_new": "Nuova password",
|
||||
"display_name_required": ""
|
||||
},
|
||||
"profile_info_popup": {
|
||||
"you_are": "Sei",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,11 @@
|
|||
"name": "Convene",
|
||||
"tag_line": ""
|
||||
},
|
||||
"global": {
|
||||
"save": "",
|
||||
"password_didnot_match": "",
|
||||
"password_hint": ""
|
||||
},
|
||||
"message": {
|
||||
"user_changed_guest_access_open": "{user} tillot gjester å ta del i rommet",
|
||||
"user_powerlevel_change_from_to": "{user} fra {powerOld} til {powerNew}",
|
||||
|
|
@ -31,7 +36,10 @@
|
|||
"you": "Deg",
|
||||
"reply_image": "",
|
||||
"reply_audio_message": "",
|
||||
"reply_video": ""
|
||||
"reply_video": "",
|
||||
"reply_poll": "",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"device_list": {
|
||||
"title": "Enheter",
|
||||
|
|
@ -98,7 +106,8 @@
|
|||
"set_password": "Sett passord",
|
||||
"title": "Min profil",
|
||||
"display_name": "Visningsnavn",
|
||||
"password_repeat": "Gjenta nytt passord"
|
||||
"password_repeat": "Gjenta nytt passord",
|
||||
"display_name_required": ""
|
||||
},
|
||||
"login": {
|
||||
"password_required": "Passord kreves",
|
||||
|
|
@ -115,7 +124,8 @@
|
|||
"next": "Neste",
|
||||
"create": "Opprett",
|
||||
"new_room": "Nytt rom",
|
||||
"room_name_limit_error_msg": ""
|
||||
"room_name_limit_error_msg": "",
|
||||
"colon_not_allowed": ""
|
||||
},
|
||||
"room_welcome": {
|
||||
"room_history_is": "Romhistorikken er {type}.",
|
||||
|
|
@ -128,7 +138,8 @@
|
|||
"room_list_invites": "Invitasjoner",
|
||||
"purge_set_room_state": "Setter romtilstand",
|
||||
"leave": "Forlat",
|
||||
"room_name_required": ""
|
||||
"room_name_required": "",
|
||||
"room_topic_required": ""
|
||||
},
|
||||
"purge_room": {
|
||||
"n_seconds": "{seconds} sekunder",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,11 @@
|
|||
"name": "Convocar",
|
||||
"tag_line": "Basta conectar"
|
||||
},
|
||||
"global": {
|
||||
"save": "",
|
||||
"password_didnot_match": "",
|
||||
"password_hint": ""
|
||||
},
|
||||
"invite": {
|
||||
"title": "Adiciona amigos",
|
||||
"done": "Feito",
|
||||
|
|
@ -76,7 +81,10 @@
|
|||
"reply_image": "Imagem",
|
||||
"reply_audio_message": "Mensagem de áudio",
|
||||
"reply_video": "Vídeo",
|
||||
"time_ago": "Hoje | Ontem | {count} dias atrás"
|
||||
"reply_poll": "",
|
||||
"time_ago": "Hoje | Ontem | {count} dias atrás",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"room": {
|
||||
"members": "sem membros | 1 membro | {count} membros",
|
||||
|
|
@ -88,7 +96,8 @@
|
|||
"room_list_invites": "Convites",
|
||||
"room_list_rooms": "Salas",
|
||||
"invitations": "Você não tem convites | Você tem 1 convite | Você tem {count} convites",
|
||||
"room_name_required": ""
|
||||
"room_name_required": "",
|
||||
"room_topic_required": ""
|
||||
},
|
||||
"room_welcome": {
|
||||
"info": "Bem-vindo! Aqui estão algumas coisas que você deve saber sobre a sua sala:",
|
||||
|
|
@ -119,7 +128,8 @@
|
|||
"status_creating": "Criando a sala",
|
||||
"status_avatar_total": "Enviando o avatar: {count} de {total}",
|
||||
"status_avatar": "Enviando avatar: {count}",
|
||||
"room_name_limit_error_msg": "O máximo de 50 caracteres são permitidos"
|
||||
"room_name_limit_error_msg": "O máximo de 50 caracteres são permitidos",
|
||||
"colon_not_allowed": ""
|
||||
},
|
||||
"device_list": {
|
||||
"title": "DISPOSITIVOS",
|
||||
|
|
@ -152,7 +162,8 @@
|
|||
"password_old": "Senha antiga",
|
||||
"password_new": "Nova senha",
|
||||
"password_repeat": "Repita a nova senha",
|
||||
"display_name": "Nome de exibição"
|
||||
"display_name": "Nome de exibição",
|
||||
"display_name_required": ""
|
||||
},
|
||||
"profile_info_popup": {
|
||||
"you_are": "Você é",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,11 @@
|
|||
"name": "Convene",
|
||||
"tag_line": "Conectați pur și simplu"
|
||||
},
|
||||
"global": {
|
||||
"save": "",
|
||||
"password_didnot_match": "",
|
||||
"password_hint": ""
|
||||
},
|
||||
"menu": {
|
||||
"ok": "OK",
|
||||
"done": "Realizat",
|
||||
|
|
@ -129,7 +134,8 @@
|
|||
"change_name": "Schimbă numele",
|
||||
"set_password": "Setați parola",
|
||||
"temporary_identity": "Această identitate este temporară. Setați o parolă pentru a o utiliza din nou",
|
||||
"title": "Profilul meu"
|
||||
"title": "Profilul meu",
|
||||
"display_name_required": ""
|
||||
},
|
||||
"login": {
|
||||
"login": "Autentificare",
|
||||
|
|
@ -167,7 +173,8 @@
|
|||
"next": "Următorul",
|
||||
"create": "Creați",
|
||||
"new_room": "Cameră nouă",
|
||||
"room_name_limit_error_msg": ""
|
||||
"room_name_limit_error_msg": "",
|
||||
"colon_not_allowed": ""
|
||||
},
|
||||
"room_welcome": {
|
||||
"got_it": "L-am prins",
|
||||
|
|
@ -188,7 +195,8 @@
|
|||
"purge_set_room_state": "Setarea stării camerei",
|
||||
"leave": "Lăsați",
|
||||
"members": "fără membri | 1 membru | {count} membri",
|
||||
"room_name_required": ""
|
||||
"room_name_required": "",
|
||||
"room_topic_required": ""
|
||||
},
|
||||
"message": {
|
||||
"user_changed_guest_access_open": "{user} a permis oaspeților să intre în cameră",
|
||||
|
|
@ -229,7 +237,10 @@
|
|||
"you": "Tu",
|
||||
"reply_image": "Imagine",
|
||||
"reply_audio_message": "Mesaj audio",
|
||||
"reply_video": "Videoclip"
|
||||
"reply_video": "Videoclip",
|
||||
"reply_poll": "",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"language_display_name": "Engleză",
|
||||
"fallbacks": {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,10 @@
|
|||
"reply_image": "",
|
||||
"reply_audio_message": "",
|
||||
"reply_video": "",
|
||||
"you": "ඔබ"
|
||||
"reply_poll": "",
|
||||
"you": "ඔබ",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"login": {
|
||||
"invalid_message": ""
|
||||
|
|
|
|||
|
|
@ -3,6 +3,11 @@
|
|||
"name": "Convene",
|
||||
"tag_line": ""
|
||||
},
|
||||
"global": {
|
||||
"save": "",
|
||||
"password_didnot_match": "",
|
||||
"password_hint": ""
|
||||
},
|
||||
"language_is_rtl": true,
|
||||
"menu": {
|
||||
"ok": "تامام",
|
||||
|
|
@ -62,7 +67,10 @@
|
|||
"user_changed_room_history": "قوللانغۇچى» مۇنازىرەخانىنىڭ تارىخىنى قۇردى»",
|
||||
"reply_image": "",
|
||||
"reply_audio_message": "",
|
||||
"reply_video": ""
|
||||
"reply_video": "",
|
||||
"reply_poll": "",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"language_display_name": "ئۇيغۇرچە",
|
||||
"new_room": {
|
||||
|
|
@ -84,7 +92,8 @@
|
|||
"next": "كېيىنكى",
|
||||
"create": "قۇرۇش",
|
||||
"new_room": "يېڭى مۇنازىرەخانا",
|
||||
"room_name_limit_error_msg": ""
|
||||
"room_name_limit_error_msg": "",
|
||||
"colon_not_allowed": ""
|
||||
},
|
||||
"room": {
|
||||
"purge_failed": "مۇنازىرەخانىنى يۇيۇش مەغلۇب بولدى!",
|
||||
|
|
@ -95,7 +104,8 @@
|
|||
"purge_set_room_state": "مۇنازىرەخانىنىڭ شەرتىنى قۇرۇش",
|
||||
"leave": "كېتىش",
|
||||
"members": "ئەزالار يوق | بىر ئەزا | [نەپەر] ئەزا",
|
||||
"room_name_required": ""
|
||||
"room_name_required": "",
|
||||
"room_topic_required": ""
|
||||
},
|
||||
"leave": {
|
||||
"text_public_lastroom": "ئەگەر بۇ ئۆيگە يەنە قوشۇلماقچى بولسىڭىز ، يېڭى سالاھىيەت ئاستىدا قاتناشسىڭىز بولىدۇ. {ئىشلەتكۈچى} ، {ھەرىكەت} نى ساقلاش.",
|
||||
|
|
@ -220,7 +230,8 @@
|
|||
"change_name": "ئىسىم ئۆزگەرتىش",
|
||||
"set_password": "پارول بەلگىلەڭ",
|
||||
"temporary_identity": "بۇ كىملىك ۋاقىتلىق. قايتا ئىشلىتىش ئۈچۈن پارول بەلگىلەڭ",
|
||||
"title": "مېنىڭ ئارخىپىم"
|
||||
"title": "مېنىڭ ئارخىپىم",
|
||||
"display_name_required": ""
|
||||
},
|
||||
"login": {
|
||||
"login": "كىرىش",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,11 @@
|
|||
"name": "Convene",
|
||||
"tag_line": "只需连接"
|
||||
},
|
||||
"global": {
|
||||
"save": "",
|
||||
"password_didnot_match": "",
|
||||
"password_hint": ""
|
||||
},
|
||||
"fallbacks": {
|
||||
"download_name": "下载",
|
||||
"original_text": "<原文>",
|
||||
|
|
@ -71,7 +76,8 @@
|
|||
"purge_removing_members": "移除成员",
|
||||
"purge_redacting_events": "编辑事件",
|
||||
"purge_set_room_state": "设置聊天室状态",
|
||||
"room_name_required": ""
|
||||
"room_name_required": "",
|
||||
"room_topic_required": ""
|
||||
},
|
||||
"message": {
|
||||
"you": "您",
|
||||
|
|
@ -112,7 +118,10 @@
|
|||
"user_changed_guest_access_closed": "{user} 不允许客人加入聊天室",
|
||||
"reply_image": "",
|
||||
"reply_audio_message": "",
|
||||
"reply_video": ""
|
||||
"reply_video": "",
|
||||
"reply_poll": "",
|
||||
"outgoing_message_deleted_text": "",
|
||||
"incoming_message_deleted_text": ""
|
||||
},
|
||||
"menu": {
|
||||
"login": "登录",
|
||||
|
|
@ -195,7 +204,8 @@
|
|||
"set_language": "设置您的语言",
|
||||
"language_description": "Convene 提供多种语言.",
|
||||
"dont_see_yours": "看不到你的?",
|
||||
"tell_us": "告诉我们。"
|
||||
"tell_us": "告诉我们。",
|
||||
"display_name_required": ""
|
||||
},
|
||||
"new_room": {
|
||||
"status_avatar": "正在上传头像:{count}",
|
||||
|
|
@ -217,7 +227,8 @@
|
|||
"new_room": "新的聊天室",
|
||||
"room_topic": "如果您愿意,请添加说明",
|
||||
"create": "创建",
|
||||
"room_name_limit_error_msg": ""
|
||||
"room_name_limit_error_msg": "",
|
||||
"colon_not_allowed": ""
|
||||
},
|
||||
"room_welcome": {
|
||||
"got_it": "知道了",
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
<!-- DAY Marker, shown for every new day in the timeline -->
|
||||
<div v-if="showDayMarkerBeforeEvent(event)" class="day-marker" :title="dayForEvent(event)" />
|
||||
|
||||
<div v-if="!event.isRelation() && !event.isRedacted() && !event.isRedaction()" :ref="event.getId()">
|
||||
<div v-if="!event.isRelation() && !event.isRedaction()" :ref="event.getId()">
|
||||
<div
|
||||
class="message-wrapper"
|
||||
v-on:touchstart="
|
||||
|
|
@ -114,18 +114,20 @@
|
|||
<v-row class="ma-0 pa-0">
|
||||
<div v-if="replyToEvent" class="row">
|
||||
<div class="col">
|
||||
<div class="font-weight-medium">{{ $t("message.replying_to", { user: replyToEvent.sender.name }) }}</div>
|
||||
<div class="font-weight-medium">{{ $t("message.replying_to", { user: senderDisplayName }) }}</div>
|
||||
<div v-if="replyToContentType === 'm.text'" class="reply-text" :title="replyToEvent.getContent().body">
|
||||
{{ replyToEvent.getContent().body | latestReply }}
|
||||
</div>
|
||||
<div v-if="replyToContentType === 'm.image'">{{ $t("message.reply_image") }}</div>
|
||||
<div v-if="replyToContentType === 'm.audio'">{{ $t("message.reply_audio_message") }}</div>
|
||||
<div v-if="replyToContentType === 'm.video'">{{ $t("message.reply_video") }}</div>
|
||||
<div v-if="replyToContentType === 'm.poll'">{{ $t("message.reply_poll") }}</div>
|
||||
</div>
|
||||
<div class="col col-auto" v-if="replyToContentType !== 'm.text'">
|
||||
<img v-if="replyToContentType === 'm.image'" width="150px" :src="replyToImg" class="rounded" />
|
||||
<img v-if="replyToContentType === 'm.image'" width="50px" height="50px" :src="replyToImg" class="rounded" />
|
||||
<v-img v-if="replyToContentType === 'm.audio'" src="@/assets/icons/audio_message.svg" />
|
||||
<v-img v-if="replyToContentType === 'm.video'" src="@/assets/icons/video_message.svg" />
|
||||
<v-icon v-if="replyToContentType === 'm.poll'" light>$vuetify.icons.poll</v-icon>
|
||||
</div>
|
||||
<div class="col col-auto">
|
||||
<v-btn fab x-small elevation="0" color="black" @click.stop="cancelEditReply">
|
||||
|
|
@ -546,6 +548,9 @@ export default {
|
|||
},
|
||||
|
||||
computed: {
|
||||
senderDisplayName() {
|
||||
return this.room.getMember(this.replyToEvent.sender.userId).name;
|
||||
},
|
||||
currentUser() {
|
||||
return this.$store.state.auth.user;
|
||||
},
|
||||
|
|
@ -1227,7 +1232,7 @@ export default {
|
|||
addReply(event) {
|
||||
this.replyToEvent = event;
|
||||
this.$refs.messageInput.focus();
|
||||
this.replyToContentType = event.getContent().msgtype;
|
||||
this.replyToContentType = event.getContent().msgtype || 'm.poll';
|
||||
this.setReplyToImage(event);
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@
|
|||
:disabled="step > steps.INITIAL"
|
||||
autofocus
|
||||
solo
|
||||
@update:error="updateErrorState"
|
||||
></v-text-field>
|
||||
<div class="text-left font-weight-light" v-show="roomName.length> 0">{{ $t("new_room.room_topic") }}</div>
|
||||
<v-text-field
|
||||
|
|
@ -63,13 +64,14 @@
|
|||
:disabled="step > steps.INITIAL"
|
||||
solo
|
||||
></v-text-field>
|
||||
<div class="error--text" v-if="roomCreationErrorMsg"> {{roomCreationErrorMsg}}</div>
|
||||
<v-btn
|
||||
id="btn-room-create"
|
||||
color="black"
|
||||
depressed
|
||||
class="filled-button"
|
||||
@click.stop="onCreate"
|
||||
:disabled="status ? true : roomName.length === 0 || roomName.length > 50"
|
||||
:disabled="isDisabled"
|
||||
>
|
||||
<div v-if="status && !enterRoomDialog" class="text-center">
|
||||
{{ status }}
|
||||
|
|
@ -298,7 +300,12 @@ export default {
|
|||
name: ""
|
||||
},
|
||||
enterRoomDialog: false,
|
||||
roomNamerules: [v => v.length <= 50 || this.$t("new_room.room_name_limit_error_msg")],
|
||||
roomNamerules: [
|
||||
v => v.length <= 50 || this.$t("new_room.room_name_limit_error_msg"),
|
||||
v => !v.includes(':') || this.$t("new_room.colon_not_allowed")
|
||||
],
|
||||
roomNameHasError: false,
|
||||
roomCreationErrorMsg: ""
|
||||
};
|
||||
},
|
||||
|
||||
|
|
@ -318,6 +325,9 @@ export default {
|
|||
},
|
||||
},
|
||||
computed: {
|
||||
isDisabled() {
|
||||
return this.status ? true : this.roomName.length === 0 || this.roomName.length > 50 || this.roomNameHasError
|
||||
},
|
||||
roomAvatarLetter() {
|
||||
if (!this.roomName) {
|
||||
return null;
|
||||
|
|
@ -337,6 +347,9 @@ export default {
|
|||
},
|
||||
|
||||
methods: {
|
||||
updateErrorState(errorState) {
|
||||
this.roomNameHasError = errorState
|
||||
},
|
||||
goBack() {
|
||||
if (this.step == steps.NAME_SET) {
|
||||
this.step = steps.INITIAL;
|
||||
|
|
@ -578,10 +591,8 @@ export default {
|
|||
return roomId;
|
||||
})
|
||||
.catch((error) => {
|
||||
this.status =
|
||||
(error.data && error.data.error) ||
|
||||
error.message ||
|
||||
error.toString();
|
||||
this.status = ""
|
||||
this.roomCreationErrorMsg = (error.data && error.data.error) || error.message || error.toString();
|
||||
this.step = steps.INITIAL; // revert
|
||||
return null;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -381,6 +381,7 @@ export default {
|
|||
.then(
|
||||
function (ignoreduser) {
|
||||
console.log("Join: joining room");
|
||||
this.$analytics.event("Invitations", "Room Joined");
|
||||
this.loadingMessage = this.$t("join.status_joining");
|
||||
return this.$matrix.matrixClient.joinRoom(this.roomId);
|
||||
}.bind(this)
|
||||
|
|
@ -422,6 +423,11 @@ export default {
|
|||
Math.floor(Math.random() * this.availableAvatars.length)
|
||||
]
|
||||
);
|
||||
// mounted() is called more than once, so multiple instances of this event
|
||||
// do not necessarily indicate a user was shown the join page more than once.
|
||||
// To analyze this data, segment users into those who have an "Invitations"
|
||||
// action and set up conversion tracking triggered by Room Joined (once per visit).
|
||||
this.$analytics.event("Invitations", "Join Page Shown");
|
||||
},
|
||||
destroyed() {
|
||||
this.$matrix.off("Room.myMembership", this.onMyMembership);
|
||||
|
|
|
|||
|
|
@ -103,13 +103,25 @@
|
|||
/>
|
||||
<v-text-field
|
||||
v-model="newPassword1"
|
||||
:append-icon="showPassword1 ? 'visibility' : 'visibility_off'"
|
||||
:hint="$t('global.password_hint')"
|
||||
:rules="[(v) => v ? !!v.match(passwordValidation) || $t('global.password_hint'):true]"
|
||||
:label="$t('profile.password_new')"
|
||||
type="password"
|
||||
counter="20"
|
||||
maxlength="20"
|
||||
:type="showPassword1 ? 'text' : 'password'"
|
||||
@click:append="showPassword1 = !showPassword1"
|
||||
@update:error="updateErrorState"
|
||||
/>
|
||||
<v-text-field
|
||||
v-model="newPassword2"
|
||||
:append-icon="showPassword2 ? 'visibility' : 'visibility_off'"
|
||||
:rules="[(v) => v===newPassword1 || $t('global.password_didnot_match')]"
|
||||
:label="$t('profile.password_repeat')"
|
||||
type="password"
|
||||
counter="20"
|
||||
maxlength="20"
|
||||
:type="showPassword2 ? 'text' : 'password'"
|
||||
@click:append="showPassword2 = !showPassword2"
|
||||
/>
|
||||
<div class="red--text" v-if="passwordErrorMessage">
|
||||
{{ passwordErrorMessage }}
|
||||
|
|
@ -134,7 +146,7 @@
|
|||
newPassword1
|
||||
)
|
||||
"
|
||||
>{{ $t("menu.ok") }}</v-btn
|
||||
>{{ $t("global.save") }}</v-btn
|
||||
>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
|
|
@ -149,7 +161,11 @@
|
|||
<v-card>
|
||||
<v-card-title>{{ $t("profile.display_name") }}</v-card-title>
|
||||
<v-card-text>
|
||||
<v-text-field v-model="editValue" />
|
||||
<v-text-field
|
||||
v-model="editValue"
|
||||
:rules="[(v) => !!v || $t('profile.display_name_required')]"
|
||||
required
|
||||
/>
|
||||
</v-card-text>
|
||||
<v-divider></v-divider>
|
||||
<v-card-actions>
|
||||
|
|
@ -165,7 +181,8 @@
|
|||
updateDisplayName(editValue);
|
||||
showEditDisplaynameDialog = false;
|
||||
"
|
||||
>{{ $t("menu.ok") }}</v-btn
|
||||
:disabled="!editValue"
|
||||
>{{ $t("global.save") }}</v-btn
|
||||
>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
|
|
@ -205,12 +222,16 @@ export default {
|
|||
showLogoutPopup: false,
|
||||
editValue: null,
|
||||
password: null,
|
||||
showPassword1: false,
|
||||
showPassword2: false,
|
||||
passwordValidation: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{12,20}$/,
|
||||
newPassword1: null,
|
||||
newPassword2: null,
|
||||
settingPassword: false,
|
||||
passwordErrorMessage: null,
|
||||
isAvatarLoaded: true,
|
||||
loadValue: 0
|
||||
loadValue: 0,
|
||||
newPasswordHasError: false
|
||||
};
|
||||
},
|
||||
|
||||
|
|
@ -253,6 +274,7 @@ export default {
|
|||
|
||||
passwordsMatch() {
|
||||
return (
|
||||
!this.newPasswordHasError &&
|
||||
this.newPassword1 &&
|
||||
this.newPassword2 &&
|
||||
this.newPassword1 == this.newPassword2
|
||||
|
|
@ -261,6 +283,9 @@ export default {
|
|||
},
|
||||
|
||||
methods: {
|
||||
updateErrorState(errorState) {
|
||||
this.newPasswordHasError = errorState
|
||||
},
|
||||
setPassword(oldPassword, newPassword) {
|
||||
this.settingPassword = true;
|
||||
this.passwordErrorMessage = null;
|
||||
|
|
|
|||
|
|
@ -27,12 +27,13 @@
|
|||
<room-avatar-picker />
|
||||
<div :class="{'name':true,'cursor-default':!userCanPurgeRoom}">
|
||||
<span
|
||||
v-if="!isEditMode"
|
||||
v-if="!isRoomNameEditMode"
|
||||
@click="onRoomNameClicked()"
|
||||
>
|
||||
{{ roomName }}
|
||||
</span>
|
||||
<v-text-field
|
||||
v-else
|
||||
v-model="editedRoomName"
|
||||
ref="editedRoomName"
|
||||
:rules="[(v) => !!v || $t('room.room_name_required')]"
|
||||
|
|
@ -43,14 +44,36 @@
|
|||
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':true,'cursor-default':!userCanPurgeRoom}">
|
||||
<span
|
||||
v-if="!isRoomTopicEditMode"
|
||||
@click="onRoomTopicClicked()"
|
||||
>
|
||||
{{ roomTopic }}
|
||||
</span>
|
||||
<v-text-field
|
||||
v-else
|
||||
v-model="editedRoomTopic"
|
||||
ref="editedRoomTopic"
|
||||
:rules="[(v) => !!v || $t('room.room_topic_required')]"
|
||||
:error="roomTopicErrorMessage != null"
|
||||
:error-messages="roomTopicErrorMessage"
|
||||
required
|
||||
color="black"
|
||||
background-color="white"
|
||||
autofocus
|
||||
@blur="updateRoomTopic()"
|
||||
@keyup.enter="updateRoomTopic()"
|
||||
solo
|
||||
>
|
||||
</v-text-field>
|
||||
</div>
|
||||
<div :class="{'created-by':true, 'cursor-default':!userCanPurgeRoom}">
|
||||
{{ $t("room_info.created_by", { user: creator }) }}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
<div class="h4">{{$t('room_info_sheet.this_room')}}</div>
|
||||
<div
|
||||
class="h2"
|
||||
v-if="!isEditMode"
|
||||
v-if="!isRoomNameEditMode"
|
||||
@click="onRoomNameClicked()"
|
||||
>
|
||||
{{ roomName }}
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
counter="50"
|
||||
background-color="white"
|
||||
autofocus
|
||||
v-if="isEditMode"
|
||||
v-if="isRoomNameEditMode"
|
||||
maxlength="50"
|
||||
@blur="updateRoomName()"
|
||||
@keyup.enter="updateRoomName()"
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ export default {
|
|||
dateForEvent(event) {
|
||||
return util.formatDay(event.getTs());
|
||||
},
|
||||
|
||||
|
||||
componentForEvent(event, isForExport = false) {
|
||||
switch (event.getType()) {
|
||||
case "m.room.member":
|
||||
|
|
@ -240,6 +240,9 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "m.room.encrypted":
|
||||
return event.getSender() != this.$matrix.currentUserId ? MessageIncomingText : MessageOutgoingText
|
||||
}
|
||||
return this.debugging ? DebugEvent : null;
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,10 +15,10 @@
|
|||
</v-avatar>
|
||||
<!-- SLOT FOR CONTENT -->
|
||||
<slot></slot>
|
||||
<div class="op-button" ref="opbutton">
|
||||
<v-btn id="btn-more" icon @click.stop="showContextMenu($refs.opbutton)"
|
||||
><v-icon>more_vert</v-icon></v-btn
|
||||
>
|
||||
<div class="op-button" ref="opbutton" v-if="!event.isRedacted()">
|
||||
<v-btn id="btn-more" icon @click.stop="showContextMenu($refs.opbutton)">
|
||||
<v-icon>more_vert</v-icon>
|
||||
</v-btn>
|
||||
</div>
|
||||
<QuickReactions :event="event" :timelineSet="timelineSet" />
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -2,24 +2,7 @@
|
|||
<message-incoming v-bind="{ ...$props, ...$attrs }" v-on="$listeners">
|
||||
<div class="bubble poll-bubble">
|
||||
<div class="poll-icon">
|
||||
<svg width="17" height="19" viewBox="0 0 17 19" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M3.31462 16.4718C3.31462 16.9496 3.70026 17.3368 4.17609 17.3368L16.1385 17.3368C16.6144 17.3368 17 16.9496 17 16.4718L16.9998 13.6229C16.9998 13.1452 16.6142 12.7579 16.1383 12.7579L4.1764 12.7579C3.70056 12.7579 3.31492 13.1452 3.31492 13.6229L3.31512 16.4718L3.31462 16.4718Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M3.31462 10.4557C3.31462 10.9335 3.70026 11.3208 4.17609 11.3208L11.3428 11.3208C11.8186 11.3208 12.2043 10.9335 12.2043 10.4557L12.2043 7.60711C12.2043 7.12931 11.8186 6.74208 11.3428 6.74208L4.17609 6.74208C3.70026 6.74208 3.31462 7.12932 3.31462 7.60711L3.31462 10.4557Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M3.31451 1.59127L3.31451 4.44011C3.31451 4.91791 3.70016 5.30514 4.17598 5.30514L6.99509 5.30514C7.47093 5.30514 7.85657 4.91791 7.85657 4.44011L7.85637 1.59127C7.85637 1.11347 7.47073 0.726242 6.9949 0.726242L4.17599 0.726242C3.70035 0.726242 3.31452 1.11348 3.31452 1.59127L3.31451 1.59127Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M-2.00529e-05 0.587841L-2.0791e-05 17.4747C-2.08052e-05 17.7995 0.262306 18.0625 0.585404 18.0625L1.38198 18.0625C1.70528 18.0625 1.96741 17.7995 1.96741 17.4747L1.96741 0.587841C1.96741 0.263208 1.70508 -1.14667e-08 1.38198 -2.55897e-08L0.585405 -6.04092e-08C0.261911 -7.45496e-08 -2.00387e-05 0.263213 -2.00529e-05 0.587841Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
<v-icon dark>$vuetify.icons.poll</v-icon>
|
||||
</div>
|
||||
|
||||
<div class="poll-question">{{ pollQuestion }}</div>
|
||||
|
|
|
|||
|
|
@ -11,10 +11,14 @@
|
|||
/>
|
||||
</div>
|
||||
<div class="message">
|
||||
<span v-html="linkify($sanitize(messageText))" />
|
||||
<span class="edit-marker" v-if="event.replacingEventId()"
|
||||
>{{ $t('edited') }}</span
|
||||
>
|
||||
<i v-if="event.isRedacted()" class="deleted-text">
|
||||
<v-icon :color="this.senderIsAdminOrModerator(this.event)?'white':''" size="small">block</v-icon>
|
||||
{{ $t('message.incoming_message_deleted_text')}}
|
||||
</i>
|
||||
<span v-html="linkify($sanitize(messageText))" v-else/>
|
||||
<span class="edit-marker" v-if="event.replacingEventId() && !event.isRedacted()">
|
||||
{{ $t('message.edited') }}
|
||||
</span>
|
||||
</div>
|
||||
<!-- <div>{{ JSON.stringify(event) }}</div> -->
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@
|
|||
</div>
|
||||
|
||||
<QuickReactions :event="event" :timelineSet="timelineSet" />
|
||||
<div class="op-button" ref="opbutton">
|
||||
<v-btn id="btn-show-menu" icon @click.stop="showContextMenu($refs.opbutton)"
|
||||
><v-icon>more_vert</v-icon></v-btn
|
||||
>
|
||||
<div class="op-button" ref="opbutton" v-if="!event.isRedacted()">
|
||||
<v-btn id="btn-show-menu" icon @click.stop="showContextMenu($refs.opbutton)">
|
||||
<v-icon>more_vert</v-icon>
|
||||
</v-btn>
|
||||
</div>
|
||||
<!-- SLOT FOR CONTENT -->
|
||||
<slot></slot>
|
||||
|
|
|
|||
|
|
@ -2,24 +2,7 @@
|
|||
<message-outgoing v-bind="{ ...$props, ...$attrs }" v-on="$listeners">
|
||||
<div class="bubble poll-bubble">
|
||||
<div class="poll-icon">
|
||||
<svg width="17" height="19" viewBox="0 0 17 19" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M3.31462 16.4718C3.31462 16.9496 3.70026 17.3368 4.17609 17.3368L16.1385 17.3368C16.6144 17.3368 17 16.9496 17 16.4718L16.9998 13.6229C16.9998 13.1452 16.6142 12.7579 16.1383 12.7579L4.1764 12.7579C3.70056 12.7579 3.31492 13.1452 3.31492 13.6229L3.31512 16.4718L3.31462 16.4718Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M3.31462 10.4557C3.31462 10.9335 3.70026 11.3208 4.17609 11.3208L11.3428 11.3208C11.8186 11.3208 12.2043 10.9335 12.2043 10.4557L12.2043 7.60711C12.2043 7.12931 11.8186 6.74208 11.3428 6.74208L4.17609 6.74208C3.70026 6.74208 3.31462 7.12932 3.31462 7.60711L3.31462 10.4557Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M3.31451 1.59127L3.31451 4.44011C3.31451 4.91791 3.70016 5.30514 4.17598 5.30514L6.99509 5.30514C7.47093 5.30514 7.85657 4.91791 7.85657 4.44011L7.85637 1.59127C7.85637 1.11347 7.47073 0.726242 6.9949 0.726242L4.17599 0.726242C3.70035 0.726242 3.31452 1.11348 3.31452 1.59127L3.31451 1.59127Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M-2.00529e-05 0.587841L-2.0791e-05 17.4747C-2.08052e-05 17.7995 0.262306 18.0625 0.585404 18.0625L1.38198 18.0625C1.70528 18.0625 1.96741 17.7995 1.96741 17.4747L1.96741 0.587841C1.96741 0.263208 1.70508 -1.14667e-08 1.38198 -2.55897e-08L0.585405 -6.04092e-08C0.261911 -7.45496e-08 -2.00387e-05 0.263213 -2.00529e-05 0.587841Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
<v-icon light>$vuetify.icons.poll</v-icon>
|
||||
</div>
|
||||
|
||||
<div class="poll-question">{{ pollQuestion }}</div>
|
||||
|
|
|
|||
|
|
@ -12,10 +12,14 @@
|
|||
</div>
|
||||
|
||||
<div class="message">
|
||||
<span v-html="linkify($sanitize(messageText))" />
|
||||
<span class="edit-marker" v-if="event.replacingEventId()"
|
||||
>{{ $t('edited') }}</span
|
||||
>
|
||||
<i v-if="event.isRedacted()" class="deleted-text">
|
||||
<v-icon size="small">block</v-icon>
|
||||
{{ $t('message.outgoing_message_deleted_text')}}
|
||||
</i>
|
||||
<span v-html="linkify($sanitize(messageText))" v-else/>
|
||||
<span class="edit-marker" v-if="event.replacingEventId() && !event.isRedacted()">
|
||||
{{ $t('message.edited') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</message-outgoing>
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ export default {
|
|||
}
|
||||
},
|
||||
mounted() {
|
||||
this.reactions = this.timelineSet.getRelationsForEvent(this.event.getId(), 'm.annotation', 'm.reaction');
|
||||
this.reactions = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), 'm.annotation', 'm.reaction');
|
||||
this.event.on("Event.relationsCreated", this.onRelationsCreated);
|
||||
},
|
||||
beforeDestroy() {
|
||||
|
|
@ -40,7 +40,7 @@ export default {
|
|||
},
|
||||
methods: {
|
||||
onRelationsCreated() {
|
||||
this.reactions = this.timelineSet.getRelationsForEvent(this.event.getId(), 'm.annotation', 'm.reaction');
|
||||
this.reactions = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), 'm.annotation', 'm.reaction');
|
||||
},
|
||||
onClickEmoji(emoji) {
|
||||
this.$bubble('send-quick-reaction', {reaction:emoji, event:this.event});
|
||||
|
|
@ -75,7 +75,7 @@ export default {
|
|||
oldValue.off('Relations.add', this.onAddRelation);
|
||||
}
|
||||
if (newValue) {
|
||||
newValue.on('Relations.add', this.onAddRelation);
|
||||
newValue.on('Relations.add', this.onAddRelation);
|
||||
}
|
||||
this.processReactions();
|
||||
},
|
||||
|
|
|
|||
|
|
@ -70,8 +70,8 @@ export default {
|
|||
|
||||
// Look for poll end
|
||||
this.pollEndRelations =
|
||||
this.timelineSet.getRelationsForEvent(this.event.getId(), "m.reference", "m.poll.end") ||
|
||||
this.timelineSet.getRelationsForEvent(this.event.getId(), "m.reference", "org.matrix.msc3381.poll.end");
|
||||
this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.reference", "m.poll.end") ||
|
||||
this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.reference", "org.matrix.msc3381.poll.end");
|
||||
if (this.pollEndRelations) {
|
||||
const endMessages = this.pollEndRelations.getRelations() || [];
|
||||
if (endMessages.length > 0) {
|
||||
|
|
@ -81,8 +81,8 @@ export default {
|
|||
|
||||
// Process votes
|
||||
this.pollResponseRelations =
|
||||
this.timelineSet.getRelationsForEvent(this.event.getId(), "m.reference", "m.poll.response") ||
|
||||
this.timelineSet.getRelationsForEvent(this.event.getId(), "m.reference", "org.matrix.msc3381.poll.response");
|
||||
this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.reference", "m.poll.response") ||
|
||||
this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.reference", "org.matrix.msc3381.poll.response");
|
||||
var userVotes = {};
|
||||
if (this.pollResponseRelations) {
|
||||
const votes = this.pollResponseRelations.getRelations() || [];
|
||||
|
|
|
|||
|
|
@ -5,8 +5,11 @@ export default {
|
|||
userCanChangeJoinRule: false,
|
||||
userCanPurgeRoom: false,
|
||||
editedRoomName: "",
|
||||
isEditMode: false,
|
||||
roomNameErrorMessage: null
|
||||
isRoomNameEditMode: false,
|
||||
roomNameErrorMessage: null,
|
||||
editedRoomTopic: "",
|
||||
isRoomTopicEditMode: false,
|
||||
roomTopicErrorMessage: null,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
|
@ -93,18 +96,32 @@ export default {
|
|||
methods: {
|
||||
onRoomNameClicked() {
|
||||
if(this.userCanPurgeRoom) {
|
||||
this.isEditMode = !this.isEditMode;
|
||||
this.isRoomNameEditMode = !this.isRoomNameEditMode;
|
||||
this.editedRoomName = this.roomName;
|
||||
}
|
||||
},
|
||||
updateRoomName() {
|
||||
if(this.editedRoomName) {
|
||||
this.$matrix.matrixClient.setRoomName(this.room.roomId, this.editedRoomName);
|
||||
this.isEditMode = !this.isEditMode;
|
||||
this.isRoomNameEditMode = !this.isRoomNameEditMode;
|
||||
} else {
|
||||
this.$refs.editedRoomName.focus();
|
||||
}
|
||||
},
|
||||
onRoomTopicClicked() {
|
||||
if(this.userCanPurgeRoom) {
|
||||
this.isRoomTopicEditMode = !this.isRoomTopicEditMode;
|
||||
this.editedRoomTopic = this.roomTopic;
|
||||
}
|
||||
},
|
||||
updateRoomTopic() {
|
||||
if(this.editedRoomTopic) {
|
||||
this.$matrix.matrixClient.setRoomTopic(this.room.roomId, this.editedRoomTopic);
|
||||
this.isRoomTopicEditMode = !this.isRoomTopicEditMode;
|
||||
} else {
|
||||
this.$refs.editedRoomTopic.focus();
|
||||
}
|
||||
},
|
||||
setRoomJoinRule(ignoredJoinRule) {
|
||||
// Do nothing in the general mixin, override in RoomInfo.vue
|
||||
},
|
||||
|
|
|
|||
|
|
@ -163,9 +163,11 @@ class Util {
|
|||
event_id: replyToEvent.getId()
|
||||
}
|
||||
}
|
||||
let senderContent = replyToEvent.getContent()
|
||||
|
||||
const senderContentBody = Object.getOwnPropertyDescriptor(senderContent,'body') ? senderContent.body : Object.values(senderContent)[0].question.body
|
||||
// Prefix the content with reply info (seems to be a legacy thing)
|
||||
const prefix = replyToEvent.getContent().body.split('\n').map((item, index) => {
|
||||
const prefix = senderContentBody.split('\n').map((item, index) => {
|
||||
return "> " + (index == 0 ? ("<" + replyToEvent.getSender() + "> ") : "") + item;
|
||||
}).join('\n');
|
||||
content.body = prefix + "\n\n" + content.body;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import icPassword from '@/assets/icons/password.vue';
|
|||
import icEdit from '@/assets/icons/edit.vue';
|
||||
import icGlobe from '@/assets/icons/globe.vue';
|
||||
import icAddReaction from '@/assets/icons/addReaction.vue';
|
||||
import icPoll from '@/assets/icons/poll.vue';
|
||||
|
||||
Vue.use(Vuetify);
|
||||
|
||||
|
|
@ -27,6 +28,9 @@ export default new Vuetify({
|
|||
addReaction: {
|
||||
component: icAddReaction
|
||||
},
|
||||
poll: {
|
||||
component: icPoll
|
||||
},
|
||||
},
|
||||
user: icUser
|
||||
},
|
||||
|
|
|
|||
|
|
@ -3,16 +3,17 @@ import Vuex from 'vuex'
|
|||
import VuexPersist from 'vuex-persist'
|
||||
|
||||
Vue.use(Vuex)
|
||||
|
||||
const USER = `convene_${ window.location.hostname }_user`
|
||||
const SETTINGS = `convene_${ window.location.hostname }_settings`
|
||||
|
||||
// A Vuex plugin to persist the user object to either session or local storage, based on flag in the store state.
|
||||
//
|
||||
const persistUserPlugin = store => {
|
||||
var user;
|
||||
if (store.state.useLocalStorage) {
|
||||
user = JSON.parse(window.localStorage.getItem('user'));
|
||||
user = JSON.parse(window.localStorage.getItem(USER));
|
||||
} else {
|
||||
user = JSON.parse(window.sessionStorage.getItem('user'));
|
||||
user = JSON.parse(window.sessionStorage.getItem(USER));
|
||||
}
|
||||
const initialState = user ? { status: { loggedIn: true }, user } : { status: { loggedIn: false }, user: null };
|
||||
store.state.auth = initialState;
|
||||
|
|
@ -20,11 +21,11 @@ const persistUserPlugin = store => {
|
|||
store.subscribe((mutation, state) => {
|
||||
if (mutation.type == 'setUser' || mutation.type == 'setUseLocalStorage') {
|
||||
if (state.useLocalStorage) {
|
||||
window.localStorage.setItem('user', JSON.stringify(state.auth.user));
|
||||
window.sessionStorage.removeItem('user');
|
||||
window.localStorage.setItem(USER, JSON.stringify(state.auth.user));
|
||||
window.sessionStorage.removeItem(USER);
|
||||
} else {
|
||||
window.sessionStorage.setItem('user', JSON.stringify(state.auth.user));
|
||||
window.localStorage.removeItem('user');
|
||||
window.sessionStorage.setItem(USER, JSON.stringify(state.auth.user));
|
||||
window.localStorage.removeItem(USER);
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
@ -32,7 +33,7 @@ const persistUserPlugin = store => {
|
|||
|
||||
|
||||
const vuexPersistLocalStorage = new VuexPersist({
|
||||
key: 'settings',
|
||||
key: SETTINGS,
|
||||
storage: localStorage,
|
||||
reducer: state => {
|
||||
if (state.useLocalStorage) {
|
||||
|
|
@ -47,7 +48,7 @@ const vuexPersistLocalStorage = new VuexPersist({
|
|||
})
|
||||
|
||||
const vuexPersistSessionStorage = new VuexPersist({
|
||||
key: 'settings',
|
||||
key: SETTINGS,
|
||||
storage: sessionStorage,
|
||||
reducer: state => {
|
||||
if (!state.useLocalStorage) {
|
||||
|
|
@ -61,7 +62,7 @@ const vuexPersistSessionStorage = new VuexPersist({
|
|||
}
|
||||
})
|
||||
|
||||
const defaultUseSessionStorage = (sessionStorage.getItem('user') != null);
|
||||
const defaultUseSessionStorage = (sessionStorage.getItem(USER) != null);
|
||||
|
||||
export default new Vuex.Store({
|
||||
state: { language: null, currentRoomId: null, auth: null, tempuser: null, useLocalStorage: !defaultUseSessionStorage },
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue