aboutsummaryrefslogtreecommitdiffhomepage
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/app/sprinkles/admin/src/Controller/WormholeController.php34
-rw-r--r--main/app/sprinkles/core/assets/SiteAssets/js/chat.js91
-rw-r--r--main/app/sprinkles/core/assets/SiteAssets/js/encryption.js2
-rw-r--r--main/app/sprinkles/core/assets/SiteAssets/js/main.js44
-rw-r--r--main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php16
-rw-r--r--main/app/sprinkles/core/templates/pages/index.html.twig7
6 files changed, 123 insertions, 71 deletions
diff --git a/main/app/sprinkles/admin/src/Controller/WormholeController.php b/main/app/sprinkles/admin/src/Controller/WormholeController.php
index e40a7e3..47e6fcb 100644
--- a/main/app/sprinkles/admin/src/Controller/WormholeController.php
+++ b/main/app/sprinkles/admin/src/Controller/WormholeController.php
@@ -30,6 +30,13 @@ use Illuminate\Session\FileSessionHandler;
*/
class WormholeController extends SimpleController
{
+ /**
+ * @param Request $request
+ * @param Response $response
+ * @param $args
+ * @return Response
+ * @throws NotFoundException
+ */
public function verify(Request $request, Response $response, $args) {
if ($this->verifyAccessToken($args)) {
$user_id = $args['user_id'];
@@ -44,14 +51,23 @@ class WormholeController extends SimpleController
}
}
+ /**
+ * @param $request
+ * @param Response $response
+ * @param $args
+ * @return Response
+ * @throws BadRequestException
+ * @throws NotFoundException
+ */
public function newMessage($request, Response $response, $args) {
if ($this->verifyAccessToken($args)) {
$sender_id = $args['sender_id'];
$receiver_id = $args['receiver_id'];
$message = $request->getParsedBody()["message"];
if (($sender_id != $receiver_id) && $message) {
- DB::table('chat_messages')
- ->insert(['sender_id' => $sender_id, 'receiver_id' => $receiver_id, 'message' => $message]);
+ $MessageId = DB::table('chat_messages')
+ ->insertGetId(['sender_id' => $sender_id, 'receiver_id' => $receiver_id, 'message' => $message], 'message_id');
+ $response->write($MessageId);
return $response->withStatus(200);
} else {
throw new BadRequestException();
@@ -59,6 +75,13 @@ class WormholeController extends SimpleController
}
}
+ /**
+ * @param Request $request
+ * @param Response $response
+ * @param $args
+ * @return Response
+ * @throws NotFoundException
+ */
public function getInfo(Request $request, Response $response, $args) {
/** @var UserFrosting\Sprinkle\Core\Util\ClassMapper $classMapper */
$classMapper = $this->ci->classMapper;
@@ -104,6 +127,11 @@ class WormholeController extends SimpleController
}
}
+ /**
+ * @param $args
+ * @return bool
+ * @throws NotFoundException
+ */
private function verifyAccessToken($args) {
$currentUser = $this->ci->currentUser; // FOR DATABASE QUERY
$access_token = $args['access_token'];
@@ -113,7 +141,7 @@ class WormholeController extends SimpleController
->exists()) {
return TRUE;
} else {
- throw new NotFoundException();
+ throw new NotFoundException(); // IT'S A FORBIDDEN
}
}
} \ No newline at end of file
diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
index 484102d..4e766df 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
+++ b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
@@ -1,30 +1,30 @@
/**
- * ENCRYPTION
+ * GLOBAL DECLARATIONS
*/
-var ReceiversUsername, ReceiversId;
-var openpgp = window.openpgp;
-var options, EncryptedMessage, DecryptedMessage;
-var PublicKey = [];
-openpgp.initWorker({path: '/assets-raw/core/assets/SiteAssets/js/openpgp.worker.js'});
-var privKeyObj = openpgp.key.readArmored(localStorage.getItem("PrivateKey").replace(/\r/, "")).keys[0];
-privKeyObj.decrypt(localStorage.getItem("🔒"));
+let LastMessage, Username, ReceiversUsername, ReceiversId, options, EncryptedMessage, DecryptedMessage;
/**
- * GLOBAL DECLARATIONS
+ * INITIAL ENCRYPTION CONFIGURATION
*/
-var LastMessage, Username;
+const openpgp = window.openpgp;
+const PublicKey = [];
+openpgp.initWorker({path: '/assets-raw/core/assets/SiteAssets/js/openpgp.worker.js'});
+const privKeyObj = openpgp.key.readArmored(localStorage.getItem("PrivateKey").replace(/\r/, "")).keys[0];
+privKeyObj.decrypt(localStorage.getItem("🔒"));
/**
* GENERAL CHAT
*/
function InitializeChatServer() {
- var ChatTextInput = $("#ChatTextInput");
- var SubscribeTextInput = $("#SubscribeTextInput");
- var ChatMessages = $("#ChatMessages");
- var TypingIndicatorAnimationElement = "<div class='spinner'><div class='bounce1'></div><div class='bounce2'></div><div class='bounce3'></div></div>";
+ const ChatTextInput = $("#ChatTextInput");
+ const SubscribeTextInput = $("#SubscribeTextInput");
+ const ChatMessages = $("#ChatMessages:visible");
+ const SelectReceiver = $(".SelectReceiver");
+ const SelectedReceiver = $(".SelectedReceiver");
+ const TypingIndicatorAnimationElement = "<div class='spinner'><div class='bounce1'></div><div class='bounce2'></div><div class='bounce3'></div></div>";
- var WebSocketConnectTimerStart = performance.now(); // START CONNECTION EXECUTION TIMER
+ const WebSocketConnectTimerStart = performance.now(); // START CONNECTION EXECUTION TIMER
const ChatSocket = new WebSocket('wss://marvinborner.ddnss.de:1337');
ChatSocket.onerror = function () {
setTimeout(function () {
@@ -34,7 +34,7 @@ function InitializeChatServer() {
};
ChatSocket.onopen = function () {
// CONNECTION SUCCESSFUL!
- var WebSocketConnectTimerEnd = performance.now(); // END CONNECTION EXECUTION TIMER
+ const WebSocketConnectTimerEnd = performance.now(); // END CONNECTION EXECUTION TIMER
console.log("%c[CHATSOCKET LOGGER] Chat connection established! (Took " + +(WebSocketConnectTimerEnd - WebSocketConnectTimerStart) + " milliseconds)", "color: darkorange");
// START VERIFICATION
ChatSocket.send(JSON.stringify({
@@ -46,18 +46,20 @@ function InitializeChatServer() {
// GOT MESSAGE
ChatSocket.onmessage = function (e) {
// DECLARATIONS
- var TypingIndicatorMessage = $(".TypingIndicatorMessage").parent();
- var MessageObject = JSON.parse(e.data);
- var Message = MessageObject.Message; // ENCRYPTED MESSAGE (NOT ENCRYPTED ON SERVER MESSAGES)
- var Fullname = MessageObject.Fullname;
- var Avatar = MessageObject.Avatar;
- var GroupName = MessageObject.GroupName;
- var State = MessageObject.State;
- var ServerMessage = MessageObject.ServerMessage;
- var WasHimself = MessageObject.WasHimself;
- var ServerMessageType = MessageObject.ServerMessageType;
- var Granted = MessageObject.Granted;
- var Success = MessageObject.Success;
+ const TypingIndicatorMessage = $(".TypingIndicatorMessage").parent();
+ const CurrentChatMessagesWindow = $(".SelectedReceiver #ChatMessages[data-username=" + ReceiversUsername + "]");
+ const MessageObject = JSON.parse(e.data);
+ const Message = MessageObject.Message; // ENCRYPTED MESSAGE (NOT ENCRYPTED ON SERVER MESSAGES)
+ const MessageId = MessageObject.MessageId;
+ const Fullname = MessageObject.Fullname;
+ const Avatar = MessageObject.Avatar;
+ const GroupName = MessageObject.GroupName;
+ const ServerMessageType = MessageObject.ServerMessageType;
+ let State = MessageObject.State;
+ let ServerMessage = MessageObject.ServerMessage;
+ let WasHimself = MessageObject.WasHimself;
+ let Granted = MessageObject.Granted;
+ let Success = MessageObject.Success;
// GLOBAL OVERWRITES
LastMessage = $(".MessageWrapper.Normal:last .ChatMessage");
@@ -114,9 +116,9 @@ function InitializeChatServer() {
}
});
if (!LastMessage.hasClass("MessageReceived")) { // CHECK IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE
- ChatMessages.append("<div class='MessageWrapper Normal'><div class='ChatMessage MessageReceived AloneMessage animated fadeInLeft'>" + DecryptedMessage + "</div></div>");
+ CurrentChatMessagesWindow.append("<div class='MessageWrapper Normal'><div id='" + MessageId + "' class='ChatMessage MessageReceived AloneMessage animated fadeInLeft'>" + DecryptedMessage + "</div></div>");
} else if (LastMessage.hasClass("MessageReceived")) { // IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> CREATE WITH CORRESPONDING CLASSES FOR DESIGN
- ChatMessages.append("<div class='MessageWrapper Normal'><div class='ChatMessage MessageReceived BottomMessage animated fadeInLeft'>" + DecryptedMessage + "</div></div>");
+ CurrentChatMessagesWindow.append("<div class='MessageWrapper Normal'><div id='" + MessageId + "' class='ChatMessage MessageReceived BottomMessage animated fadeInLeft'>" + DecryptedMessage + "</div></div>");
if (LastMessage.hasClass("AloneMessage")) {
LastMessage.removeClass("AloneMessage");
LastMessage.addClass("TopMessage");
@@ -132,20 +134,20 @@ function InitializeChatServer() {
$('.ChatMessage').linkify({
target: "_blank"
});
- } else if (ServerMessage) { // SERVER MESSAGE
+ } else { // SERVER MESSAGE
if (ServerMessageType === "GroupJoin") { // TYPE: USER JOINED A GROUP
if (WasHimself) { // HIMSELF JOINED A GROUP -> NOTIFY
- ChatMessages.empty(); // -> EMPTY MESSAGES ON NEW GROUP JOIN
- ChatMessages.append("<br><div class='MessageWrapper'><div class='ServerChatMessage'>" + GroupName + "</span></div></div><br>");
+ CurrentChatMessagesWindow.empty(); // -> EMPTY MESSAGES ON NEW GROUP JOIN
+ CurrentChatMessagesWindow.append("<br><div class='MessageWrapper'><div class='ServerChatMessage'>" + GroupName + "</span></div></div><br>");
ReplaceServerMessage("YouGroupJoin"); // FOR TRANSLATION
console.log("%c[CHATSOCKET LOGGER] You joined the group " + GroupName + "!", "color: darkorange");
} else if (!WasHimself) { // OTHER USER JOINED A GROUP -> NOTIFY
- ChatMessages.append("<br><div class='MessageWrapper'><div class='ServerChatMessage'>" + Username + "</span></div></div><br>");
+ CurrentChatMessagesWindow.append("<br><div class='MessageWrapper'><div class='ServerChatMessage'>" + Username + "</span></div></div><br>");
ReplaceServerMessage("UserGroupJoin"); // FOR TRANSLATION
console.log("%c[CHATSOCKET LOGGER] " + Username + " joined the group!", "color: darkorange");
}
} else if (ServerMessageType === "UserDisconnect") { // TYPE: USER DISCONNECTED -> NOTIFY
- ChatMessages.append("<br><div class='MessageWrapper'><div class='ServerChatMessage'>" + Username + "</span></div></div><br>");
+ CurrentChatMessagesWindow.append("<br><div class='MessageWrapper'><div class='ServerChatMessage'>" + Username + "</span></div></div><br>");
ReplaceServerMessage("UserDisconnect"); // FOR TRANSLATION
console.log("%c[CHATSOCKET LOGGER] " + Username + " disconnected from server!", "color: darkorange");
} else if (ServerMessageType === "TypingState") { // TYPE: SOMEBODY'S TYPING STATE CHANGED!
@@ -153,7 +155,7 @@ function InitializeChatServer() {
if (WasHimself) { // IDENTIFY 'SOMEBODY' -> WAS HIMSELF -> NOT THAT IMPORTANT (USER KNOWS WHEN HE STARTS TYPING?)
console.log("%c[CHAT TYPING LOGGER] You started typing!", "color: gray");
} else if (!WasHimself) { // IDENTIFY 'SOMEBODY' -> WAS OTHER USER -> SHOW TYPING ANIMATION ON RECEIVER'S SIDE
- ChatMessages.append("<div class='MessageWrapper'><div class='ChatMessage TypingIndicatorMessage AloneMessage'>" + TypingIndicatorAnimationElement + "</div></div>");
+ CurrentChatMessagesWindow.append("<div class='MessageWrapper'><div class='ChatMessage TypingIndicatorMessage AloneMessage'>" + TypingIndicatorAnimationElement + "</div></div>");
console.log("%c[CHAT TYPING LOGGER] " + Username + " started typing!", "color: gray");
}
} else if (!State) { // IF 'SOMEBODY' STOPPED TYPING
@@ -175,25 +177,28 @@ function InitializeChatServer() {
} else if (ServerMessageType === "SetReceiver") { // TYPE: SERVER CHECKED ACCESS -- MOSTLY HANDLED IN BACKEND
if (Success) {
console.log("%c[CHATSOCKET LOGGER] Setting receiver succeeded!", "color: green");
- $(".SelectReceiver").hide();
+ SelectReceiver.hide();
+ ChatMessages.hide();
$(".SelectedReceiver > *").addClass("animated slideInRight");
$(".ChatTab .headerWrap .header .HeaderCaption").text(ReceiversUsername);
- $(".SelectedReceiver").show();
+ SelectedReceiver.prepend("<div id='ChatMessages' class='ChatMessages' data-username='" + ReceiversUsername + "'></div>");
+ SelectedReceiver.show();
+ $(".SelectedReceiver #ChatMessages[data-username=" + ReceiversUsername + "]").show();
} else if (!Success) {
console.log("%c[CHATSOCKET LOGGER] Setting receiver failed!", "color: red");
}
}
}
// SCROLL TO BOTTOM ON NEW MESSAGE OF ANY KIND
- if ((ChatMessages.scrollTop() + ChatMessages.innerHeight() < ChatMessages[0].scrollHeight)) {
- ChatMessages.animate({scrollTop: document.querySelector("#ChatMessages").scrollHeight});
+ if ((CurrentChatMessagesWindow.scrollTop() + CurrentChatMessagesWindow.innerHeight() < CurrentChatMessagesWindow[0].scrollHeight)) {
+ CurrentChatMessagesWindow.animate({scrollTop: document.querySelector("#ChatMessages").scrollHeight});
}
};
// TYPING RECOGNITION
- var typingTimer;
- var isTyping = false;
+ let typingTimer;
+ let isTyping = false;
ChatTextInput.keydown(function () {
sendStartTyping();
@@ -252,7 +257,7 @@ function InitializeChatServer() {
if (e.keyCode === 13 && ChatTextInput.val().length > 0) {
const ChatTextInputText = ChatTextInput.val();
ChatTextInput.val("");
- var LastMessage = $(".MessageWrapper.Normal:last .ChatMessage");
+ const LastMessage = $(".MessageWrapper.Normal:last .ChatMessage");
if (!LastMessage.hasClass("MessageSent")) { // CHECK IF PREVIOUS MESSAGE WAS FROM HIMSELF TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE
ChatMessages.append("<div class='MessageWrapper Normal'><div class='ChatMessage MessageSent AloneMessage animated fadeInRight'>" + ChatTextInputText + "</div></div>");
} else if (LastMessage.hasClass("MessageSent")) { // IF PREVIOUS MESSAGE WAS FROM HIMSELF TOO -> CREATE WITH CORRESPONDING CLASSES FOR DESIGN
diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/encryption.js b/main/app/sprinkles/core/assets/SiteAssets/js/encryption.js
index 00162a2..0b406e7 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/js/encryption.js
+++ b/main/app/sprinkles/core/assets/SiteAssets/js/encryption.js
@@ -4427,7 +4427,7 @@
S ? A.emit("unhandledRejection", i, e) : (r = u.onunhandledrejection) ? r({
promise: e,
reason: i
- }) : (n = u.console) && n.error && n.error("Unhandled promise rejection", i)
+ }) : ""//(n = u.console) && n.error && n.error("Unhandled promise rejection", i)
}), e._h = S || U(e) ? 2 : 1), e._a = void 0, a && t.e) throw t.v
})
}, U = function (e) {
diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/main.js b/main/app/sprinkles/core/assets/SiteAssets/js/main.js
index 0a991fc..a65d637 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/js/main.js
+++ b/main/app/sprinkles/core/assets/SiteAssets/js/main.js
@@ -1,13 +1,14 @@
-var MainTabWindows = $(".MainTabWindows");
-var NavbarIconWrap = $(".NavbarIconWrap");
-var Navbar = $(".Navbar");
-var NavbarLine = $(".NavbarLine");
-var UserSearchBar = $("#UserSearchBar");
-var SearchResults = $(".SearchResults");
-var SelectReceiver = $(".SelectReceiver");
-var FriendList = $(".FriendList");
-var alerts = $("#alerts-page");
-var ExploreData = $("#ExploreData");
+const MainTabWindows = $(".MainTabWindows");
+const FeedTabWindow = $(".FeedTabWindow");
+const NavbarIconWrap = $(".NavbarIconWrap");
+const Navbar = $(".Navbar");
+const NavbarLine = $(".NavbarLine");
+const UserSearchBar = $("#UserSearchBar");
+const SearchResults = $(".SearchResults");
+const SelectReceiver = $(".SelectReceiver");
+const FriendList = $(".FriendList");
+const alerts = $("#alerts-page");
+const ExploreData = $("#ExploreData");
/**
@@ -21,7 +22,7 @@ var ExploreData = $("#ExploreData");
* POPUPS
*/
function triggerErrorPopup(ErrorCode) {
- var ErrorMessage = "Unknown Error occurred!", ErrorInformationSite = "", AlsoLogInConsole = true; // WILL BE REWRITTEN (EXCEPT SOMETHING CRAZY HAPPENS)
+ let ErrorMessage = "Unknown Error occurred!", ErrorInformationSite = "", AlsoLogInConsole = true; // WILL BE REWRITTEN (EXCEPT SOMETHING CRAZY HAPPENS)
switch (ErrorCode) {
case "ChatNotAllowed":
AlsoLogInConsole = false;
@@ -41,8 +42,8 @@ function triggerErrorPopup(ErrorCode) {
* OLD BROWSER
* @type {boolean}
*/
-var isIE = /*@cc_on!@*/false || !!document.documentMode;
-var isEdge = !isIE && !!window.StyleMedia;
+let isIE = /*@cc_on!@*/false || !!document.documentMode;
+const isEdge = !isIE && !!window.StyleMedia;
if (isIE || isEdge) {
alert("Sorry, your browser is currently not supported. " +
"Please update to a newer browser if you are facing any kind of issues. " +
@@ -52,7 +53,7 @@ if (isIE || isEdge) {
/**
* NAVBAR
*/
-var $el, leftPos, newWidth;
+let $el, leftPos, newWidth;
NavbarLine
.css("left", $(".ActiveTab").position().left)
.data("origLeft", NavbarLine.position().left)
@@ -108,7 +109,7 @@ MainTabWindows.on('beforeChange', function (event, slick, currentSlide, nextSlid
*/
UserSearchBar.keyup(function () {
SearchResults.empty();
- var RequestedUser = UserSearchBar.val();
+ const RequestedUser = UserSearchBar.val();
if (RequestedUser !== " " && RequestedUser !== "")
$.ajax({
url: site.uri.public + "/api/users/u/" + RequestedUser,
@@ -148,4 +149,17 @@ $(document).ready(function () {
alerts.ufAlerts().ufAlerts('fetch');
}
});
+ $.ajax({
+ url: site.uri.public + "/api/feed/" + current_username,
+ success: function (images) {
+ images.forEach(function (imageInfo) {
+ FeedTabWindow.append("<img class='FeedImage' src='" + imageInfo.image_url + "'><br>");
+ })
+ },
+ error: function () {
+ console.log("%c[FEED LOGGER] No images in feed!", "color: red");
+
+ alerts.ufAlerts().ufAlerts('fetch');
+ }
+ });
});
diff --git a/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php b/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php
index 30944c6..90ed22e 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php
+++ b/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php
@@ -122,11 +122,7 @@ class ChatProcessor implements MessageComponentInterface
if (isset($this->ResourceId[$ReceiversId])) { // USER IS ONLINE
$ReceiversResourceId = $this->ResourceId[$ReceiversId];
- if ($data->EncryptedWithKeyOfUsername === $this->userInfo[$ReceiversResourceId]->user_name) {
- $MessageObject->WasHimself = FALSE;
- $MessageJson = json_encode($MessageObject, TRUE);
- $this->users[$ReceiversResourceId]->send($MessageJson); // SEND TO RECEIVER
-
+ if ($data->EncryptedWithKeyOfUsername === $this->userInfo[$ReceiversResourceId]->user_name) { // MESSAGE FOR RECEIVER
// SAVE IN DATABASE
$url = "https://beam-messenger.de/wormhole/" . file("/AccessToken.txt", FILE_IGNORE_NEW_LINES)["0"] . "/new/message/" . $this->userInfo[$conn->resourceId]->id . "/" . $this->userInfo[$ReceiversResourceId]->id . "/";
$data = array('message' => $data->Message);
@@ -140,9 +136,15 @@ class ChatProcessor implements MessageComponentInterface
$context = stream_context_create($options);
$result = file_get_contents($url, FALSE, $context);
if ($result === FALSE) { /* Handle error */
+ } else {
+ $MessageObject->MessageId = $result; // MESSAGE ID GETS SEND IN ANSWER
}
- } else if ($data->EncryptedWithKeyOfUsername === $MessageObject->Username) {
+ $MessageObject->WasHimself = FALSE;
+ $MessageJson = json_encode($MessageObject, TRUE);
+ $this->users[$ReceiversResourceId]->send($MessageJson); // SEND TO RECEIVER
+
+ } else if ($data->EncryptedWithKeyOfUsername === $MessageObject->Username) { // VERIFICATION MESSAGE
$MessageObject->WasHimself = TRUE;
$MessageJson = json_encode($MessageObject, TRUE);
$this->users[$conn->resourceId]->send($MessageJson); // SEND TO SENDER (FOR VERIFICATION)
@@ -161,6 +163,8 @@ class ChatProcessor implements MessageComponentInterface
$context = stream_context_create($options);
$result = file_get_contents($url, FALSE, $context);
if ($result === FALSE) { /* Handle error */
+ } else {
+ $MessageObject->MessageId = $result; // MESSAGE ID GETS SEND IN ANSWER
}
// SEND BACK FOR VERIFICATION
diff --git a/main/app/sprinkles/core/templates/pages/index.html.twig b/main/app/sprinkles/core/templates/pages/index.html.twig
index 0479fb8..92b21a4 100644
--- a/main/app/sprinkles/core/templates/pages/index.html.twig
+++ b/main/app/sprinkles/core/templates/pages/index.html.twig
@@ -23,8 +23,7 @@
</div>
<div class="MainInTab FeedTabWindow">
{% for FeedImage in FeedImages %}
- <img class="FeedImage" src="{{ site.uri.public }}/image/{{ FeedImage.PostID }}"
- alt="You probably don't have a permission to see this image.">
+ <img class="FeedImage" src="{{ site.uri.public }}/image/{{ FeedImage.PostID }}">
<br>
{% endfor %}
</div>
@@ -66,10 +65,12 @@
</div>
<div class="MainInTab ChatWindow">
<div class="SelectReceiver"></div>
- <div class="SelectedReceiver">
+ <div class="SelectedReceiver"> {# TODO: Different chat windows for each user(name) #}
+ {#
<div id="ChatMessages" class="ChatMessages" data-username="">
<!-- Messages -->
</div>
+ #}
<input title="{{ translate("CHAT_MESSAGES.WRITE_MESSAGE_PH") }}"
placeholder="{{ translate("CHAT_MESSAGES.WRITE_MESSAGE_PH") }}"
id="ChatTextInput" class="ChatInput" type="text" />