From 6c9fc1146f466230840d9177f5b0daf1f55a8313 Mon Sep 17 00:00:00 2001 From: marvin-borner@live.com Date: Tue, 17 Apr 2018 18:35:48 +0200 Subject: Fixed translation issues - extended cms use --- main/app/sprinkles/core/asset-bundles.json | 2 - .../sprinkles/core/assets/SiteAssets/js/chat.js | 117 ---------------- main/app/sprinkles/core/config/default.php | 2 +- main/app/sprinkles/core/locale/de_DE/main.php | 15 +++ main/app/sprinkles/core/locale/de_DE/messages.php | 150 ++++++++++----------- main/app/sprinkles/core/locale/en_US/main.php | 15 +++ main/app/sprinkles/core/locale/fr_FR/main.php | 15 +++ .../templates/pages/abstract/mainsite.html.twig | 1 - .../sprinkles/core/templates/pages/index.html.twig | 20 +-- .../core/templates/pages/partials/chat.js.twig | 123 +++++++++++++++++ 10 files changed, 250 insertions(+), 210 deletions(-) delete mode 100644 main/app/sprinkles/core/assets/SiteAssets/js/chat.js create mode 100644 main/app/sprinkles/core/locale/de_DE/main.php create mode 100644 main/app/sprinkles/core/locale/en_US/main.php create mode 100644 main/app/sprinkles/core/locale/fr_FR/main.php create mode 100644 main/app/sprinkles/core/templates/pages/partials/chat.js.twig (limited to 'main') diff --git a/main/app/sprinkles/core/asset-bundles.json b/main/app/sprinkles/core/asset-bundles.json index 053fffe..caa5d7b 100755 --- a/main/app/sprinkles/core/asset-bundles.json +++ b/main/app/sprinkles/core/asset-bundles.json @@ -49,9 +49,7 @@ "SiteAssets/js/fontawesome.js", "SiteAssets/js/modernizr.js", "SiteAssets/js/linkify.js", - "SiteAssets/js/language.js", "SiteAssets/js/encryption.js", - "SiteAssets/js/chat.js", "SiteAssets/js/slick.js", "SiteAssets/js/main.js" ], diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js deleted file mode 100644 index bcb910b..0000000 --- a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js +++ /dev/null @@ -1,117 +0,0 @@ -/************ - GENERATE KEYS - ************/ -if (localStorage.getItem('KeysGenerated') === null || localStorage.getItem('KeysGenerated') !== "true") { - // GENERATE -- LATER ON LOGIN! - var EncryptionPhrase = "PASSWORD 123"; // THE USERS PASSWORD - var RSABitLength = 1024; - var PrivateKeyString = cryptico.generateRSAKey(EncryptionPhrase, RSABitLength); - var PublicKeyString = cryptico.publicKeyString(PrivateKeyString); - // SAVE TO DATABASE - $.ajax({ - type: "POST", - url: "assets/php/SavePublicKey.php", - data: { - UserID: "1", // TEMPORARY - PublicKeyString: PublicKeyString - }, - async: true, - error: function () { - console.error("Error while saving public key to database!"); - }, - success: function () { - localStorage.setItem('KeysGenerated', "true"); - } - }); -} - - -/****** - GENERAL - ******/ - -var ChatTextInput = $("#ChatTextInput"); -var SubscribeTextInput = $("#SubscribeTextInput"); -var ChatMessages = $("#ChatMessages"); - -var WebSocket = new WebSocket('wss://marvinborner.ddnss.de:1337'); - -WebSocket.onopen = function () { - console.log("Chat connection established!"); -}; - -WebSocket.onmessage = function (e) { - var LastMessage = $(".ChatMessage:last"); - var MessageObject = JSON.parse(e.data); - if (MessageObject.ServerMessage === false) { - if (MessageObject.WasHimself === true) { //MessageObject.Username - if (!LastMessage.hasClass("MessageSent")) { - ChatMessages.append("
" + MessageObject.Message + "


"); - } else if (LastMessage.hasClass("MessageSent")) { - if (LastMessage.hasClass("AloneMessage")) { - LastMessage.removeClass("AloneMessage"); - LastMessage.addClass("TopMessage"); - } else if (LastMessage.hasClass("BottomMessage")) { - LastMessage.removeClass("BottomMessage"); - LastMessage.addClass("MiddleMessage"); - } - ChatMessages.append("
" + MessageObject.Message + "


"); - } - $('.MessageSent').linkify({ - target: "_blank" - }); - } else if (MessageObject.WasHimself === false) { - if (!LastMessage.hasClass("MessageReceived")) { - ChatMessages.append("
" + MessageObject.Message + "


"); - } else if (LastMessage.hasClass("MessageReceived")) { - if (LastMessage.hasClass("AloneMessage")) { - LastMessage.removeClass("AloneMessage"); - LastMessage.addClass("TopMessage"); - } else if (LastMessage.hasClass("BottomMessage")) { - LastMessage.removeClass("BottomMessage"); - LastMessage.addClass("MiddleMessage"); - } - ChatMessages.append("
" + MessageObject.Message + "


"); - } - $('.MessageReceived').linkify({ - target: "_blank" - }); - } - } else if (MessageObject.ServerMessage === true) { - if (MessageObject.ServerMessageType === "GroupJoin") { - if (MessageObject.WasHimself === false) { - ChatMessages.append("
" + MessageObject.Username + " .


"); - } else if (MessageObject.WasHimself === true) { - ChatMessages.empty(); - ChatMessages.append("
" + MessageObject.GroupName + ".


"); - } - } else if (MessageObject.ServerMessageType === "UserDisconnect") { - ChatMessages.append("
" + MessageObject.Username + " .


"); - } - } - initiateLanguage(); // need further work (performance) -}; - -ChatTextInput.keyup(function (e) { - if (e.keyCode === 13) { - sendMessage(ChatTextInput.val()); - ChatTextInput.val(""); - } -}); - -SubscribeTextInput.keyup(function (e) { - if (e.keyCode === 13) { - subscribe(SubscribeTextInput.val()); - } -}); - -function subscribe(channel) { - WebSocket.send(JSON.stringify({ClientMessageType: "Subscribe", Channel: channel})); - SubscribeTextInput.hide(); - ChatTextInput.show(); -} - -function sendMessage(msg) { - WebSocket.send(JSON.stringify({ClientMessageType: "Message", Message: msg})); - ChatTextInput.val(""); -} diff --git a/main/app/sprinkles/core/config/default.php b/main/app/sprinkles/core/config/default.php index 2e62fd1..134b5d4 100755 --- a/main/app/sprinkles/core/config/default.php +++ b/main/app/sprinkles/core/config/default.php @@ -154,7 +154,7 @@ // This can be a comma-separated list, to load multiple fallback locales 'default' => 'en_US' ], - 'title' => 'SocialNetwork', + 'title' => 'BEAM-Messenger', // Global ufTable settings 'uf_table' => [ 'use_loading_transition' => true diff --git a/main/app/sprinkles/core/locale/de_DE/main.php b/main/app/sprinkles/core/locale/de_DE/main.php new file mode 100644 index 0000000..250e038 --- /dev/null +++ b/main/app/sprinkles/core/locale/de_DE/main.php @@ -0,0 +1,15 @@ + [ + "FEED" => "Neues", + "EXPLORE" => "Entdecken", + "CHAT" => "Nachrichten", + "FRIENDS" => "Freunde", + "PERSONAL" => "Persönliche Daten" + ], + "CHAT_MESSAGES" => [ + "USER_GROUP_JOIN" => "{{user}} ist der Gruppe beigetreten", + "YOU_GROUP_JOIN" => "Du bist der Gruppe beigetreten", + "USER_DISCONNECT" => "{{user}} hat sich vom Server getrennt" + ] +]; \ No newline at end of file diff --git a/main/app/sprinkles/core/locale/de_DE/messages.php b/main/app/sprinkles/core/locale/de_DE/messages.php index e254c65..999947d 100755 --- a/main/app/sprinkles/core/locale/de_DE/messages.php +++ b/main/app/sprinkles/core/locale/de_DE/messages.php @@ -16,108 +16,108 @@ return [ "@PLURAL_RULE" => 1, - "ABOUT" => "Über", + "ABOUT" => "Über", "CAPTCHA" => [ - "@TRANSLATION" => "Sicherheitscode", - "FAIL" => "Sie haben den Sicherheitscode nicht korrekt eingegeben.", - "SPECIFY" => "Geben Sie den Sicherheitscode ein", - "VERIFY" => "Überprüfen Sie den Sicherheitscode" + "@TRANSLATION" => "Sicherheitscode", + "FAIL" => "Sie haben den Sicherheitscode nicht korrekt eingegeben.", + "SPECIFY" => "Geben Sie den Sicherheitscode ein", + "VERIFY" => "Überprüfen Sie den Sicherheitscode" ], - "CSRF_MISSING" => "Fehlender CSRF-Token. Versuchen, die Seite zu aktualisieren und erneut zu senden?", + "CSRF_MISSING" => "Fehlender CSRF-Token. Versuchen, die Seite zu aktualisieren und erneut zu senden?", - "DB_INVALID" => "Keine Verbindung zur Datenbank möglich. Wenn Sie ein Administrator sind, überprüfen Sie bitte Ihr Fehlerprotokoll.", - "DESCRIPTION" => "Beschreibung", + "DB_INVALID" => "Keine Verbindung zur Datenbank möglich. Wenn Sie ein Administrator sind, überprüfen Sie bitte Ihr Fehlerprotokoll.", + "DESCRIPTION" => "Beschreibung", "DOWNLOAD" => [ - "@TRANSLATION" => "Herunterladen", - "CSV" => "CSV herunterladen" + "@TRANSLATION" => "Herunterladen", + "CSV" => "CSV herunterladen" ], "EMAIL" => [ - "@TRANSLATION" => "E-Mail", - "YOUR" => "Ihre E-Mail-Adresse" + "@TRANSLATION" => "E-Mail", + "YOUR" => "Ihre E-Mail-Adresse" ], - "HOME" => "Startseite", + "HOME" => "Startseite", "LEGAL" => [ - "@TRANSLATION" => "Rechtsgrundsatz", - "DESCRIPTION" => "Unser Rechtsgrundsatz gilt für die Benutzung dieser Internetseite und unserer Dienste." + "@TRANSLATION" => "Rechtsgrundsatz", + "DESCRIPTION" => "Unser Rechtsgrundsatz gilt für die Benutzung dieser Internetseite und unserer Dienste." ], "LOCALE" => [ - "@TRANSLATION" => "Sprache" + "@TRANSLATION" => "Sprache" ], - "NAME" => "Name", - "NAVIGATION" => "Navigation", - "NO_RESULTS" => "Sorry, hier gibt es bisher nichts zu sehen.", + "NAME" => "Name", + "NAVIGATION" => "Navigation", + "NO_RESULTS" => "Sorry, hier gibt es bisher nichts zu sehen.", "PAGINATION" => [ - "GOTO" => "Gehe zu Seite", - "SHOW" => "Anzeigen", - - // Paginator - // possible variables: {size}, {page}, {totalPages}, {filteredPages}, {startRow}, {endRow}, {filteredRows} and {totalRows} - // also {page:input} & {startRow:input} will add a modifiable input in place of the value - "OUTPUT" => "{startRow} bis {endRow} von {filteredRows} ({totalRows})", - - "NEXT" => "Nächste Seite", - "PREVIOUS" => "Vorherige Seite", - "FIRST" => "Erste Seite", - "LAST" => "Letzte Seite" + "GOTO" => "Gehe zu Seite", + "SHOW" => "Anzeigen", + + // Paginator + // possible variables: {size}, {page}, {totalPages}, {filteredPages}, {startRow}, {endRow}, {filteredRows} and {totalRows} + // also {page:input} & {startRow:input} will add a modifiable input in place of the value + "OUTPUT" => "{startRow} bis {endRow} von {filteredRows} ({totalRows})", + + "NEXT" => "Nächste Seite", + "PREVIOUS" => "Vorherige Seite", + "FIRST" => "Erste Seite", + "LAST" => "Letzte Seite" ], "PRIVACY" => [ - "@TRANSLATION" => "Datenschutzbestimmungen", - "DESCRIPTION" => "In unsere Datenschutzbestimmungen erklären wir Ihnen, welche Daten wir sammeln und wozu wir diese benutzen." + "@TRANSLATION" => "Datenschutzbestimmungen", + "DESCRIPTION" => "In unsere Datenschutzbestimmungen erklären wir Ihnen, welche Daten wir sammeln und wozu wir diese benutzen." ], - "SLUG" => "Schnecke", - "SLUG_CONDITION" => "Schnecke/Bedingungen", - "SLUG_IN_USE" => "Die Schnecke {{slug}} existiert bereits", - "STATUS" => "Status", - "SUGGEST" => "Vorschlagen", + "SLUG" => "Schnecke", + "SLUG_CONDITION" => "Schnecke/Bedingungen", + "SLUG_IN_USE" => "Die Schnecke {{slug}} existiert bereits", + "STATUS" => "Status", + "SUGGEST" => "Vorschlagen", - "UNKNOWN" => "Unbekannt", + "UNKNOWN" => "Unbekannt", // Actions words - "ACTIONS" => "Aktionen", - "ACTIVATE" => "Aktivieren", - "ACTIVE" => "Aktiv", - "ADD" => "Hinzufügen", - "CANCEL" => "Abbrechen", - "CONFIRM" => "Bestätigen", - "CREATE" => "Erstellen", - "DELETE" => "Löschen", - "DELETE_CONFIRM" => "Möchten Sie diese wirklich löschen?", - "DELETE_CONFIRM_YES" => "Ja, löschen", - "DELETE_CONFIRM_NAMED" => "Möchten Sie {{name}} wirklich löschen?", - "DELETE_CONFIRM_YES_NAMED" => "Ja, {{name}} löschen", - "DELETE_CANNOT_UNDONE" => "Diese Aktion kann nicht rückgängig gemacht werden.", - "DELETE_NAMED" => "{{name}} löschen", - "DENY" => "Verweigern", - "DISABLE" => "Deaktivieren", - "DISABLED" => "Deaktiviert", - "EDIT" => "Bearbeiten", - "ENABLE" => "Aktivieren", - "ENABLED" => "Aktiviert", - "OVERRIDE" => "Überschreiben", - "RESET" => "Zurücksetzen", - "SAVE" => "Speichern", - "SEARCH" => "Suchen", - "SORT" => "Sortieren", - "SUBMIT" => "Einreichen", - "PRINT" => "Drucken", - "REMOVE" => "Entfernen", - "UNACTIVATED" => "Unaktiviert", - "UPDATE" => "Aktualisieren", - "YES" => "Ja", - "NO" => "Nein", - "OPTIONAL" => "Optional", + "ACTIONS" => "Aktionen", + "ACTIVATE" => "Aktivieren", + "ACTIVE" => "Aktiv", + "ADD" => "Hinzufügen", + "CANCEL" => "Abbrechen", + "CONFIRM" => "Bestätigen", + "CREATE" => "Erstellen", + "DELETE" => "Löschen", + "DELETE_CONFIRM" => "Möchten Sie diese wirklich löschen?", + "DELETE_CONFIRM_YES" => "Ja, löschen", + "DELETE_CONFIRM_NAMED" => "Möchten Sie {{name}} wirklich löschen?", + "DELETE_CONFIRM_YES_NAMED" => "Ja, {{name}} löschen", + "DELETE_CANNOT_UNDONE" => "Diese Aktion kann nicht rückgängig gemacht werden.", + "DELETE_NAMED" => "{{name}} löschen", + "DENY" => "Verweigern", + "DISABLE" => "Deaktivieren", + "DISABLED" => "Deaktiviert", + "EDIT" => "Bearbeiten", + "ENABLE" => "Aktivieren", + "ENABLED" => "Aktiviert", + "OVERRIDE" => "Überschreiben", + "RESET" => "Zurücksetzen", + "SAVE" => "Speichern", + "SEARCH" => "Suchen", + "SORT" => "Sortieren", + "SUBMIT" => "Einreichen", + "PRINT" => "Drucken", + "REMOVE" => "Entfernen", + "UNACTIVATED" => "Unaktiviert", + "UPDATE" => "Aktualisieren", + "YES" => "Ja", + "NO" => "Nein", + "OPTIONAL" => "Optional", // Misc. - "BUILT_WITH_UF" => "Errichtet mit UserFrosting", - "ADMINLTE_THEME_BY" => "Theme von Almsaeed Studio. Alle Rechte vorbehalten", - "WELCOME_TO" => "Willkommen auf {{title}}!" + "BUILT_WITH_UF" => "Errichtet mit UserFrosting", + "ADMINLTE_THEME_BY" => "Theme von Almsaeed Studio. Alle Rechte vorbehalten", + "WELCOME_TO" => "Willkommen auf {{title}}!" ]; diff --git a/main/app/sprinkles/core/locale/en_US/main.php b/main/app/sprinkles/core/locale/en_US/main.php new file mode 100644 index 0000000..99933b1 --- /dev/null +++ b/main/app/sprinkles/core/locale/en_US/main.php @@ -0,0 +1,15 @@ + [ + "FEED" => "New", + "EXPLORE" => "Explore", + "CHAT" => "Chat", + "FRIENDS" => "Friends", + "PERSONAL" => "Personal" + ], + "CHAT_MESSAGES" => [ + "USER_GROUP_JOIN" => "{{user}} joined the group", + "YOU_GROUP_JOIN" => "You joined the group", + "USER_DISCONNECT" => "{{user}} has disconnected from the server" + ] +]; \ No newline at end of file diff --git a/main/app/sprinkles/core/locale/fr_FR/main.php b/main/app/sprinkles/core/locale/fr_FR/main.php new file mode 100644 index 0000000..df913dc --- /dev/null +++ b/main/app/sprinkles/core/locale/fr_FR/main.php @@ -0,0 +1,15 @@ + [ + "FEED" => "D'actualités", + "EXPLORE" => "Dépister", + "CHAT" => "Message", + "FRIENDS" => "Camarades", + "PERSONAL" => "Personnelles" + ], + "CHAT_MESSAGES" => [ + "USER_GROUP_JOIN" => "{{user}} s'est joint au groupe", + "YOU_GROUP_JOIN" => "Vous avez rejoint le groupe", + "USER_DISCONNECT" => "{{user}} s'est déconnecté du serveur" + ] +]; diff --git a/main/app/sprinkles/core/templates/pages/abstract/mainsite.html.twig b/main/app/sprinkles/core/templates/pages/abstract/mainsite.html.twig index d12ccde..fe21d34 100644 --- a/main/app/sprinkles/core/templates/pages/abstract/mainsite.html.twig +++ b/main/app/sprinkles/core/templates/pages/abstract/mainsite.html.twig @@ -8,7 +8,6 @@ - diff --git a/main/app/sprinkles/core/templates/pages/index.html.twig b/main/app/sprinkles/core/templates/pages/index.html.twig index 4c7c838..5de2d30 100755 --- a/main/app/sprinkles/core/templates/pages/index.html.twig +++ b/main/app/sprinkles/core/templates/pages/index.html.twig @@ -15,7 +15,7 @@
- + {{ translate("TAB_CAPTIONS.FEED") }}

@@ -26,7 +26,7 @@
- + {{ translate("TAB_CAPTIONS.EXPLORE") }}

@@ -37,7 +37,7 @@
- + {{ translate("TAB_CAPTIONS.CHAT") }}

@@ -57,7 +57,7 @@
- + {{ translate("TAB_CAPTIONS.FRIENDS") }}

@@ -68,7 +68,7 @@
- + {{ translate("TAB_CAPTIONS.PERSONAL") }}

@@ -97,16 +97,8 @@ {% endblock %} - - {% block scripts_page %} - {% endblock %} diff --git a/main/app/sprinkles/core/templates/pages/partials/chat.js.twig b/main/app/sprinkles/core/templates/pages/partials/chat.js.twig new file mode 100644 index 0000000..779008f --- /dev/null +++ b/main/app/sprinkles/core/templates/pages/partials/chat.js.twig @@ -0,0 +1,123 @@ +{% autoescape 'js' %} + +/************ + GENERATE KEYS + ************/ +if (localStorage.getItem('KeysGenerated') === null || localStorage.getItem('KeysGenerated') !== "true") { + // GENERATE -- LATER ON LOGIN! + var EncryptionPhrase = "PASSWORD 123"; // THE USERS PASSWORD -- needs to generate on login! + var RSABitLength = 1024; + var PrivateKeyString = cryptico.generateRSAKey(EncryptionPhrase, RSABitLength); + var PublicKeyString = cryptico.publicKeyString(PrivateKeyString); + // SAVE TO DATABASE + $.ajax({ + type: "POST", + url: "assets/php/SavePublicKey.php", + data: { + UserID: "1", // TEMPORARY + PublicKeyString: PublicKeyString + }, + async: true, + error: function () { + console.error("Error while saving public key to database!"); + }, + success: function () { + localStorage.setItem('KeysGenerated', "true"); + } + }); +} + + +/****** + GENERAL + ******/ + +var ChatTextInput = $("#ChatTextInput"); +var SubscribeTextInput = $("#SubscribeTextInput"); +var ChatMessages = $("#ChatMessages"); + +var WebSocket = new WebSocket('wss://marvinborner.ddnss.de:1337'); + +WebSocket.onopen = function () { + console.log("Chat connection established!"); +}; + +WebSocket.onmessage = function (e) { + var LastMessage = $(".ChatMessage:last"); + var MessageObject = JSON.parse(e.data); + if (MessageObject.ServerMessage === false) { + if (MessageObject.WasHimself === true) { //MessageObject.Username + if (!LastMessage.hasClass("MessageSent")) { + ChatMessages.append("
" + MessageObject.Message + "


"); + } else if (LastMessage.hasClass("MessageSent")) { + if (LastMessage.hasClass("AloneMessage")) { + LastMessage.removeClass("AloneMessage"); + LastMessage.addClass("TopMessage"); + } else if (LastMessage.hasClass("BottomMessage")) { + LastMessage.removeClass("BottomMessage"); + LastMessage.addClass("MiddleMessage"); + } + ChatMessages.append("
" + MessageObject.Message + "


"); + } + $('.MessageSent').linkify({ + target: "_blank" + }); + } else if (MessageObject.WasHimself === false) { + if (!LastMessage.hasClass("MessageReceived")) { + ChatMessages.append("
" + MessageObject.Message + "


"); + } else if (LastMessage.hasClass("MessageReceived")) { + if (LastMessage.hasClass("AloneMessage")) { + LastMessage.removeClass("AloneMessage"); + LastMessage.addClass("TopMessage"); + } else if (LastMessage.hasClass("BottomMessage")) { + LastMessage.removeClass("BottomMessage"); + LastMessage.addClass("MiddleMessage"); + } + ChatMessages.append("
" + MessageObject.Message + "


"); + } + $('.MessageReceived').linkify({ + target: "_blank" + }); + } + } else if (MessageObject.ServerMessage === true) { + if (MessageObject.ServerMessageType === "GroupJoin") { + if (MessageObject.WasHimself === false) { + var TempJoinMessage = "{{ translate("CHAT_MESSAGES.USER_GROUP_JOIN", {user: "ConvertTranslatedMessageWithUsername"}) }}"; + var GeneratedJoinMessage = TempJoinMessage.replace("ConvertTranslatedMessageWithUsername", MessageObject.Username); + ChatMessages.append("
" + GeneratedJoinMessage + ".


"); + } else if (MessageObject.WasHimself === true) { + ChatMessages.empty(); + ChatMessages.append("
{{ translate("CHAT_MESSAGES.YOU_GROUP_JOIN") }} " + MessageObject.GroupName + ".


"); + } + } else if (MessageObject.ServerMessageType === "UserDisconnect") { + var TempDisconnectMessage = "{{ translate("CHAT_MESSAGES.USER_DISCONNECT", {user: "ConvertTranslatedMessageWithUsername"}) }}"; + var GeneratedDisconnectMessage = TempDisconnectMessage.replace("ConvertTranslatedMessageWithUsername", MessageObject.Username); + ChatMessages.append("
" + GeneratedDisconnectMessage + ".


"); + } + } +}; + +ChatTextInput.keyup(function (e) { + if (e.keyCode === 13) { + sendMessage(ChatTextInput.val()); + ChatTextInput.val(""); + } +}); + +SubscribeTextInput.keyup(function (e) { + if (e.keyCode === 13) { + subscribe(SubscribeTextInput.val()); + } +}); + +function subscribe(channel) { + WebSocket.send(JSON.stringify({ClientMessageType: "Subscribe", Channel: channel})); + SubscribeTextInput.hide(); + ChatTextInput.show(); +} + +function sendMessage(msg) { + WebSocket.send(JSON.stringify({ClientMessageType: "Message", Message: msg})); + ChatTextInput.val(""); +} +{% endautoescape %} \ No newline at end of file -- cgit v1.2.3