diff --git a/Scrummer/Code/Controls/ChatControl.cs b/Scrummer/Code/Controls/ChatControl.cs index 7a05783..9dc2970 100644 --- a/Scrummer/Code/Controls/ChatControl.cs +++ b/Scrummer/Code/Controls/ChatControl.cs @@ -150,6 +150,7 @@ namespace Scrummer.Code.Controls sbCfg.AppendFormat(" Close: \"{0}\",\n", "Close X"); sbCfg.AppendFormat(" NewMessages: \"{0}\",\n", "New messages"); sbCfg.AppendFormat(" Disconnected: \"{0}\",\n", "Disconnected"); + sbCfg.AppendFormat(" StringEmpty: \"\"\n"); sbCfg.AppendFormat(" }}\n"); sbCfg.AppendFormat("}};\n"); sbCfg.AppendFormat("RunChat({0});\n", strCfgName); diff --git a/Scrummer/Scripts/02. Ajax.js b/Scrummer/Scripts/02. Ajax.js index 062d542..69a089b 100644 --- a/Scrummer/Scripts/02. Ajax.js +++ b/Scrummer/Scripts/02. Ajax.js @@ -1,6 +1,9 @@  -function SendRequest(url, onData, onError) { +function SendRequest(url, data, onData, onError) { var xhr = new XMLHttpRequest(); + if (data) { + url += "?" + GetDataQueryString(data); + } xhr.open("GET", url, true); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { diff --git a/Scrummer/Scripts/10. Chat.js b/Scrummer/Scripts/10. Chat.js index 62b4627..f5e576f 100644 --- a/Scrummer/Scripts/10. Chat.js +++ b/Scrummer/Scripts/10. Chat.js @@ -14,6 +14,8 @@ cfg.Minimized = true; cfg.Connected = null; cfg.FirstMessages = true; + cfg.ScrollOnRestore = true; + cfg.ScrollPosition = 0; cfg.lblTitle.onclick = function () { if (cfg.Minimized) { @@ -22,8 +24,15 @@ cfg.lblTitle.innerHTML = cfg.Texts.Close; cfg.lblTitle.className = "titleChatNormal"; } + if (cfg.ScrollOnRestore) { + cfg.divChat.scrollTop = cfg.divChat.scrollHeight; + } else { + cfg.divChat.scrollTop = cfg.ScrollPosition; + } cfg.Minimized = false; } else { + cfg.ScrollPosition = cfg.divChat.scrollTop; + cfg.ScrollOnRestore = (cfg.divChat.scrollTop > (cfg.divChat.scrollHeight - cfg.divChat.offsetHeight)); cfg.divChatContainer.style.display = "none"; if (cfg.Connected) { cfg.lblTitle.innerHTML = cfg.Texts.Chat; @@ -65,10 +74,6 @@ }; var RequestChatData = function () { - var requestUrl = cfg.ServiceUrl + - "?idBoard=" + cfg.IDBoard + - "&idMessage=" + cfg.hidIDMessage.value + - "&PoolData=" + ((cfg.FirstMessages) ? "0" : "1"); var ReciveChatData = function (responseText) { // Mark as connected @@ -86,6 +91,12 @@ recvMsgs = JSON.parse(responseText); if (recvMsgs) { + var msgCount = 0; + var scrollChat = false; + if (cfg.Minimized == false && cfg.divChat.scrollTop > (cfg.divChat.scrollHeight - cfg.divChat.offsetHeight)) { + scrollChat = true; + } + var idMessage = parseInt(cfg.hidIDMessage.value); var frag = document.createDocumentFragment(); for (var i = 0, n = recvMsgs.length; i < n; i++) { @@ -98,11 +109,14 @@ (cfg.hidLastUser.value !== msg.UserName)); cfg.hidLastUser.value = msg.UserName; frag.appendChild(elemMessage); + msgCount++; } } cfg.divChat.appendChild(frag); - cfg.divChat.scrollTop = cfg.divChat.scrollHeight; - if (cfg.Minimized && cfg.FirstMessages == false) { + if (scrollChat) { + cfg.divChat.scrollTop = cfg.divChat.scrollHeight; + } + if (cfg.Minimized && cfg.FirstMessages == false && msgCount > 0) { cfg.lblTitle.innerHTML = cfg.Texts.NewMessages; cfg.lblTitle.className = "titleChatAlert"; } @@ -133,7 +147,12 @@ }; // Pool data - SendRequest(requestUrl, ReciveChatData, ErrorChatData); + var data = { + "idBoard": cfg.IDBoard, + "idMessage": cfg.hidIDMessage.value, + "PoolData": ((cfg.FirstMessages || cfg.Connected == false) ? "0" : "1") + }; + SendRequest(cfg.ServiceUrl, data, ReciveChatData, ErrorChatData); }; RequestChatData(); } @@ -146,12 +165,14 @@ function SendChat(cfg) { return; } + // Send data var data = { "text": cfg.txtText.value, "idBoard": cfg.IDBoard, "userName": cfg.hidUserName.value }; - cfg.txtText.value = ""; SendData(cfg.ServiceUrl, data, null, null); + + cfg.txtText.value = ""; cfg.txtText.focus(); }