Chat: Fixes on disconection and reconection. Fix scrolling on minimized.

This commit is contained in:
2015-05-31 17:09:43 +02:00
parent 6c98e299a8
commit 05ff5b39d0
3 changed files with 34 additions and 9 deletions

View File

@@ -150,6 +150,7 @@ namespace Scrummer.Code.Controls
sbCfg.AppendFormat(" Close: \"{0}\",\n", "Close X"); sbCfg.AppendFormat(" Close: \"{0}\",\n", "Close X");
sbCfg.AppendFormat(" NewMessages: \"{0}\",\n", "New messages"); sbCfg.AppendFormat(" NewMessages: \"{0}\",\n", "New messages");
sbCfg.AppendFormat(" Disconnected: \"{0}\",\n", "Disconnected"); sbCfg.AppendFormat(" Disconnected: \"{0}\",\n", "Disconnected");
sbCfg.AppendFormat(" StringEmpty: \"\"\n");
sbCfg.AppendFormat(" }}\n"); sbCfg.AppendFormat(" }}\n");
sbCfg.AppendFormat("}};\n"); sbCfg.AppendFormat("}};\n");
sbCfg.AppendFormat("RunChat({0});\n", strCfgName); sbCfg.AppendFormat("RunChat({0});\n", strCfgName);

View File

@@ -1,6 +1,9 @@
function SendRequest(url, onData, onError) { function SendRequest(url, data, onData, onError) {
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
if (data) {
url += "?" + GetDataQueryString(data);
}
xhr.open("GET", url, true); xhr.open("GET", url, true);
xhr.onreadystatechange = function () { xhr.onreadystatechange = function () {
if (xhr.readyState == 4) { if (xhr.readyState == 4) {

View File

@@ -14,6 +14,8 @@
cfg.Minimized = true; cfg.Minimized = true;
cfg.Connected = null; cfg.Connected = null;
cfg.FirstMessages = true; cfg.FirstMessages = true;
cfg.ScrollOnRestore = true;
cfg.ScrollPosition = 0;
cfg.lblTitle.onclick = function () { cfg.lblTitle.onclick = function () {
if (cfg.Minimized) { if (cfg.Minimized) {
@@ -22,8 +24,15 @@
cfg.lblTitle.innerHTML = cfg.Texts.Close; cfg.lblTitle.innerHTML = cfg.Texts.Close;
cfg.lblTitle.className = "titleChatNormal"; cfg.lblTitle.className = "titleChatNormal";
} }
if (cfg.ScrollOnRestore) {
cfg.divChat.scrollTop = cfg.divChat.scrollHeight;
} else {
cfg.divChat.scrollTop = cfg.ScrollPosition;
}
cfg.Minimized = false; cfg.Minimized = false;
} else { } else {
cfg.ScrollPosition = cfg.divChat.scrollTop;
cfg.ScrollOnRestore = (cfg.divChat.scrollTop > (cfg.divChat.scrollHeight - cfg.divChat.offsetHeight));
cfg.divChatContainer.style.display = "none"; cfg.divChatContainer.style.display = "none";
if (cfg.Connected) { if (cfg.Connected) {
cfg.lblTitle.innerHTML = cfg.Texts.Chat; cfg.lblTitle.innerHTML = cfg.Texts.Chat;
@@ -65,10 +74,6 @@
}; };
var RequestChatData = function () { var RequestChatData = function () {
var requestUrl = cfg.ServiceUrl +
"?idBoard=" + cfg.IDBoard +
"&idMessage=" + cfg.hidIDMessage.value +
"&PoolData=" + ((cfg.FirstMessages) ? "0" : "1");
var ReciveChatData = function (responseText) { var ReciveChatData = function (responseText) {
// Mark as connected // Mark as connected
@@ -86,6 +91,12 @@
recvMsgs = JSON.parse(responseText); recvMsgs = JSON.parse(responseText);
if (recvMsgs) { 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 idMessage = parseInt(cfg.hidIDMessage.value);
var frag = document.createDocumentFragment(); var frag = document.createDocumentFragment();
for (var i = 0, n = recvMsgs.length; i < n; i++) { for (var i = 0, n = recvMsgs.length; i < n; i++) {
@@ -98,11 +109,14 @@
(cfg.hidLastUser.value !== msg.UserName)); (cfg.hidLastUser.value !== msg.UserName));
cfg.hidLastUser.value = msg.UserName; cfg.hidLastUser.value = msg.UserName;
frag.appendChild(elemMessage); frag.appendChild(elemMessage);
msgCount++;
} }
} }
cfg.divChat.appendChild(frag); cfg.divChat.appendChild(frag);
if (scrollChat) {
cfg.divChat.scrollTop = cfg.divChat.scrollHeight; cfg.divChat.scrollTop = cfg.divChat.scrollHeight;
if (cfg.Minimized && cfg.FirstMessages == false) { }
if (cfg.Minimized && cfg.FirstMessages == false && msgCount > 0) {
cfg.lblTitle.innerHTML = cfg.Texts.NewMessages; cfg.lblTitle.innerHTML = cfg.Texts.NewMessages;
cfg.lblTitle.className = "titleChatAlert"; cfg.lblTitle.className = "titleChatAlert";
} }
@@ -133,7 +147,12 @@
}; };
// Pool data // 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(); RequestChatData();
} }
@@ -146,12 +165,14 @@ function SendChat(cfg) {
return; return;
} }
// Send data
var data = { var data = {
"text": cfg.txtText.value, "text": cfg.txtText.value,
"idBoard": cfg.IDBoard, "idBoard": cfg.IDBoard,
"userName": cfg.hidUserName.value "userName": cfg.hidUserName.value
}; };
cfg.txtText.value = "";
SendData(cfg.ServiceUrl, data, null, null); SendData(cfg.ServiceUrl, data, null, null);
cfg.txtText.value = "";
cfg.txtText.focus(); cfg.txtText.focus();
} }