diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e383264a..531036d5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## 1.9.4 - 2021-08-19 +[FIX] Iframe overlay (#631) +[IMPROVE] German informal translation (#622) +[FIX] Translation error on department (#632) +[IMPROVE] Open links in another tab on Livechat widget (#610) +[IMPROVE] Dutch Translations (#601) ## 1.9.3 - 2021-04-21 [FIX] sound notification on/off (#567) diff --git a/package.json b/package.json index da8764703..c9d4acad0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/livechat", - "version": "1.9.3", + "version": "1.9.4", "files": [ "/build" ], diff --git a/src/components/Messages/MessageText/markdown.js b/src/components/Messages/MessageText/markdown.js index 383cf788f..ca1c4d6bf 100644 --- a/src/components/Messages/MessageText/markdown.js +++ b/src/components/Messages/MessageText/markdown.js @@ -81,4 +81,4 @@ md.use((md) => { }); }); -export const renderMarkdown = (...args) => sanitize(md.render(...args)); +export const renderMarkdown = (...args) => sanitize(md.render(...args), { ADD_ATTR: ['target', 'rel'] }); diff --git a/src/i18n/de_IN.json b/src/i18n/de_IN.json new file mode 100644 index 000000000..533fb9874 --- /dev/null +++ b/src/i18n/de_IN.json @@ -0,0 +1,87 @@ +{ + "de_informal": { + "are_you_sure_you_want_to_finish_this_chat_1db5c13b": "Bist Du sicher, dass Du den Chat beenden möchtest?", + "are_you_sure_you_want_to_remove_all_of_your_person_426720f1": "Bust Du sicher, dass Du alle Deine Daten löschen möchtest?", + "are_you_sure_you_want_to_switch_the_department_d50a0b08": "Bist Du sicher, dass Du die Abteilung wechseln möchtest?", + "cancel_caeb1e68": "Abbrechen", + "change_department_1d671538": "Abteilung wechseln", + "change_department_523a16e8": "Abteilung wechseln", + "chat_finished_effbd589": "Chat beendet", + "chat_now_3d7f6769": "Jetzt chatten", + "choose_a_department_b106da55": "Wähle eine Abteilung", + "choose_a_department_fe9755fd": "Wähle eine Abteilung", + "choose_an_option_26ac97d2": "Wähle eine Option", + "conversation_finished_6a0f2811": "Gespräch beendet", + "count_new_messages_since_since_47c9d2a0": { + "one": "Eine neue Nachricht seit %{since}", + "other": "%{count} neue Nachrichten seit %{since}" + }, + "department_switched_cff305cf": "Abteilung wurde gewechselt", + "departments_3826b025": "Abteilungen", + "disable_notifications_dd6a3180": "Benachrichtigungen deaktivieren", + "dismiss_this_alert_ea9b3104": "Diese Warnung schließen", + "drop_here_to_upload_a_file_e5f4dd60": "Datei zum Hochladen hierher ziehen", + "email_22a7d52d": "E-Mail", + "enable_notifications_a3daf4b1": "Benachrichtigungen aktivieren", + "error_closing_chat_4c5e29d7": "Beim Schliessen des Chats ist ein Fehler aufgetreten", + "error_removing_user_data_ce507478": "Beim Löschen der Benutzerdaten ist ein Fehler aufgetreten", + "error_starting_a_new_conversation_reason_a1b491a1": "Fehler beim Starten einer neuen Konversation: %{reason}", + "expand_chat_a0045dbd": "Chat vergrößern", + "field_required_fc5c6b05": "Feld erforderlich", + "file_exceeds_allowed_size_of_size_bd65c389": "Die Datei überschreitet die maximal erlaubte Größe von: %{size}.", + "fileupload_error_9eedee68": "Datei-Upload Fehler", + "finish_this_chat_87b79542": "Diesen Chat beenden", + "forget_remove_my_data_e1d68cdd": "Vergiss/Lösche meine Daten", + "from_returned_the_chat_to_the_queue_3edcd32": "%{from} hat den Chat zur Warteschleife zurückverwiesen", + "from_transferred_the_chat_to_the_department_to_752ab298": "%{from} übertragen zur Abteilung %{to}", + "from_transferred_the_chat_to_to_15bdcb11": "%{from} übertragen des Chats zu %{to}", + "gdpr_8b366c2b": "DSGVO", + "go_to_menu_options_forget_remove_my_personal_data__99c40934": "Gehe zum **Menü Optionen → Vergiss/Lösche meine Daten**, um die sofortige Löschung Deiner Daten zu beantragen.", + "hiddenelementscount_more_c017d614": "+ %{hiddenElementsCount} mehr", + "i_agree_df2ecbd4": "Ich stimme zu", + "i_need_help_with_61054e21": "Ich benötige Hilfe mit ...", + "if_you_have_any_other_questions_just_press_the_but_ceaadfa0": "Falls Du weitere Fragen hast, drücke unten den Button, um einen neuen Chat zu beginnen.", + "insert_your_field_here_d631e875": "Hier %{field} eintragen ...", + "invalid_email_e82f3682": "Ungültige E-Mail-Adresse", + "invalid_value_12ca12c2": "Ungültiger Wert", + "leave_a_message_5b581048": "Hinterlasse eine Nachricht", + "livechat_connected_afee1c5b": "Livechat verbunden.", + "livechat_is_not_connected_b40328ca": "Livechat ist nicht verbunden.", + "media_types_not_accepted_4e25676a": "Der Medientyp wird nicht akzeptiert.", + "message_5c38209d": "Nachricht", + "minimize_chat_804b3135": "Chat minimieren", + "name_1aed4a1b": "Name", + "need_help_803a61": "Benötigst Du Hilfe?", + "new_chat_f525c39e": "Neuer Chat", + "no_available_agents_to_transfer_3ae30cec": "Keine verfügbaren Mitarbeiter/innen zum Übertragen", + "no_e16d9132": "Nein", + "ok_c47544a2": "OK", + "options_3ab0ea65": "Optionen", + "please_tell_us_some_information_to_start_the_chat_ac135cbb": "Bitte nenne uns ein paar Informationen, um den Chat zu beginnen", + "please_wait_for_the_next_available_agent_b2a49c4c": "Bitte habe etwas Geduld. Wir sind in Kürze für Dich da ...", + "powered_by_rocket_chat_4d7c2ab4": "Powered by Rocket.Chat", + "restore_chat_3bfecf2b": "Chat wiederaufnehmen", + "room_name_changed_9c42350a": "Raumname geändert", + "send_e3bd0ed0": "Senden", + "sound_is_off_a743f419": "Ton ist aus", + "sound_is_on_98a9ec58": "Ton ist an", + "start_chat_8606d464": "Chat beginnen", + "thanks_for_talking_with_us_719cce22": "Vielen Dank für unser Gespräch", + "the_controller_of_your_personal_data_is_company_na_c82f5567": "Der Datenschutzbeauftragte Deiner persönlichen Daten ist [Company Name], mit eingetragenem Firmensitz in [Company Address]. Indem Du den Chat startst, erklärst Du dich damit einverstanden, dass Deine persönlichen Daten im Einklang mit der Datenschutz-Grundverordnung (DSGVO) verarbeitet und weitergegeben werden.", + "type_your_message_here_6a05bd0f": "Gib hier Deine Nachricht ein", + "unread_messages_5e18e7b7": "ungelesene Nachrichten", + "user_added_by_525b6b11": "Benutzer/in hinzugefügt von", + "user_joined_407ba0d": "Benutzer/in ist dem Kanal beigetreten", + "user_left_58ed9c36": "Benutzer/in hat den Kanal verlassen", + "user_removed_by_e990f856": "Benutzer/in entfernt von", + "waiting_queue_800061da": "Warteschlange ...", + "we_are_not_online_right_now_please_leave_a_message_57df1966": "Wir sind momentan nicht online. Bitte hinterlasse uns eine Nachricht.", + "welcome_dd4e7151": "Willkommen", + "write_your_message_6eee0188": "Schreibe Deine Nachricht ...", + "yes_dde87d5": "Ja", + "you_browser_doesn_t_support_audio_element_3391386f": "Dein Browser unterstützt keine Audio Elemente", + "you_browser_doesn_t_support_video_element_e9cbd81e": "Dein Browser unterstützt keine Video Elemente", + "your_spot_is_spot_a35cd288": "Dein Platz ist #%{spot}", + "your_spot_is_spot_estimated_wait_time_estimatedwai_d0ff46e0": "Dein Platz ist #%{spot} (geschätzte Wartezeit: %{estimatedWaitTime})" + } +} diff --git a/src/i18n/nl.json b/src/i18n/nl.json index d070dad63..df31c523d 100644 --- a/src/i18n/nl.json +++ b/src/i18n/nl.json @@ -1,8 +1,8 @@ { "nl": { "are_you_sure_you_want_to_finish_this_chat_1db5c13b": "Weet je zeker dat je deze chat wilt beëindigen?", - "are_you_sure_you_want_to_remove_all_of_your_person_426720f1": "Weet u zeker dat u al je persoonlijke gegevens wilt verwijderen?", - "are_you_sure_you_want_to_switch_the_department_d50a0b08": "Weet je het zeker dat je wilt wisselen van afdeling?", + "are_you_sure_you_want_to_remove_all_of_your_person_426720f1": "Weet je zeker dat je al je persoonlijke gegevens wilt verwijderen?", + "are_you_sure_you_want_to_switch_the_department_d50a0b08": "Weet je zeker dat je wilt wisselen van afdeling?", "cancel_caeb1e68": "Annuleren", "change_department_1d671538": "Afdeling wijzigen", "change_department_523a16e8": "Afdeling wijzigen", @@ -20,32 +20,32 @@ "departments_3826b025": "Afdelingen", "disable_notifications_dd6a3180": "Meldingen uitschakelen", "dismiss_this_alert_ea9b3104": "Deze waarschuwing negeren", - "drop_here_to_upload_a_file_e5f4dd60": "Drop hier je bestand om deze op te laden", - "email_22a7d52d": "Email", + "drop_here_to_upload_a_file_e5f4dd60": "Sleep je bestand hier naartoe om deze te uploaden", + "email_22a7d52d": "E-mailadres", "enable_notifications_a3daf4b1": "Notificaties aanzetten", "error_closing_chat_4c5e29d7": "Fout bij sluiten van chat.", "error_removing_user_data_ce507478": "Fout bij verwijderen van gebruikersgegevens.", "error_starting_a_new_conversation_reason_a1b491a1": "Fout bij het starten van een nieuw gesprek: %{reason}", "expand_chat_a0045dbd": "Chat uitbreiden", - "field_required_fc5c6b05": "Field required", - "file_exceeds_allowed_size_of_size_bd65c389": "Bestand overschrijdt de toegestane grootte van %{size}.", - "fileupload_error_9eedee68": "Fout bij het opladen", + "field_required_fc5c6b05": "Dit veld is vereist", + "file_exceeds_allowed_size_of_size_bd65c389": "Het bestand overschrijdt de toegestane grootte van %{size}.", + "fileupload_error_9eedee68": "Fout bij het uploaden", "finish_this_chat_87b79542": "Sluit deze chat af", "forget_remove_my_data_e1d68cdd": "Vergeet/verwijder mijn gegevens", - "from_returned_the_chat_to_the_queue_3edcd32": "%{from} returned the chat to the queue", - "from_transferred_the_chat_to_the_department_to_752ab298": "%{from} transferred the chat to the department %{to}", - "from_transferred_the_chat_to_to_15bdcb11": "%{from} transferred the chat to %{to}", - "gdpr_8b366c2b": "GDPR", + "from_returned_the_chat_to_the_queue_3edcd32": "%{from} heeft de chat opnieuw in de wachtrij gezet", + "from_transferred_the_chat_to_the_department_to_752ab298": "%{from} heeft de chat overgedragen aan afdeling %{to}", + "from_transferred_the_chat_to_to_15bdcb11": "%{from} heeft de chat overgedragen aan %{to}", + "gdpr_8b366c2b": "AVG", "go_to_menu_options_forget_remove_my_personal_data__99c40934": "Ga naar **optie menu → Vergeet/verwijder mijn gegevens** om een aanvraag te doen om je gegevens te verwijderen.", - "hiddenelementscount_more_c017d614": "+ %{hiddenElementsCount} more", + "hiddenelementscount_more_c017d614": "+ %{hiddenElementsCount} meer", "i_agree_df2ecbd4": "Ik ga akkoord", "i_need_help_with_61054e21": "Ik heb hulp nodig met...", "if_you_have_any_other_questions_just_press_the_but_ceaadfa0": "Als je nog andere vragen hebt, druk dan op de onderstaande knop om een nieuwe chat te starten.", - "insert_your_field_here_d631e875": "Insert your %{field} here...", - "invalid_email_e82f3682": "Invalid email", - "invalid_value_12ca12c2": "Invalid value", - "leave_a_message_5b581048": "Laat een bericht na", - "livechat_connected_afee1c5b": "Laat een bericht na.", + "insert_your_field_here_d631e875": "Vul hier je %{field} in...", + "invalid_email_e82f3682": "Ongeldig E-mailadres", + "invalid_value_12ca12c2": "Ongeldige waarde", + "leave_a_message_5b581048": "Laat een bericht achter", + "livechat_connected_afee1c5b": "Laat een bericht achter.", "livechat_is_not_connected_b40328ca": "Livechat is niet verbonden.", "media_types_not_accepted_4e25676a": "Mediatypen worden niet geaccepteerd.", "message_5c38209d": "Bericht", @@ -67,13 +67,13 @@ "sound_is_on_98a9ec58": "Geluid is aan", "start_chat_8606d464": "Start chat", "thanks_for_talking_with_us_719cce22": "Bedankt voor je gesprek", - "the_controller_of_your_personal_data_is_company_na_c82f5567": "De beheerder van je persoonlijke gegevens is [Company Name], met maatschappelijke zetel op [Company Address]. Om de chat te starten, gaat u ermee akkoord dat je persoonlijke gegevens worden verwerkt en verzonden in overeenstemming met de Algemene Verordening Gegevensbescherming (AVG).", - "type_your_message_here_6a05bd0f": "Schrijf je bericht hier", + "the_controller_of_your_personal_data_is_company_na_c82f5567": "De beheerder van je persoonlijke gegevens is [Company Name], met maatschappelijke zetel op [Company Address]. Om de chat te starten, gaat je ermee akkoord dat je persoonlijke gegevens worden verwerkt en verzonden in overeenstemming met de Algemene Verordening Gegevensbescherming (AVG).", + "type_your_message_here_6a05bd0f": "Schrijf hier je bericht", "unread_messages_5e18e7b7": "ongelezen berichten", "user_added_by_525b6b11": "Gebruiker toegevoegd door", "user_joined_407ba0d": "Gebruiker is toegetreden", "user_left_58ed9c36": "Gebruiker is weggegaan", - "user_removed_by_e990f856": "Gebruiker verwijderd door", + "user_removed_by_e990f856": "Gebruiker is verwijderd door", "waiting_queue_800061da": "Wachtrij...", "we_are_not_online_right_now_please_leave_a_message_57df1966": "We zijn nu niet online. Laat alsjeblieft een bericht achter.", "welcome_dd4e7151": "Welkom", @@ -84,4 +84,4 @@ "your_spot_is_spot_a35cd288": "Je plaats is #%{spot}", "your_spot_is_spot_estimated_wait_time_estimatedwai_d0ff46e0": "Je plek is #%{spot} (geschatte wachttijd: %{estimatedWaitTime})" } -} \ No newline at end of file +} diff --git a/src/i18n/pt_BR.json b/src/i18n/pt_BR.json index c17e60695..b42b5fa26 100644 --- a/src/i18n/pt_BR.json +++ b/src/i18n/pt_BR.json @@ -4,8 +4,8 @@ "are_you_sure_you_want_to_remove_all_of_your_person_426720f1": "Tem certeza de que deseja remover todos os seus dados pessoais?", "are_you_sure_you_want_to_switch_the_department_d50a0b08": "Tem certeza de que deseja trocar de departamento?", "cancel_caeb1e68": "Cancelar", - "change_department_1d671538": "Trocar departmento", - "change_department_523a16e8": "Trocar Departmento", + "change_department_1d671538": "Trocar departamento", + "change_department_523a16e8": "Trocar Departamento", "chat_finished_effbd589": "Chat Terminado", "chat_now_3d7f6769": "Converse agora", "choose_a_department_b106da55": "Escolha um departamento...", @@ -16,7 +16,7 @@ "one": "Uma nova mensagem desde %{since}", "other": "%{count} novas mensagens desde %{since}" }, - "department_switched_cff305cf": "Departmento trocado", + "department_switched_cff305cf": "Departamento trocado", "departments_3826b025": "Departamentos", "disable_notifications_dd6a3180": "Disabilitar notificações", "dismiss_this_alert_ea9b3104": "Ignorar este alerta", diff --git a/src/lib/triggers.js b/src/lib/triggers.js index 830ec4222..9d6b24245 100644 --- a/src/lib/triggers.js +++ b/src/lib/triggers.js @@ -124,7 +124,6 @@ class Triggers { } route('/trigger-messages'); - parentCall('openWidget'); store.setState({ minimized: false }); }); } diff --git a/src/routes/TriggerMessage/component.js b/src/routes/TriggerMessage/component.js index 4261257fb..f675ad4b0 100644 --- a/src/routes/TriggerMessage/component.js +++ b/src/routes/TriggerMessage/component.js @@ -1,8 +1,9 @@ -import { h, Component } from 'preact'; +import { h, Component, createRef } from 'preact'; import Screen from '../../components/Screen'; import { createClassName } from '../../components/helpers'; import I18n from '../../i18n'; +import { parentCall } from '../../lib/parentCall'; import styles from './styles.scss'; @@ -11,6 +12,21 @@ const defaultTitle = I18n.t('Messages'); export default class TriggerMessage extends Component { state = { } + constructor(props) { + super(props); + this.ref = createRef(); + } + + componentDidUpdate() { + let height = 0; + + this.ref.current.base.children.forEach((el) => { + height += el.scrollHeight; + }); + + parentCall('resizeWidget', height); + } + render({ title, messages, loading, onStartChat = () => {}, departments, ...props }) { const { theme: { color } } = props; return ( @@ -18,6 +34,7 @@ export default class TriggerMessage extends Component { title={title || defaultTitle} {...props} triggered={true} + ref={this.ref} > {messages && messages.map((message) => message.msg &&

{message.msg}

)} diff --git a/src/routes/TriggerMessage/container.js b/src/routes/TriggerMessage/container.js index a3232d0e0..cf2be5792 100644 --- a/src/routes/TriggerMessage/container.js +++ b/src/routes/TriggerMessage/container.js @@ -10,6 +10,7 @@ import TriggerMessage from './component'; export class TriggerMessageContainer extends Component { handleStart() { parentCall('setFullScreenDocumentMobile'); + parentCall('openWidget'); route('/'); } diff --git a/src/routes/TriggerMessage/styles.scss b/src/routes/TriggerMessage/styles.scss index 0e6dc8f90..e55ae2fe1 100644 --- a/src/routes/TriggerMessage/styles.scss +++ b/src/routes/TriggerMessage/styles.scss @@ -2,12 +2,16 @@ .trigger-message { &__message { + max-height: 192px; + margin: 0.4rem 0; letter-spacing: 0; font-size: 0.75rem; + line-height: 1rem; + overflow-wrap: normal; } &__footer { diff --git a/src/store/Store.js b/src/store/Store.js index bb8ac8664..58e78f4b0 100644 --- a/src/store/Store.js +++ b/src/store/Store.js @@ -47,7 +47,7 @@ export default class Store { }); window.addEventListener('visibilitychange', () => { - !this._state.minimized && parentCall('openWidget'); + !this._state.minimized && !this._state.triggered && parentCall('openWidget'); this._state.iframe.visible ? parentCall('showWidget') : parentCall('hideWidget'); }); diff --git a/src/widget.js b/src/widget.js index d1286107c..ba60fb47f 100644 --- a/src/widget.js +++ b/src/widget.js @@ -23,6 +23,7 @@ let ready = false; let smallScreen = false; let bodyStyle; let scrollPosition; +let widget_height; export const validCallbacks = [ 'chat-maximized', @@ -93,9 +94,8 @@ const updateWidgetStyle = (isOpened) => { * for widget.style.width */ + widget.style.height = smallScreen ? '100%' : `${ WIDGET_MARGIN + widget_height + WIDGET_MARGIN + WIDGET_MINIMIZED_HEIGHT }px`; widget.style.width = smallScreen ? '100%' : `${ WIDGET_MARGIN + WIDGET_OPEN_WIDTH + WIDGET_MARGIN }px`; - widget.style.height = smallScreen ? '100%' - : `${ WIDGET_MARGIN + WIDGET_OPEN_HEIGHT + WIDGET_MARGIN + WIDGET_MINIMIZED_HEIGHT + WIDGET_MARGIN }px`; } else { widget.style.left = 'auto'; widget.style.width = `${ WIDGET_MARGIN + WIDGET_MINIMIZED_WIDTH + WIDGET_MARGIN }px`; @@ -153,12 +153,19 @@ const openWidget = () => { return; } + widget_height = WIDGET_OPEN_HEIGHT; updateWidgetStyle(true); widget.dataset.state = 'opened'; iframe.focus(); emitCallback('chat-maximized'); }; +const resizeWidget = (height) => { + widget_height = height; + updateWidgetStyle(true); + widget.dataset.state = 'triggered'; +}; + function closeWidget() { if (widget.dataset.state === 'closed') { return; @@ -197,7 +204,7 @@ const api = { openPopout() { closeWidget(); api.popup = window.open(`${ config.url }${ config.url.lastIndexOf('?') > -1 ? '&' : '?' }mode=popout`, - 'livechat-popout', `width=${ WIDGET_OPEN_WIDTH }, height=${ WIDGET_OPEN_HEIGHT }, toolbars=no`); + 'livechat-popout', `width=${ WIDGET_OPEN_WIDTH }, height=${ widget_height }, toolbars=no`); api.popup.focus(); }, @@ -205,6 +212,10 @@ const api = { openWidget(); }, + resizeWidget(height) { + resizeWidget(height); + }, + removeWidget() { document.body.removeChild(widget); },