Compare commits
1 commit
develop
...
fix/render
Author | SHA1 | Date | |
---|---|---|---|
|
17167aa550 |
75 changed files with 381 additions and 322 deletions
|
@ -422,11 +422,27 @@
|
|||
}
|
||||
}
|
||||
|
||||
pre code {
|
||||
background: var(--color-background);
|
||||
}
|
||||
|
||||
p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.bubble {
|
||||
pre {
|
||||
background: var(--b-50);
|
||||
border-radius: var(--border-radius-normal);
|
||||
border: 1px solid var(--color-border);
|
||||
display: block;
|
||||
margin: var(--space-small) 0;
|
||||
padding: var(--space-slab);
|
||||
}
|
||||
|
||||
pre code {
|
||||
display: block;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
code {
|
||||
background: var(--b-50);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,8 +59,12 @@
|
|||
|
||||
.hamburger--menu {
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
display: none;
|
||||
margin-right: $space-normal;
|
||||
|
||||
@media screen and (max-width: 1200px) {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.header--icon {
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
<template>
|
||||
<woot-button
|
||||
size="small"
|
||||
variant="clear"
|
||||
color-scheme="secondary"
|
||||
icon="list"
|
||||
class="toggle-sidebar"
|
||||
@click="onMenuItemClick"
|
||||
/>
|
||||
<button @click="onMenuItemClick">
|
||||
<fluent-icon class="hamburger--menu" icon="list" />
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
@ -21,8 +16,13 @@ export default {
|
|||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.toggle-sidebar {
|
||||
margin-right: var(--space-small);
|
||||
margin-left: var(--space-minus-small);
|
||||
.hamburger--menu {
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
margin-right: var(--space-normal);
|
||||
|
||||
@media screen and (max-width: 1200px) {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -261,7 +261,14 @@ export default {
|
|||
width: 20rem;
|
||||
flex-shrink: 0;
|
||||
overflow-y: hidden;
|
||||
position: unset;
|
||||
|
||||
@include breakpoint(xlarge down) {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
@include breakpoint(xlarge up) {
|
||||
position: unset;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
overflow-y: hidden;
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`SidemenuIcon matches snapshot 1`] = `
|
||||
<woot-button
|
||||
class="toggle-sidebar"
|
||||
color-scheme="secondary"
|
||||
icon="list"
|
||||
size="small"
|
||||
variant="clear"
|
||||
/>
|
||||
<button>
|
||||
<fluent-icon
|
||||
class="hamburger--menu"
|
||||
icon="list"
|
||||
/>
|
||||
</button>
|
||||
`;
|
||||
|
|
|
@ -10,11 +10,11 @@ import 'videojs-record/dist/css/videojs.record.css';
|
|||
|
||||
import videojs from 'video.js';
|
||||
|
||||
import inboxMixin from '../../../../shared/mixins/inboxMixin';
|
||||
import alertMixin from '../../../../shared/mixins/alertMixin';
|
||||
|
||||
import Recorder from 'opus-recorder';
|
||||
import encoderWorker from 'opus-recorder/dist/encoderWorker.min';
|
||||
import waveWorker from 'opus-recorder/dist/waveWorker.min';
|
||||
|
||||
import WaveSurfer from 'wavesurfer.js';
|
||||
import MicrophonePlugin from 'wavesurfer.js/dist/plugin/wavesurfer.microphone.js';
|
||||
|
@ -29,19 +29,14 @@ WaveSurfer.microphone = MicrophonePlugin;
|
|||
|
||||
export default {
|
||||
name: 'WootAudioRecorder',
|
||||
mixins: [alertMixin],
|
||||
props: {
|
||||
audioRecordFormat: {
|
||||
type: String,
|
||||
default: AUDIO_FORMATS.WEBM,
|
||||
},
|
||||
},
|
||||
mixins: [inboxMixin, alertMixin],
|
||||
data() {
|
||||
return {
|
||||
player: false,
|
||||
recordingDateStarted: new Date(0),
|
||||
initialTimeDuration: '00:00',
|
||||
recorderOptions: {
|
||||
debug: true,
|
||||
controls: true,
|
||||
bigPlayButton: false,
|
||||
fluid: false,
|
||||
|
@ -76,9 +71,6 @@ export default {
|
|||
record: {
|
||||
audio: true,
|
||||
video: false,
|
||||
maxLength: 900,
|
||||
timeSlice: 1000,
|
||||
maxFileSize: 15 * 1024 * 1024,
|
||||
...(this.audioRecordFormat === AUDIO_FORMATS.WEBM && {
|
||||
monitorGain: 0,
|
||||
recordingGain: 1,
|
||||
|
@ -88,10 +80,11 @@ export default {
|
|||
streamPages: true,
|
||||
maxFramesPerPage: 1,
|
||||
encoderFrameSize: 1,
|
||||
encoderPath: waveWorker,
|
||||
encoderPath: 'opus-recorder/dist/waveWorker.min.js',
|
||||
}),
|
||||
...(this.audioRecordFormat === AUDIO_FORMATS.OGG && {
|
||||
displayMilliseconds: false,
|
||||
maxLength: 300,
|
||||
audioEngine: 'opus-recorder',
|
||||
audioWorkerURL: encoderWorker,
|
||||
audioChannels: 1,
|
||||
|
@ -107,6 +100,12 @@ export default {
|
|||
isRecording() {
|
||||
return this.player && this.player.record().isRecording();
|
||||
},
|
||||
audioRecordFormat() {
|
||||
if (this.isAWebWidgetInbox) {
|
||||
return AUDIO_FORMATS.WEBM;
|
||||
}
|
||||
return AUDIO_FORMATS.OGG;
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
window.Recorder = Recorder;
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
<woot-audio-recorder
|
||||
v-if="showAudioRecorderEditor"
|
||||
ref="audioRecorderInput"
|
||||
:audio-record-format="audioRecordFormat"
|
||||
@state-recorder-progress-changed="onStateProgressRecorderChanged"
|
||||
@state-recorder-changed="onStateRecorderChanged"
|
||||
@finish-record="onFinishRecorder"
|
||||
|
@ -148,7 +147,6 @@ import { checkFileSizeLimit } from 'shared/helpers/FileHelper';
|
|||
import {
|
||||
MAXIMUM_FILE_UPLOAD_SIZE,
|
||||
MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL,
|
||||
AUDIO_FORMATS,
|
||||
} from 'shared/constants/messages';
|
||||
import { BUS_EVENTS } from 'shared/constants/busEvents';
|
||||
|
||||
|
@ -464,12 +462,6 @@ export default {
|
|||
editorStateId() {
|
||||
return `draft-${this.conversationIdByRoute}-${this.replyType}`;
|
||||
},
|
||||
audioRecordFormat() {
|
||||
if (this.isAWebWidgetInbox) {
|
||||
return AUDIO_FORMATS.WEBM;
|
||||
}
|
||||
return AUDIO_FORMATS.OGG;
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
currentChat(conversation) {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "اختر حساباً من القائمة التالية",
|
||||
"PROFILE_SETTINGS": "إعدادات الملف الشخصي",
|
||||
"KEYBOARD_SHORTCUTS": "اختصارات لوحة المفاتيح",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "تسجيل الخروج"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Selecciona un compte de la llista següent",
|
||||
"PROFILE_SETTINGS": "Configuració del Perfil",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Sortir"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Vyberte účet z následujícího seznamu",
|
||||
"PROFILE_SETTINGS": "Nastavení profilu",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Odhlásit se"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Vælg en konto fra følgende liste",
|
||||
"PROFILE_SETTINGS": "Profilindstillinger",
|
||||
"KEYBOARD_SHORTCUTS": "Tastaturgenveje",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Log Ud"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Wählen Sie ein Benutzerkonto aus der folgenden Liste",
|
||||
"PROFILE_SETTINGS": "Profileinstellungen",
|
||||
"KEYBOARD_SHORTCUTS": "Tastenkombinationen",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Ausloggen"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Επιλέξτε ένα λογαριασμό από την Λίστα",
|
||||
"PROFILE_SETTINGS": "Ρυθμίσεις Προφίλ",
|
||||
"KEYBOARD_SHORTCUTS": "Συντομεύσεις Πληκτρολογίου",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Κονσόλα",
|
||||
"LOGOUT": "Έξοδος (Logout)"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Seleccione una cuenta de la siguiente lista",
|
||||
"PROFILE_SETTINGS": "Ajustes del perfil",
|
||||
"KEYBOARD_SHORTCUTS": "Atajos de teclado",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Cerrar sesión"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "از لیست یکی از حسابها را انتخاب کنید",
|
||||
"PROFILE_SETTINGS": "تنظیمات پروفایل",
|
||||
"KEYBOARD_SHORTCUTS": "میانبرهای صفحهکلید",
|
||||
"SUPER_ADMIN_CONSOLE": "کنسول سوپر مدیر",
|
||||
"LOGOUT": "خروج از حسابکاربری"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Valitse tili tästä luettelosta",
|
||||
"PROFILE_SETTINGS": "Profiilin asetukset",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Kirjaudu ulos"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -1,28 +1,28 @@
|
|||
{
|
||||
"FILTER": {
|
||||
"TITLE": "Filtrer les conversations",
|
||||
"SUBTITLE": "Ajoutez des filtres ci-dessous et appuyez sur 'Appliquer des filtres' pour filtrer les conversations.",
|
||||
"SUBTITLE": "Add filters below and hit 'Apply filters' to filter conversations.",
|
||||
"ADD_NEW_FILTER": "Ajouter un filtre",
|
||||
"FILTER_DELETE_ERROR": "Vous devriez avoir au moins un filtre afin d'enregistrer",
|
||||
"SUBMIT_BUTTON_LABEL": "Appliquer les filtres",
|
||||
"CANCEL_BUTTON_LABEL": "Annuler",
|
||||
"CLEAR_BUTTON_LABEL": "Effacer les filtres",
|
||||
"CLEAR_BUTTON_LABEL": "Clear Filters",
|
||||
"EMPTY_VALUE_ERROR": "Value is required",
|
||||
"TOOLTIP_LABEL": "Filtrer les conversations",
|
||||
"TOOLTIP_LABEL": "Filter conversations",
|
||||
"QUERY_DROPDOWN_LABELS": {
|
||||
"AND": "ET",
|
||||
"OR": "OU"
|
||||
},
|
||||
"OPERATOR_LABELS": {
|
||||
"equal_to": "Égal à",
|
||||
"not_equal_to": "Pas égal à",
|
||||
"contains": "Contient",
|
||||
"does_not_contain": "Ne contient pas",
|
||||
"is_present": "Est présent",
|
||||
"is_not_present": "N'est pas présent",
|
||||
"is_greater_than": "Est plus grand que",
|
||||
"is_less_than": "Est inférieur à",
|
||||
"days_before": "Est x jours avant"
|
||||
"equal_to": "Equal to",
|
||||
"not_equal_to": "Not equal to",
|
||||
"contains": "Contains",
|
||||
"does_not_contain": "Does not contain",
|
||||
"is_present": "Is present",
|
||||
"is_not_present": "Is not present",
|
||||
"is_greater_than": "Is greater than",
|
||||
"is_less_than": "Is lesser than",
|
||||
"days_before": "Is x days before"
|
||||
},
|
||||
"ATTRIBUTE_LABELS": {
|
||||
"TRUE": "Vrai",
|
||||
|
@ -32,19 +32,19 @@
|
|||
"STATUS": "État",
|
||||
"ASSIGNEE_NAME": "Assignee Name",
|
||||
"INBOX_NAME": "Nom de la boîte de réception",
|
||||
"TEAM_NAME": "Nom de l'équipe",
|
||||
"TEAM_NAME": "Team Name",
|
||||
"CONVERSATION_IDENTIFIER": "Conversation Identifier",
|
||||
"CAMPAIGN_NAME": "Campaign Name",
|
||||
"LABELS": "Étiquettes",
|
||||
"BROWSER_LANGUAGE": "Langue du navigateur",
|
||||
"COUNTRY_NAME": "Nom du pays",
|
||||
"BROWSER_LANGUAGE": "Browser Language",
|
||||
"COUNTRY_NAME": "Country Name",
|
||||
"REFERER_LINK": "Referer link",
|
||||
"CUSTOM_ATTRIBUTE_LIST": "Liste",
|
||||
"CUSTOM_ATTRIBUTE_TEXT": "Texte",
|
||||
"CUSTOM_ATTRIBUTE_NUMBER": "Nombre",
|
||||
"CUSTOM_ATTRIBUTE_LINK": "Lien",
|
||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Case à cocher",
|
||||
"CREATED_AT": "Créé le",
|
||||
"CUSTOM_ATTRIBUTE_LIST": "List",
|
||||
"CUSTOM_ATTRIBUTE_TEXT": "Text",
|
||||
"CUSTOM_ATTRIBUTE_NUMBER": "Number",
|
||||
"CUSTOM_ATTRIBUTE_LINK": "Link",
|
||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox",
|
||||
"CREATED_AT": "Created At",
|
||||
"LAST_ACTIVITY": "Dernière activité"
|
||||
},
|
||||
"GROUPS": {
|
||||
|
@ -70,7 +70,7 @@
|
|||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"DELETE_BUTTON": "Supprimer le filtre",
|
||||
"DELETE_BUTTON": "Delete filter",
|
||||
"MODAL": {
|
||||
"CONFIRM": {
|
||||
"TITLE": "Confirmer la suppression",
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
},
|
||||
"TAB_HEADING": "Conversations",
|
||||
"MENTION_HEADING": "Mentions",
|
||||
"UNATTENDED_HEADING": "Sans suivi",
|
||||
"UNATTENDED_HEADING": "Unattended",
|
||||
"SEARCH": {
|
||||
"INPUT": "Rechercher des personnes, des conversations, des réponses standardisées ..."
|
||||
},
|
||||
|
@ -57,12 +57,12 @@
|
|||
"REPLY_TO_TWEET": "Répondre à ce tweet",
|
||||
"LINK_TO_STORY": "Aller à l'histoire instagram",
|
||||
"SENT": "Envoyé avec succès",
|
||||
"READ": "Lu",
|
||||
"DELIVERED": "Reçu",
|
||||
"READ": "Read successfully",
|
||||
"DELIVERED": "Delivered successfully",
|
||||
"NO_MESSAGES": "Pas de messages",
|
||||
"NO_CONTENT": "Aucun contenu disponible",
|
||||
"HIDE_QUOTED_TEXT": "Masquer le texte cité",
|
||||
"SHOW_QUOTED_TEXT": "Afficher le texte cité",
|
||||
"MESSAGE_READ": "Lu"
|
||||
"MESSAGE_READ": "Read"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"COPY_SUCCESSFUL": "Copié dans le presse-papiers avec succès",
|
||||
"COMPANY": "Société",
|
||||
"LOCATION": "Localisation",
|
||||
"BROWSER_LANGUAGE": "Langue du navigateur",
|
||||
"BROWSER_LANGUAGE": "Browser Language",
|
||||
"CONVERSATION_TITLE": "Détails de la conversation",
|
||||
"VIEW_PROFILE": "Voir le profil",
|
||||
"BROWSER": "Navigateur",
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"FILTER_DELETE_ERROR": "Vous devriez avoir au moins un filtre afin d'enregistrer",
|
||||
"SUBMIT_BUTTON_LABEL": "Envoyer",
|
||||
"CANCEL_BUTTON_LABEL": "Annuler",
|
||||
"CLEAR_BUTTON_LABEL": "Effacer les filtres",
|
||||
"CLEAR_BUTTON_LABEL": "Clear Filters",
|
||||
"EMPTY_VALUE_ERROR": "Value is required",
|
||||
"TOOLTIP_LABEL": "Filter contacts",
|
||||
"QUERY_DROPDOWN_LABELS": {
|
||||
|
@ -15,15 +15,15 @@
|
|||
"OR": "OU"
|
||||
},
|
||||
"OPERATOR_LABELS": {
|
||||
"equal_to": "Égal à",
|
||||
"not_equal_to": "Pas égal à",
|
||||
"contains": "Contient",
|
||||
"does_not_contain": "Ne contient pas",
|
||||
"is_present": "Est présent",
|
||||
"is_not_present": "N'est pas présent",
|
||||
"is_greater_than": "Est plus grand que",
|
||||
"equal_to": "Equal to",
|
||||
"not_equal_to": "Not equal to",
|
||||
"contains": "Contains",
|
||||
"does_not_contain": "Does not contain",
|
||||
"is_present": "Is present",
|
||||
"is_not_present": "Is not present",
|
||||
"is_greater_than": "Is greater than",
|
||||
"is_lesser_than": "Is lesser than",
|
||||
"days_before": "Est x jours avant"
|
||||
"days_before": "Is x days before"
|
||||
},
|
||||
"ATTRIBUTES": {
|
||||
"NAME": "Nom",
|
||||
|
@ -32,12 +32,12 @@
|
|||
"IDENTIFIER": "Identifier",
|
||||
"CITY": "Ville",
|
||||
"COUNTRY": "Pays",
|
||||
"CUSTOM_ATTRIBUTE_LIST": "Liste",
|
||||
"CUSTOM_ATTRIBUTE_TEXT": "Texte",
|
||||
"CUSTOM_ATTRIBUTE_NUMBER": "Nombre",
|
||||
"CUSTOM_ATTRIBUTE_LINK": "Lien",
|
||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Case à cocher",
|
||||
"CREATED_AT": "Créé le",
|
||||
"CUSTOM_ATTRIBUTE_LIST": "List",
|
||||
"CUSTOM_ATTRIBUTE_TEXT": "Text",
|
||||
"CUSTOM_ATTRIBUTE_NUMBER": "Number",
|
||||
"CUSTOM_ATTRIBUTE_LINK": "Link",
|
||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox",
|
||||
"CREATED_AT": "Created At",
|
||||
"LAST_ACTIVITY": "Dernière activité",
|
||||
"REFERER_LINK": "Referrer link"
|
||||
},
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Sélectionnez un compte dans la liste suivante",
|
||||
"PROFILE_SETTINGS": "Paramètres de profil",
|
||||
"KEYBOARD_SHORTCUTS": "Raccourcis clavier",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Se déconnecter"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
"REGISTER": {
|
||||
"TRY_WOOT": "Créer un compte",
|
||||
"TITLE": "Inscription",
|
||||
"TESTIMONIAL_HEADER": "Il suffit d'une étape pour avancer",
|
||||
"TESTIMONIAL_CONTENT": "Vous n'êtes plus qu'à un pas d'engager vos clients, de les fidéliser et d'en trouver de nouveaux.",
|
||||
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
|
||||
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
|
||||
"TERMS_ACCEPT": "En vous inscrivant, vous acceptez nos <a href=\"https://www.chatwoot.com/terms\">CGU</a> et notre <a href=\"https://www.chatwoot.com/privacy-policy\">politique de confidentialité</a>",
|
||||
"COMPANY_NAME": {
|
||||
"LABEL": "Nom de la société",
|
||||
"PLACEHOLDER": "Entrez le nom de votre entreprise. Ex : Wayne Enterprises",
|
||||
"ERROR": "Le nom de la société est trop court"
|
||||
"LABEL": "Company name",
|
||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
||||
"ERROR": "Company name is too short"
|
||||
},
|
||||
"FULL_NAME": {
|
||||
"LABEL": "Nom complet",
|
||||
|
@ -18,13 +18,13 @@
|
|||
"EMAIL": {
|
||||
"LABEL": "E-mail professionnel",
|
||||
"PLACEHOLDER": "Entrez votre adresse e-mail professionnelle. Ex. : bruce@wayne.enterprises",
|
||||
"ERROR": "Veuillez entrer une adresse e-mail professionnelle valide"
|
||||
"ERROR": "Please enter a valid work email address"
|
||||
},
|
||||
"PASSWORD": {
|
||||
"LABEL": "Mot de passe",
|
||||
"PLACEHOLDER": "Mot de passe",
|
||||
"ERROR": "Le mot de passe est trop court",
|
||||
"IS_INVALID_PASSWORD": "Le mot de passe doit contenir au moins 1 lettre majuscule, 1 lettre minuscule, 1 chiffre et 1 caractère spécial"
|
||||
"IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character"
|
||||
},
|
||||
"CONFIRM_PASSWORD": {
|
||||
"LABEL": "Confirmer le mot de passe",
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "התנתק"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Fiók kiválasztása az alábbi listából",
|
||||
"PROFILE_SETTINGS": "Profilbeállítások",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Kilépés"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Pilih akun dari daftar berikut",
|
||||
"PROFILE_SETTINGS": "Pengaturan Profil",
|
||||
"KEYBOARD_SHORTCUTS": "Shortcut Keyboard",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Keluar"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Veldu reikning úr eftirfarandi lista",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Seleziona un account dal seguente elenco",
|
||||
"PROFILE_SETTINGS": "Impostazioni profilo",
|
||||
"KEYBOARD_SHORTCUTS": "Scorciatoie da tastiera",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Disconnettiti"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "次のリストからアカウントを選択してください",
|
||||
"PROFILE_SETTINGS": "プロフィール設定",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "ログアウト"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "다음 목록에서 계정 선택",
|
||||
"PROFILE_SETTINGS": "프로필 설정",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "로그아웃"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -42,8 +42,8 @@
|
|||
"RATING_TITLE": "Vērtējums",
|
||||
"FEEDBACK_TITLE": "Atsauksmes",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Rādīt etiķetes",
|
||||
"HIDE_LABELS": "Slēpt etiķetes"
|
||||
"SHOW_LABELS": "Show labels",
|
||||
"HIDE_LABELS": "Hide labels"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "Atrisināt",
|
||||
|
|
|
@ -104,8 +104,8 @@
|
|||
"Aizņemts",
|
||||
"Bezsaistē"
|
||||
],
|
||||
"SET_AVAILABILITY_SUCCESS": "Pieejamība ir veiksmīgi iestatīta",
|
||||
"SET_AVAILABILITY_ERROR": "Nevarēja iestatīt pieejamību. Lūdzu, mēģiniet vēlreiz"
|
||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "Jūsu e-pasta adrese",
|
||||
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Izvēlieties kontu no šī saraksta",
|
||||
"PROFILE_SETTINGS": "Profila Iestatījumi",
|
||||
"KEYBOARD_SHORTCUTS": "Tastatūras Īsinājumtaustiņi",
|
||||
"SUPER_ADMIN_CONSOLE": "Superadministratora Konsole",
|
||||
"LOGOUT": "Izrakstīties"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -230,8 +229,8 @@
|
|||
"CATEGORY_EMPTY_MESSAGE": "Kategorijas nav atrastas"
|
||||
},
|
||||
"SET_AUTO_OFFLINE": {
|
||||
"TEXT": "Automātiski atzīmēt bezsaistē",
|
||||
"INFO_TEXT": "Ļaut sistēmai, kad neizmantojat lietotni vai informācijas paneli, automātiski atzīmēt Jūs bezsaistē."
|
||||
"TEXT": "Mark offline automatically",
|
||||
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
|
||||
},
|
||||
"DOCS": "Lasīt dokumentus"
|
||||
},
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "ഇനിപ്പറയുന്ന ലിസ്റ്റിൽ നിന്ന് ഒരു അക്കൗണ്ട് തിരഞ്ഞെടുക്കുക",
|
||||
"PROFILE_SETTINGS": "പ്രൊഫൈൽ ക്രമീകരണങ്ങൾ",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "ലോഗൗട്ട്"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profiel instellingen",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Afmelden"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Velg en konto fra følgende liste",
|
||||
"PROFILE_SETTINGS": "Brukerinnstillinger",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logg ut"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Ustawienia profilu",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Wyloguj się"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Escolha uma conta da lista a seguir",
|
||||
"PROFILE_SETTINGS": "Configurações do perfil",
|
||||
"KEYBOARD_SHORTCUTS": "Atalhos do teclado",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Desconectar"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Selecione uma conta da lista a seguir",
|
||||
"PROFILE_SETTINGS": "Configurações do Perfil",
|
||||
"KEYBOARD_SHORTCUTS": "Atalhos do teclado",
|
||||
"SUPER_ADMIN_CONSOLE": "Console de Super Admin",
|
||||
"LOGOUT": "Sair"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Selectaţi un cont din următoarea listă",
|
||||
"PROFILE_SETTINGS": "Setări profil",
|
||||
"KEYBOARD_SHORTCUTS": "Scurtături Tastatură",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Deconectare"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Выберите аккаунт из списка",
|
||||
"PROFILE_SETTINGS": "Настройки профиля",
|
||||
"KEYBOARD_SHORTCUTS": "Клавиши быстрого доступа",
|
||||
"SUPER_ADMIN_CONSOLE": "Консоль супер администратора",
|
||||
"LOGOUT": "Выйти"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Vyberte účet z nasledujúceho zoznamu",
|
||||
"PROFILE_SETTINGS": "Nastavenia profilu",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Izaberite nalog iz sledećeg spiska",
|
||||
"PROFILE_SETTINGS": "Podešavanja profila",
|
||||
"KEYBOARD_SHORTCUTS": "Prečice tastature",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Odjavi se"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Välj ett konto från följande lista",
|
||||
"PROFILE_SETTINGS": "Profilinställningar",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logga ut"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "பின்வரும் பட்டியலிலிருந்து ஒரு கணக்கைத் தேர்ந்தெடுக்கவும்",
|
||||
"PROFILE_SETTINGS": "சுயவிவர அமைப்புகள்",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "வெளியேறு"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "เลือกบัญชีจากรายชื่อต่อไปนี้",
|
||||
"PROFILE_SETTINGS": "ตั้งค่าข้อมูลส่วนตัว",
|
||||
"KEYBOARD_SHORTCUTS": "คีย์ลัด",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "ออกจากระบบ"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Aşağıdaki listeden bir hesap seçin",
|
||||
"PROFILE_SETTINGS": "Profil ayarları",
|
||||
"KEYBOARD_SHORTCUTS": "Klavye Kısayolları",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Çıkış Yap"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Виберіть обліковий запис із наступного списку",
|
||||
"PROFILE_SETTINGS": "Налаштування облікового запису",
|
||||
"KEYBOARD_SHORTCUTS": "Комбінації клавіш",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Вийти"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "Chọn một tài khoản từ danh sách sau",
|
||||
"PROFILE_SETTINGS": "Cài Đặt Hồ Sơ Cá Nhân",
|
||||
"KEYBOARD_SHORTCUTS": "Phím tắt",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Đăng xuất"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "从以下列表中选择一个账户",
|
||||
"PROFILE_SETTINGS": "个人资料设置",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "退出登录"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -136,7 +136,6 @@
|
|||
"SELECTOR_SUBTITLE": "從以下列表中選擇一個帳戶",
|
||||
"PROFILE_SETTINGS": "個人資料設定",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "退出登入"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
<div class="row app-wrapper">
|
||||
<sidebar
|
||||
:route="currentRoute"
|
||||
:show-secondary-sidebar="isSidebarOpen"
|
||||
:sidebar-class-name="sidebarClassName"
|
||||
@open-notification-panel="openNotificationPanel"
|
||||
@toggle-account-modal="toggleAccountModal"
|
||||
@open-key-shortcut-modal="toggleKeyShortcutModal"
|
||||
@close-key-shortcut-modal="closeKeyShortcutModal"
|
||||
@show-add-label-popup="showAddLabelPopup"
|
||||
/>
|
||||
<section class="app-content columns">
|
||||
<section class="app-content columns" :class="contentClassName">
|
||||
<router-view />
|
||||
<command-bar />
|
||||
<account-selector
|
||||
|
@ -46,7 +46,6 @@ import AddAccountModal from 'dashboard/components/layout/sidebarComponents/AddAc
|
|||
import AccountSelector from 'dashboard/components/layout/sidebarComponents/AccountSelector';
|
||||
import AddLabelModal from 'dashboard/routes/dashboard/settings/labels/AddLabel';
|
||||
import NotificationPanel from 'dashboard/routes/dashboard/notifications/components/NotificationPanel';
|
||||
import uiSettingsMixin from 'dashboard/mixins/uiSettings';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
@ -58,9 +57,9 @@ export default {
|
|||
AddLabelModal,
|
||||
NotificationPanel,
|
||||
},
|
||||
mixins: [uiSettingsMixin],
|
||||
data() {
|
||||
return {
|
||||
isSidebarOpen: false,
|
||||
isOnDesktop: true,
|
||||
showAccountModal: false,
|
||||
showCreateAccountModal: false,
|
||||
|
@ -73,22 +72,44 @@ export default {
|
|||
currentRoute() {
|
||||
return ' ';
|
||||
},
|
||||
isSidebarOpen() {
|
||||
const { show_secondary_sidebar: showSecondarySidebar } = this.uiSettings;
|
||||
return showSecondarySidebar;
|
||||
sidebarClassName() {
|
||||
if (this.isOnDesktop) {
|
||||
return '';
|
||||
}
|
||||
if (this.isSidebarOpen) {
|
||||
return 'off-canvas is-open';
|
||||
}
|
||||
return 'off-canvas is-transition-push is-closed';
|
||||
},
|
||||
contentClassName() {
|
||||
if (this.isOnDesktop) {
|
||||
return '';
|
||||
}
|
||||
if (this.isSidebarOpen) {
|
||||
return 'off-canvas-content is-open-left has-transition-push';
|
||||
}
|
||||
return 'off-canvas-content has-transition-push';
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
window.addEventListener('resize', this.handleResize);
|
||||
this.handleResize();
|
||||
bus.$on(BUS_EVENTS.TOGGLE_SIDEMENU, this.toggleSidebar);
|
||||
},
|
||||
beforeDestroy() {
|
||||
bus.$off(BUS_EVENTS.TOGGLE_SIDEMENU, this.toggleSidebar);
|
||||
window.removeEventListener('resize', this.handleResize);
|
||||
},
|
||||
methods: {
|
||||
handleResize() {
|
||||
if (window.innerWidth >= 1200) {
|
||||
this.isOnDesktop = true;
|
||||
} else {
|
||||
this.isOnDesktop = false;
|
||||
}
|
||||
},
|
||||
toggleSidebar() {
|
||||
this.updateUISettings({
|
||||
show_secondary_sidebar: !this.isSidebarOpen,
|
||||
});
|
||||
this.isSidebarOpen = !this.isSidebarOpen;
|
||||
},
|
||||
openCreateAccountModal() {
|
||||
this.showAccountModal = false;
|
||||
|
@ -121,3 +142,8 @@ export default {
|
|||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.off-canvas-content.is-open-left {
|
||||
transform: translateX(20rem);
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -1,22 +1,20 @@
|
|||
<template>
|
||||
<div v-on-clickaway="closeSearch" class="search-wrap">
|
||||
<div class="search-header--wrap">
|
||||
<woot-sidemenu-icon v-if="!showSearchBox" />
|
||||
<div class="search" :class="{ 'is-active': showSearchBox }">
|
||||
<div class="icon">
|
||||
<fluent-icon icon="search" class="search--icon" size="28" />
|
||||
</div>
|
||||
<input
|
||||
v-model="searchTerm"
|
||||
class="search--input"
|
||||
:placeholder="$t('CONVERSATION.SEARCH_MESSAGES')"
|
||||
@focus="onSearch"
|
||||
/>
|
||||
<switch-layout
|
||||
:is-on-expanded-layout="isOnExpandedLayout"
|
||||
@toggle="$emit('toggle-conversation-layout')"
|
||||
/>
|
||||
<div class="search" :class="{ 'is-active': showSearchBox }">
|
||||
<woot-sidemenu-icon />
|
||||
<div class="icon">
|
||||
<fluent-icon icon="search" class="search--icon" size="28" />
|
||||
</div>
|
||||
<input
|
||||
v-model="searchTerm"
|
||||
class="search--input"
|
||||
:placeholder="$t('CONVERSATION.SEARCH_MESSAGES')"
|
||||
@focus="onSearch"
|
||||
/>
|
||||
<switch-layout
|
||||
:is-on-expanded-layout="isOnExpandedLayout"
|
||||
@toggle="$emit('toggle-conversation-layout')"
|
||||
/>
|
||||
</div>
|
||||
<div v-if="showSearchBox" class="results-wrap">
|
||||
<div class="show-results">
|
||||
|
@ -155,21 +153,14 @@ export default {
|
|||
<style lang="scss" scoped>
|
||||
.search-wrap {
|
||||
position: relative;
|
||||
padding: var(--space-one) var(--space-normal) var(--space-smaller)
|
||||
var(--space-normal);
|
||||
}
|
||||
|
||||
.search-header--wrap {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
min-height: var(--space-large);
|
||||
}
|
||||
|
||||
.search {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
padding: 0;
|
||||
border-bottom: 1px solid transparent;
|
||||
padding: var(--space-one) var(--space-normal) var(--space-smaller)
|
||||
var(--space-normal);
|
||||
|
||||
&:hover {
|
||||
.search--icon {
|
||||
|
@ -214,7 +205,6 @@ input::placeholder {
|
|||
width: 100%;
|
||||
max-height: 70vh;
|
||||
overflow: auto;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.show-results {
|
||||
|
|
|
@ -8,7 +8,8 @@
|
|||
@close-key-shortcut-modal="closeKeyShortcutModal"
|
||||
/>
|
||||
<help-center-sidebar
|
||||
v-if="showHelpCenterSidebar"
|
||||
v-if="portals.length"
|
||||
:class="sidebarClassName"
|
||||
:header-title="headerTitle"
|
||||
:portal-slug="selectedPortalSlug"
|
||||
:locale-slug="selectedLocaleInPortal"
|
||||
|
@ -18,7 +19,7 @@
|
|||
@open-popover="openPortalPopover"
|
||||
@open-modal="onClickOpenAddCategoryModal"
|
||||
/>
|
||||
<section class="app-content columns">
|
||||
<section class="app-content columns" :class="contentClassName">
|
||||
<router-view />
|
||||
<command-bar />
|
||||
<account-selector
|
||||
|
@ -83,6 +84,7 @@ export default {
|
|||
mixins: [portalMixin, uiSettingsMixin],
|
||||
data() {
|
||||
return {
|
||||
isSidebarOpen: false,
|
||||
isOnDesktop: true,
|
||||
showShortcutModal: false,
|
||||
showNotificationPanel: false,
|
||||
|
@ -101,15 +103,6 @@ export default {
|
|||
meta: 'portals/getMeta',
|
||||
isFetching: 'portals/isFetchingPortals',
|
||||
}),
|
||||
isSidebarOpen() {
|
||||
const {
|
||||
show_help_center_secondary_sidebar: showSecondarySidebar,
|
||||
} = this.uiSettings;
|
||||
return showSecondarySidebar;
|
||||
},
|
||||
showHelpCenterSidebar() {
|
||||
return this.portals.length === 0 ? false : this.isSidebarOpen;
|
||||
},
|
||||
selectedPortal() {
|
||||
const slug = this.$route.params.portalSlug || this.lastActivePortalSlug;
|
||||
if (slug) return this.$store.getters['portals/portalBySlug'](slug);
|
||||
|
@ -119,6 +112,24 @@ export default {
|
|||
selectedLocaleInPortal() {
|
||||
return this.$route.params.locale || this.defaultPortalLocale;
|
||||
},
|
||||
sidebarClassName() {
|
||||
if (this.isOnDesktop) {
|
||||
return '';
|
||||
}
|
||||
if (this.isSidebarOpen) {
|
||||
return 'off-canvas is-open';
|
||||
}
|
||||
return 'off-canvas is-transition-push is-closed';
|
||||
},
|
||||
contentClassName() {
|
||||
if (this.isOnDesktop) {
|
||||
return '';
|
||||
}
|
||||
if (this.isSidebarOpen) {
|
||||
return 'off-canvas-content is-open-left has-transition-push';
|
||||
}
|
||||
return 'off-canvas-content has-transition-push';
|
||||
},
|
||||
selectedPortalName() {
|
||||
return this.selectedPortal ? this.selectedPortal.name : '';
|
||||
},
|
||||
|
@ -216,27 +227,9 @@ export default {
|
|||
},
|
||||
},
|
||||
|
||||
watch: {
|
||||
'$route.name'() {
|
||||
const routeName = this.$route?.name;
|
||||
const routeParams = this.$route?.params;
|
||||
const updateMetaInAllPortals = routeName === 'list_all_portals';
|
||||
const updateMetaInEditArticle =
|
||||
routeName === 'edit_article' && routeParams?.recentlyCreated;
|
||||
const updateMetaInLocaleArticles =
|
||||
routeName === 'list_all_locale_articles' &&
|
||||
routeParams?.recentlyDeleted;
|
||||
if (
|
||||
updateMetaInAllPortals ||
|
||||
updateMetaInEditArticle ||
|
||||
updateMetaInLocaleArticles
|
||||
) {
|
||||
this.fetchPortalAndItsCategories();
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
mounted() {
|
||||
window.addEventListener('resize', this.handleResize);
|
||||
this.handleResize();
|
||||
bus.$on(BUS_EVENTS.TOGGLE_SIDEMENU, this.toggleSidebar);
|
||||
|
||||
const slug = this.$route.params.portalSlug;
|
||||
|
@ -246,6 +239,7 @@ export default {
|
|||
},
|
||||
beforeDestroy() {
|
||||
bus.$off(BUS_EVENTS.TOGGLE_SIDEMENU, this.toggleSidebar);
|
||||
window.removeEventListener('resize', this.handleResize);
|
||||
},
|
||||
updated() {
|
||||
const slug = this.$route.params.portalSlug;
|
||||
|
@ -258,13 +252,16 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
toggleSidebar() {
|
||||
if (this.portals.length > 0) {
|
||||
this.updateUISettings({
|
||||
show_help_center_secondary_sidebar: !this.isSidebarOpen,
|
||||
});
|
||||
handleResize() {
|
||||
if (window.innerWidth > 1200) {
|
||||
this.isOnDesktop = true;
|
||||
} else {
|
||||
this.isOnDesktop = false;
|
||||
}
|
||||
},
|
||||
toggleSidebar() {
|
||||
this.isSidebarOpen = !this.isSidebarOpen;
|
||||
},
|
||||
async fetchPortalAndItsCategories() {
|
||||
await this.$store.dispatch('portals/index');
|
||||
const selectedPortalParam = {
|
||||
|
@ -305,3 +302,8 @@ export default {
|
|||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.off-canvas-content.is-open-left.has-transition-push {
|
||||
transform: translateX(var(--space-giga));
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -236,10 +236,8 @@ export default {
|
|||
});
|
||||
},
|
||||
articleCount() {
|
||||
const { allowed_locales: allowedLocales } = this.portal.config;
|
||||
return allowedLocales.reduce((acc, locale) => {
|
||||
return acc + locale.articles_count;
|
||||
}, 0);
|
||||
const { all_articles_count: count } = this.portal.meta;
|
||||
return count;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
|
|
|
@ -105,10 +105,7 @@ export default {
|
|||
return this.portal?.config?.allowed_locales;
|
||||
},
|
||||
articlesCount() {
|
||||
const { allowed_locales: allowedLocales } = this.portal.config;
|
||||
return allowedLocales.reduce((acc, locale) => {
|
||||
return acc + locale.articles_count;
|
||||
}, 0);
|
||||
return this.portal?.meta?.all_articles_count;
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
|
|
|
@ -151,7 +151,6 @@ export default {
|
|||
params: {
|
||||
portalSlug: this.selectedPortalSlug,
|
||||
locale: this.locale,
|
||||
recentlyDeleted: true,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
|
|
|
@ -87,7 +87,6 @@ export default {
|
|||
articleSlug: articleId,
|
||||
portalSlug: this.selectedPortalSlug,
|
||||
locale: this.locale,
|
||||
recentlyCreated: true,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
|
|
|
@ -37,13 +37,6 @@ export default {
|
|||
this.resizeTextarea();
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
if (this.value) {
|
||||
this.resizeTextarea();
|
||||
}
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
resizeTextarea() {
|
||||
if (!this.value) {
|
||||
|
|
|
@ -1,57 +1,49 @@
|
|||
import { marked } from 'marked';
|
||||
import DOMPurify from 'dompurify';
|
||||
import { escapeHtml, afterSanitizeAttributes } from './HTMLSanitizer';
|
||||
import mila from 'markdown-it-link-attributes';
|
||||
import mentionPlugin from './markdownIt/link';
|
||||
const md = require('markdown-it')({
|
||||
html: false,
|
||||
xhtmlOut: true,
|
||||
breaks: true,
|
||||
langPrefix: 'language-',
|
||||
linkify: true,
|
||||
typographer: true,
|
||||
quotes: '\u201c\u201d\u2018\u2019',
|
||||
maxNesting: 20,
|
||||
})
|
||||
.use(mentionPlugin)
|
||||
.use(mila, {
|
||||
attrs: {
|
||||
class: 'link',
|
||||
rel: 'noreferrer noopener nofollow',
|
||||
target: '_blank',
|
||||
},
|
||||
});
|
||||
|
||||
const TWITTER_USERNAME_REGEX = /(^|[^@\w])@(\w{1,15})\b/g;
|
||||
const TWITTER_USERNAME_REPLACEMENT =
|
||||
'$1<a href="http://twitter.com/$2" target="_blank" rel="noreferrer nofollow noopener">@$2</a>';
|
||||
|
||||
const TWITTER_USERNAME_REPLACEMENT = '$1[@$2](http://twitter.com/$2)';
|
||||
const TWITTER_HASH_REGEX = /(^|\s)#(\w+)/g;
|
||||
const TWITTER_HASH_REPLACEMENT =
|
||||
'$1<a href="https://twitter.com/hashtag/$2" target="_blank" rel="noreferrer nofollow noopener">#$2</a>';
|
||||
|
||||
const USER_MENTIONS_REGEX = /mention:\/\/(user|team)\/(\d+)\/(.+)/gm;
|
||||
const TWITTER_HASH_REPLACEMENT = '$1[#$2](https://twitter.com/hashtag/$2)';
|
||||
|
||||
class MessageFormatter {
|
||||
constructor(message, isATweet = false, isAPrivateNote = false) {
|
||||
this.message = DOMPurify.sanitize(escapeHtml(message || ''));
|
||||
this.message = message || '';
|
||||
this.isAPrivateNote = isAPrivateNote;
|
||||
this.isATweet = isATweet;
|
||||
this.marked = marked;
|
||||
|
||||
const renderer = {
|
||||
heading(text) {
|
||||
return `<strong>${text}</strong>`;
|
||||
},
|
||||
link(url, title, text) {
|
||||
const mentionRegex = new RegExp(USER_MENTIONS_REGEX);
|
||||
if (url.match(mentionRegex)) {
|
||||
return `<span class="prosemirror-mention-node">${text}</span>`;
|
||||
}
|
||||
return `<a rel="noreferrer noopener nofollow" href="${url}" class="link" title="${title ||
|
||||
''}" target="_blank">${text}</a>`;
|
||||
},
|
||||
};
|
||||
this.marked.use({ renderer });
|
||||
}
|
||||
|
||||
formatMessage() {
|
||||
let updatedMessage = this.message;
|
||||
if (this.isATweet && !this.isAPrivateNote) {
|
||||
const withUserName = this.message.replace(
|
||||
updatedMessage = updatedMessage.replace(
|
||||
TWITTER_USERNAME_REGEX,
|
||||
TWITTER_USERNAME_REPLACEMENT
|
||||
);
|
||||
const withHash = withUserName.replace(
|
||||
updatedMessage = updatedMessage.replace(
|
||||
TWITTER_HASH_REGEX,
|
||||
TWITTER_HASH_REPLACEMENT
|
||||
);
|
||||
const markedDownOutput = marked(withHash);
|
||||
return markedDownOutput;
|
||||
}
|
||||
DOMPurify.addHook('afterSanitizeAttributes', afterSanitizeAttributes);
|
||||
return DOMPurify.sanitize(
|
||||
marked(this.message, { breaks: true, gfm: true })
|
||||
);
|
||||
return md.render(updatedMessage);
|
||||
}
|
||||
|
||||
get formattedMessage() {
|
||||
|
|
69
app/javascript/shared/helpers/markdownIt/link.js
Normal file
69
app/javascript/shared/helpers/markdownIt/link.js
Normal file
|
@ -0,0 +1,69 @@
|
|||
// Process [@mention](mention://user/1/Pranav)
|
||||
const USER_MENTIONS_REGEX = /mention:\/\/(user|team)\/(\d+)\/(.+)/gm;
|
||||
|
||||
const buildMentionTokens = () => (state, silent) => {
|
||||
var label;
|
||||
var labelEnd;
|
||||
var labelStart;
|
||||
var pos;
|
||||
var res;
|
||||
var token;
|
||||
var href = '';
|
||||
var max = state.posMax;
|
||||
|
||||
if (state.src.charCodeAt(state.pos) !== 0x5b /* [ */) {
|
||||
return false;
|
||||
}
|
||||
|
||||
labelStart = state.pos + 1;
|
||||
labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);
|
||||
|
||||
// parser failed to find ']', so it's not a valid link
|
||||
if (labelEnd < 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
label = state.src.slice(labelStart, labelEnd);
|
||||
pos = labelEnd + 1;
|
||||
|
||||
if (pos < max && state.src.charCodeAt(pos) === 0x28 /* ( */) {
|
||||
pos += 1;
|
||||
res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);
|
||||
if (res.ok) {
|
||||
href = state.md.normalizeLink(res.str);
|
||||
if (state.md.validateLink(href)) {
|
||||
pos = res.pos;
|
||||
} else {
|
||||
href = '';
|
||||
}
|
||||
}
|
||||
pos += 1;
|
||||
}
|
||||
|
||||
if (!href.match(new RegExp(USER_MENTIONS_REGEX))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!silent) {
|
||||
state.pos = labelStart;
|
||||
state.posMax = labelEnd;
|
||||
|
||||
token = state.push('mention', '');
|
||||
token.href = href;
|
||||
token.content = label;
|
||||
}
|
||||
|
||||
state.pos = pos;
|
||||
state.posMax = max;
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
const renderMentions = () => (tokens, idx) => {
|
||||
return `<span class="prosemirror-mention-node">${tokens[idx].content}</span>`;
|
||||
};
|
||||
|
||||
export default function mentionPlugin(md) {
|
||||
md.renderer.rules.mention = renderMentions(md);
|
||||
md.inline.ruler.before('link', 'mention', buildMentionTokens(md));
|
||||
}
|
|
@ -6,14 +6,14 @@ describe('#MessageFormatter', () => {
|
|||
const message =
|
||||
'Chatwoot is an opensource tool. [Chatwoot](https://www.chatwoot.com)';
|
||||
expect(new MessageFormatter(message).formattedMessage).toMatch(
|
||||
'<p>Chatwoot is an opensource tool. <a title="" class="link" href="https://www.chatwoot.com" rel="noreferrer noopener nofollow" target="_blank">Chatwoot</a></p>'
|
||||
'<p>Chatwoot is an opensource tool. <a href="https://www.chatwoot.com" class="link" rel="noreferrer noopener nofollow" target="_blank">Chatwoot</a></p>'
|
||||
);
|
||||
});
|
||||
it('should format correctly', () => {
|
||||
const message =
|
||||
'Chatwoot is an opensource tool. https://www.chatwoot.com';
|
||||
expect(new MessageFormatter(message).formattedMessage).toMatch(
|
||||
'<p>Chatwoot is an opensource tool. <a title="" class="link" href="https://www.chatwoot.com" rel="noreferrer noopener nofollow" target="_blank">https://www.chatwoot.com</a></p>'
|
||||
'<p>Chatwoot is an opensource tool. <a href="https://www.chatwoot.com" class="link" rel="noreferrer noopener nofollow" target="_blank">https://www.chatwoot.com</a></p>'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
@ -22,7 +22,8 @@ describe('#MessageFormatter', () => {
|
|||
it('should format correctly', () => {
|
||||
const message = '### opensource \n ## tool';
|
||||
expect(new MessageFormatter(message).formattedMessage).toMatch(
|
||||
'<strong>opensource</strong><strong>tool</strong>'
|
||||
`<h3>opensource</h3>
|
||||
<h2>tool</h2>`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
@ -39,7 +40,7 @@ describe('#MessageFormatter', () => {
|
|||
expect(
|
||||
new MessageFormatter(message, true, false).formattedMessage
|
||||
).toMatch(
|
||||
'<p><a href="http://twitter.com/chatwootapp" target="_blank" rel="noreferrer nofollow noopener">@chatwootapp</a> is an opensource tool thanks @longnonexistenttwitterusername</p>'
|
||||
'<p><a href="http://twitter.com/chatwootapp" class="link" rel="noreferrer noopener nofollow" target="_blank">@chatwootapp</a> is an opensource tool thanks @longnonexistenttwitterusername</p>'
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -48,7 +49,7 @@ describe('#MessageFormatter', () => {
|
|||
expect(
|
||||
new MessageFormatter(message, true, false).formattedMessage
|
||||
).toMatch(
|
||||
'<p><a href="https://twitter.com/hashtag/chatwootapp" target="_blank" rel="noreferrer nofollow noopener">#chatwootapp</a> is an opensource tool</p>'
|
||||
'<p><a href="https://twitter.com/hashtag/chatwootapp" class="link" rel="noreferrer noopener nofollow" target="_blank">#chatwootapp</a> is an opensource tool</p>'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
@ -90,7 +91,8 @@ describe('#MessageFormatter', () => {
|
|||
const message =
|
||||
'[xssLink](javascript:alert(document.cookie))\n[normalLink](https://google.com)**I am a bold text paragraph**';
|
||||
expect(new MessageFormatter(message).formattedMessage).toMatch(
|
||||
'<p><a title="" class="link" rel="noreferrer noopener nofollow" target="_blank">xssLink</a><br><a title="" class="link" href="https://google.com" rel="noreferrer noopener nofollow" target="_blank">normalLink</a><strong>I am a bold text paragraph</strong></p>'
|
||||
`<p>[xssLink](javascript:alert(document.cookie))<br />
|
||||
<a href="https://google.com" class="link" rel="noreferrer noopener nofollow" target="_blank">normalLink</a><strong>I am a bold text paragraph</strong></p>`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -174,7 +174,7 @@ export default {
|
|||
feedback_message: this.feedbackMessage,
|
||||
};
|
||||
} catch (error) {
|
||||
const errorMessage = error?.response?.data?.error;
|
||||
const errorMessage = error?.response?.data?.message;
|
||||
this.errorMessage = errorMessage || this.$t('SURVEY.API.ERROR_MESSAGE');
|
||||
} finally {
|
||||
this.isUpdating = false;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.file-uploads .attachment-button+label {
|
||||
.file-uploads .attachment-button + label {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@
|
|||
}
|
||||
|
||||
.agent-message-wrap {
|
||||
+.agent-message-wrap {
|
||||
+ .agent-message-wrap {
|
||||
margin-top: $space-micro;
|
||||
|
||||
.agent-message .chat-bubble {
|
||||
|
@ -69,11 +69,11 @@
|
|||
}
|
||||
}
|
||||
|
||||
+.user-message-wrap {
|
||||
+ .user-message-wrap {
|
||||
margin-top: $space-normal;
|
||||
}
|
||||
|
||||
&.has-response+.user-message-wrap {
|
||||
&.has-response + .user-message-wrap {
|
||||
margin-top: $space-micro;
|
||||
|
||||
.chat-bubble {
|
||||
|
@ -81,7 +81,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
&.has-response+.agent-message-wrap {
|
||||
&.has-response + .agent-message-wrap {
|
||||
margin-top: $space-normal;
|
||||
}
|
||||
}
|
||||
|
@ -117,7 +117,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
.user.has-attachment {
|
||||
.icon-wrap {
|
||||
color: $color-white;
|
||||
|
@ -129,7 +128,7 @@
|
|||
}
|
||||
|
||||
.user-message-wrap {
|
||||
+.user-message-wrap {
|
||||
+ .user-message-wrap {
|
||||
margin-top: $space-micro;
|
||||
|
||||
.user-message .chat-bubble {
|
||||
|
@ -137,7 +136,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
+.agent-message-wrap {
|
||||
+ .agent-message-wrap {
|
||||
margin-top: $space-normal;
|
||||
}
|
||||
}
|
||||
|
@ -147,7 +146,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
.unread-messages {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
@ -168,7 +166,7 @@
|
|||
border: 1px solid $color-border-dark;
|
||||
}
|
||||
|
||||
+.chat-bubble-wrap {
|
||||
+ .chat-bubble-wrap {
|
||||
.chat-bubble {
|
||||
border-top-left-radius: $space-smaller;
|
||||
}
|
||||
|
@ -190,7 +188,7 @@
|
|||
border-radius: $space-two;
|
||||
}
|
||||
|
||||
+.chat-bubble-wrap {
|
||||
+ .chat-bubble-wrap {
|
||||
.chat-bubble {
|
||||
border-top-right-radius: $space-smaller;
|
||||
}
|
||||
|
@ -206,7 +204,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
.chat-bubble {
|
||||
@include light-shadow;
|
||||
border-radius: $space-two;
|
||||
|
@ -217,12 +214,13 @@
|
|||
padding: $space-slab $space-normal;
|
||||
text-align: left;
|
||||
word-break: break-word;
|
||||
max-width: 100%;
|
||||
|
||||
:not([audio]) {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
>a {
|
||||
> a {
|
||||
color: $color-primary;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
@ -234,7 +232,7 @@
|
|||
&.user {
|
||||
border-bottom-right-radius: $space-smaller;
|
||||
|
||||
>a {
|
||||
> a {
|
||||
color: $color-white;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ DeviseTokenAuth.setup do |config|
|
|||
|
||||
# Sets the max number of concurrent devices per user, which is 10 by default.
|
||||
# After this limit is reached, the oldest tokens will be removed.
|
||||
config.max_number_of_devices = 25
|
||||
# config.max_number_of_devices = 10
|
||||
|
||||
# Sometimes it's necessary to make several requests to the API at the same
|
||||
# time. In this case, each request in the batch will need to share the same
|
||||
|
|
|
@ -48,11 +48,11 @@ fr:
|
|||
imap:
|
||||
socket_error: Veuillez vérifier la connexion, l'adresse IMAP et réessayez.
|
||||
no_response_error: Veuillez vérifier les identifiants IMAP et réessayez.
|
||||
host_unreachable_error: Hôte injoignable, veuillez vérifier l'adresse IMAP, le port IMAP et réessayer.
|
||||
connection_timed_out_error: La connexion a expiré pour %{address}:%{port}
|
||||
connection_closed_error: Connexion fermée.
|
||||
host_unreachable_error: Host unreachable, Please check the IMAP address, IMAP port and try again.
|
||||
connection_timed_out_error: Connection timed out for %{address}:%{port}
|
||||
connection_closed_error: Connection closed.
|
||||
validations:
|
||||
name: 'ne doit pas commencer ou se terminer par des symboles, et ne doit pas comporter les caractères suivants : "< > / \ @".'
|
||||
name: should not start or end with symbols, and it should not have < > / \ @ characters.
|
||||
reports:
|
||||
period: Période de rapport %{since} à %{until}
|
||||
agent_csv:
|
||||
|
@ -61,14 +61,14 @@ fr:
|
|||
avg_first_response_time: Temps de réponse moyen (Minutes)
|
||||
avg_resolution_time: Temps moyen de résolution (Minutes)
|
||||
inbox_csv:
|
||||
inbox_name: Nom de la boîte de réception
|
||||
inbox_type: Type de boîte de réception
|
||||
conversations_count: Nbre de conversations
|
||||
inbox_name: Inbox name
|
||||
inbox_type: Inbox type
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Temps de réponse moyen (Minutes)
|
||||
avg_resolution_time: Temps moyen de résolution (Minutes)
|
||||
label_csv:
|
||||
label_title: Libellé
|
||||
conversations_count: Nbre de conversations
|
||||
label_title: Label
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Temps de réponse moyen (Minutes)
|
||||
avg_resolution_time: Temps moyen de résolution (Minutes)
|
||||
team_csv:
|
||||
|
@ -79,13 +79,13 @@ fr:
|
|||
default_group_by: jour
|
||||
csat:
|
||||
headers:
|
||||
contact_name: Nom du contact
|
||||
contact_email_address: Adresse e-mail du contact
|
||||
contact_phone_number: Numéro de téléphone du contact
|
||||
link_to_the_conversation: Lier à la conversation
|
||||
contact_name: Contact Name
|
||||
contact_email_address: Contact Email Address
|
||||
contact_phone_number: Contact Phone Number
|
||||
link_to_the_conversation: Link to the conversation
|
||||
agent_name: Nom de l'agent
|
||||
rating: Note
|
||||
feedback: Commentaire
|
||||
feedback: Feedback Comment
|
||||
recorded_at: Recorded date
|
||||
notifications:
|
||||
notification_title:
|
||||
|
@ -96,7 +96,7 @@ fr:
|
|||
conversations:
|
||||
messages:
|
||||
instagram_story_content: "%{story_sender} vous a mentionné dans l'histoire: "
|
||||
instagram_deleted_story_content: Cette Story n'est plus disponible.
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: Ce message a été supprimé
|
||||
activity:
|
||||
status:
|
||||
|
@ -151,9 +151,9 @@ fr:
|
|||
description: "L'intégration FullContact permet d'enrichir les profils de visiteurs. Identifiez les utilisateurs dès qu'ils partagent leur adresse de courriel et offrez-leur un service client sur mesure. Connectez FullContact à votre compte en partageant la clé API FullContact."
|
||||
public_portal:
|
||||
search:
|
||||
search_placeholder: Rechercher un article par titre ou contenu...
|
||||
search_placeholder: Search for article by title or body...
|
||||
empty_placeholder: Aucun résultat trouvé.
|
||||
loading_placeholder: Recherche en cours...
|
||||
results_title: Résultats de recherche
|
||||
loading_placeholder: Searching...
|
||||
results_title: Search results
|
||||
hero:
|
||||
sub_title: Recherchez les articles ici ou parcourez les catégories ci-dessous.
|
||||
sub_title: Search for the articles here or browse the categories below.
|
||||
|
|
|
@ -6,7 +6,7 @@ const vue = require('./loaders/vue');
|
|||
environment.plugins.prepend('VueLoaderPlugin', new VueLoaderPlugin());
|
||||
environment.loaders.prepend('vue', vue);
|
||||
|
||||
environment.loaders.append('opus-ogg', {
|
||||
environment.loaders.append('opus', {
|
||||
test: /encoderWorker\.min\.js$/,
|
||||
loader: 'file-loader',
|
||||
options: {
|
||||
|
@ -14,14 +14,6 @@ environment.loaders.append('opus-ogg', {
|
|||
},
|
||||
});
|
||||
|
||||
environment.loaders.append('opus-wav', {
|
||||
test: /waveWorker\.min\.js$/,
|
||||
loader: 'file-loader',
|
||||
options: {
|
||||
name: '[name].[ext]',
|
||||
},
|
||||
});
|
||||
|
||||
environment.loaders.append('audio', {
|
||||
test: /\.(mp3)(\?.*)?$/,
|
||||
loader: 'url-loader',
|
||||
|
|
|
@ -43,7 +43,8 @@
|
|||
"highlight.js": "~10.4.1",
|
||||
"ionicons": "~2.0.1",
|
||||
"js-cookie": "^2.2.1",
|
||||
"marked": "4.0.10",
|
||||
"markdown-it": "^13.0.1",
|
||||
"markdown-it-link-attributes": "^4.0.1",
|
||||
"md5": "^2.3.0",
|
||||
"ninja-keys": "^1.1.9",
|
||||
"opus-recorder": "^8.0.5",
|
||||
|
|
36
yarn.lock
36
yarn.lock
|
@ -4819,6 +4819,11 @@ argparse@^1.0.7:
|
|||
dependencies:
|
||||
sprintf-js "~1.0.2"
|
||||
|
||||
argparse@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
|
||||
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
|
||||
|
||||
aria-query@^4.2.2:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b"
|
||||
|
@ -7482,6 +7487,11 @@ entities@~2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
|
||||
integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==
|
||||
|
||||
entities@~3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4"
|
||||
integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==
|
||||
|
||||
errno@^0.1.3, errno@~0.1.7:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
|
||||
|
@ -10914,6 +10924,13 @@ linkify-it@^2.0.0:
|
|||
dependencies:
|
||||
uc.micro "^1.0.1"
|
||||
|
||||
linkify-it@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec"
|
||||
integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==
|
||||
dependencies:
|
||||
uc.micro "^1.0.1"
|
||||
|
||||
lint-staged@10.5.4:
|
||||
version "10.5.4"
|
||||
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.4.tgz#cd153b5f0987d2371fc1d2847a409a2fe705b665"
|
||||
|
@ -11314,6 +11331,11 @@ markdown-escapes@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
|
||||
integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
|
||||
|
||||
markdown-it-link-attributes@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/markdown-it-link-attributes/-/markdown-it-link-attributes-4.0.1.tgz#25751f2cf74fd91f0a35ba7b3247fa45f2056d88"
|
||||
integrity sha512-pg5OK0jPLg62H4k7M9mRJLT61gUp9nvG0XveKYHMOOluASo9OEF13WlXrpAp2aj35LbedAy3QOCgQCw0tkLKAQ==
|
||||
|
||||
markdown-it@^10.0.0:
|
||||
version "10.0.0"
|
||||
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-10.0.0.tgz#abfc64f141b1722d663402044e43927f1f50a8dc"
|
||||
|
@ -11325,10 +11347,16 @@ markdown-it@^10.0.0:
|
|||
mdurl "^1.0.1"
|
||||
uc.micro "^1.0.5"
|
||||
|
||||
marked@4.0.10:
|
||||
version "4.0.10"
|
||||
resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.10.tgz#423e295385cc0c3a70fa495e0df68b007b879423"
|
||||
integrity sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==
|
||||
markdown-it@^13.0.1:
|
||||
version "13.0.1"
|
||||
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430"
|
||||
integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
entities "~3.0.1"
|
||||
linkify-it "^4.0.1"
|
||||
mdurl "^1.0.1"
|
||||
uc.micro "^1.0.5"
|
||||
|
||||
material-colors@^1.0.0:
|
||||
version "1.2.6"
|
||||
|
|
Loading…
Reference in a new issue