/web/studio/ASC.Web.Studio/UserControls/Common/SmallChat/js/smallChat.js
JavaScript | 2561 lines | 2352 code | 144 blank | 65 comment | 485 complexity | 5833df017fb0fde8a9ba44cedd27334e MD5 | raw file
Possible License(s): GPL-2.0, MPL-2.0-no-copyleft-exception
Large files files are truncated, but you can click here to view the full file
- /*
- (c) Copyright Ascensio System SIA 2010-2014
- This program is a free software product.
- You can redistribute it and/or modify it under the terms
- of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
- Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
- to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
- any third-party rights.
- This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty
- of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
- the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
- You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
- The interactive user interfaces in modified source and object code versions of the Program must
- display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
-
- Pursuant to Section 7(b) of the License you must retain the original Product logo when
- distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
- trademark law for use of our trademarks.
-
- All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
- content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
- International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
- */
- /*
- Copyright (c) Ascensio System SIA 2014. All rights reserved.
- http://www.teamlab.com
- */
- var SmallChat = (function () {
- var chat = jq.connection.c,
- currentAccount = null,
- already = false,
- bufferStates = {},
- offlineBuffer = [],
- ONLINE = "online",
- AWAY = "away",
- NOT_AVAILABLE = "not_available",
- OFFLINE = "offline",
- NUMBER_ONLINE = 1,
- NUMBER_AWAY = 2,
- NUMBER_NOT_AVAILABLE = 3,
- NUMBER_OFFLINE = 4,
- IMAGE_ONLINE = "image_online",
- IMAGE_AWAY = "image_away",
- IMAGE_NOT_AVAILABLE = "image_not_available",
- IMAGE_OFFLINE = "image_offline",
- PX = "px",
- HEIGHT_OFFSET = 100,
- OPEN_USER_DETAIL_LIST_INTERVAL = 650,
- PING_TIMEOUT_INTERVAL = 100000,
- INT_MAX_VALUE = 2147483647,
- SEARCH_CONTACT_INTERVAL = 750,
- TITLE_INTERVAL = 400,
- ENTER_KEY_CODE = 13,
- CONVERSATION_BLOCK_HEIGHT = 300,
- CONVERSATION_BLOCK_WIDTH = 282,
- LEFT_PANEL_AND_INDENT_WIDTH = 370,
- MESSAGE_WINDOW_ITEM_HEIGHT = 21,
- currentStatus = ONLINE,
- currentImage = IMAGE_ONLINE,
- NUMBER_OF_RECENT_MSGS = 10,
- oldWindowHeight = jq(window).height(),
- oldWindowWidth = jq(window).width(),
- originalTitle = null,
- isActive = false,
- titleTimerId = null,
- starsNumber = 1,
- soundPath = null,
- sendTypingSignalTimeout = null,
- typingSignalTimeout = null,
- shouldOpenUserDialogs = [],
- disableUser = false,
- timersForMessages = {},
- pingTimerId = null,
- flashBlocks = {},
- shouldOpenContacts = false,
- jabberTalkWindow = null,
- initEmoticons = false,
- maxDialogNumber = null,
- isMobile = jq.browser.mobile,
- connectionStartTimer = null,
- reloadPage = false,
- disconnectCompleted = true,
- messageContract = {
- i: "Id",
- u: "UserName",
- t: "Text",
- d: "DateTimeText"
- },
- userStrContract = {
- u: "UserName",
- d: "DisplayUserName",
- s: "State"
- },
- userInformations = {},
- sessionStorageManager = function () {
- var isAvailable;
- try {
- isAvailable = "sessionStorage" in window && window["sessionStorage"] !== null;
- } catch (e) {
- return { isAvailable: false };
- }
- var getItem = function (key) {
- if (!key) {
- return null;
- }
- return JSON.parse(sessionStorage.getItem(key));
- };
- var setItem = function (key, value) {
- if (!key) {
- return;
- }
- try {
- sessionStorage.setItem(key, JSON.stringify(value));
- } catch (e) {
- if (typeof QUOTA_EXCEEDED_ERR != undefined && e == QUOTA_EXCEEDED_ERR) {
- throw "Session storage is full";
- }
- }
- };
- var removeItem = function (key) {
- if (!key) {
- return null;
- }
- sessionStorage.removeItem(key);
- };
- var clear = function () {
- sessionStorage.clear();
- };
- return {
- isAvailable: isAvailable,
- getItem: getItem,
- setItem: setItem,
- removeItem: removeItem,
- clear: clear
- };
- }();
- localStorageManager = function () {
- var isAvailable;
- try {
- isAvailable = "localStorage" in window && window["localStorage"] !== null;
- } catch (e) {
- return { isAvailable: false };
- }
- var getItem = function (key) {
- if (!key) {
- return null;
- }
- return JSON.parse(localStorage.getItem(key));
- };
- var setItem = function (key, value) {
- if (!key) {
- return;
- }
- try {
- localStorage.setItem(key, JSON.stringify(value));
- } catch (e) {
- if (typeof QUOTA_EXCEEDED_ERR != undefined && e == QUOTA_EXCEEDED_ERR) {
- throw "Local storage is full";
- }
- }
- };
- var removeItem = function (key) {
- if (!key) {
- return null;
- }
- localStorage.removeItem(key);
- };
- var clear = function () {
- localStorage.clear();
- };
- return {
- isAvailable: isAvailable,
- getItem: getItem,
- setItem: setItem,
- removeItem: removeItem,
- clear: clear
- };
- }();
- if (Teamlab.profile.id && sessionStorageManager.getItem("currentUserId") != Teamlab.profile.id) {
- sessionStorageManager.clear();
- sessionStorageManager.setItem("currentUserId", Teamlab.profile.id);
- }
- if (typeof (chat) !== undefined) {
- // initDataRetrieved
- chat.client.idr = function (userName, showUserName, users, tenantId, tenantName, path) {
- currentAccount = {
- TenantName: tenantName,
- TenantId: tenantId,
- UserName: userName,
- ShowUserName: showUserName
- };
- soundPath = path;
- var $userList = jq(".user_list"),
- usersOnline = {},
- usersAway = {},
- usersNotAvailable = {},
- usersOffline = {},
- stateNumber;
- if ($userList.length) {
- jq(".user_list").remove();
- }
- for (var i = 0; i < users.length; i++) {
- users[i] = reMap(users[i], userStrContract);
- stateNumber = users[i].State;
- users[i].State = getImageByNumber(stateNumber);
- switch (stateNumber) {
- case NUMBER_ONLINE:
- usersOnline[i] = users[i];
- break;
- case NUMBER_AWAY:
- usersAway[i] = users[i];
- break;
- case NUMBER_NOT_AVAILABLE:
- usersNotAvailable[i] = users[i];
- break;
- default:
- usersOffline[i] = users[i];
- }
- }
- var tenantGuid = sessionStorageManager.getItem("TenantGuid");
- if (!tenantGuid) {
- tenantGuid = guid();
- sessionStorageManager.setItem("TenantGuid", tenantGuid);
- }
- var html = jq("#contactListTmpl").tmpl({
- UsersOnline: usersOnline,
- UsersAway: usersAway,
- UsersNotAvailable: usersNotAvailable,
- UsersOffline: usersOffline
- }),
- htmlTenant = jq("#tenantBlockTmpl").tmpl({
- TenantGuid: tenantGuid,
- TenantName: currentAccount.TenantName
- }),
- smallChatHeight = sessionStorageManager.getItem("SmallChatHeight");
- if (smallChatHeight) {
- jq(".small_chat_main_window").css("height", smallChatHeight);
- }
- jq(".chat_contact_loader").addClass("display-none");
- jq(".conversation_block").removeClass("display-none");
- jq(html).appendTo(".contact_container");
- jq(".contact_container").find(".tenant_user_list").append(htmlTenant);
- sessionStorageManager.setItem("WasConnected", true);
- searchContact();
- var status = sessionStorageManager.getItem("CurrentStatus");
- if (status && status != OFFLINE) {
- changeStatus(getUserNumberByState(status));
- }
- for (var un in bufferStates) {
- setState(un, bufferStates[un]);
- }
- bufferStates = {};
- for (var i = 0; i < offlineBuffer.length; i++) {
- if (offlineBuffer[i] == "") {
- offlineBuffer[i] = sessionStorageManager.getItem("TenantGuid");
- }
- if (isDialogOpen(offlineBuffer[i])) {
- closeConversationBlock(offlineBuffer[i]);
- }
- removeUserInSessionIfExists(offlineBuffer[i]);
- openMessageDialog(offlineBuffer[i]);
- var result = flashConversationBlock(offlineBuffer[i], true);
- if (result) {
- flashBlocks[offlineBuffer[i]] = result;
- }
- }
- offlineBuffer = [];
- loadMessageDialogs();
- jq(".extend_chat_icon").off("click").on("click", extendChat);
- ASC.Controls.JabberClient.extendChat = extendChat;
- setPingSending();
- };
- // sendInvite
- chat.client.si = function (message) {
- message = reMap(message, messageContract);
- if (!isDialogOpen(sessionStorageManager.getItem("TenantGuid"))) {
- openMessageDialog(sessionStorageManager.getItem("TenantGuid"));
- }
- putMessage({
- IsMessageOfCurrentUser: false,
- Name: message.UserName,
- DateTime: Teamlab.getDisplayTime(new Date()),
- Message: addBr(ASC.Resources.Master.ChatResource.ChatRoomInvite + " " + message.Text + ". " + ASC.Resources.Master.ChatResource.GoTalk),
- NotRead: true
- }, sessionStorageManager.getItem("TenantGuid"));
- };
- // send
- chat.client.s = function (message, calleeUserName, isTenantUser) {
- message = reMap(message, messageContract);
- if (currentAccount != null) {
- var userName = undefined,
- showUserName = undefined,
- $document = jq(document),
- isMessageOfCurrentUser = undefined;
- if (!isTenantUser) {
- userName = message.UserName;
- isMessageOfCurrentUser = (userName == currentAccount.UserName);
- showUserName = isMessageOfCurrentUser ?
- currentAccount.ShowUserName :
- jq(".contact_block[data-username='" + message.UserName + "']").find(".contact_record").text();
- } else {
- userName = sessionStorageManager.getItem("TenantGuid");
- showUserName = currentAccount.TenantName;
- isMessageOfCurrentUser = (userName == currentAccount.UserName);
- }
- var realUserName = isMessageOfCurrentUser ? calleeUserName : userName;
- if (isDialogOpen(userName) || isDialogOpen(calleeUserName)) {
- if (!isMessageOfCurrentUser) {
- var $conversationBlock = jq(".conversation_block[data-username='" + userName + "']");
- hideTypingMessageNotification($conversationBlock, $conversationBlock.find(".message_bus_container"));
- }
- putMessage({
- IsMessageOfCurrentUser: isMessageOfCurrentUser,
- Name: showUserName,
- DateTime: Teamlab.getDisplayTime(new Date()),
- Message: addBr(message.Text),
- NotRead: !isMessageOfCurrentUser
- }, realUserName);
- } else if (isActive && !isMessageOfCurrentUser) {
- showMessageNotification({
- UserName: userName,
- Message: addBr(message.Text),
- ShowUserName: showUserName,
- });
- }
- if (!isMessageOfCurrentUser) {
- if (!isMobile && soundPath && localStorageManager.getItem("EnableSound")) {
- playSound(soundPath);
- }
- if (!isActive) {
- shouldOpenUserDialogs[shouldOpenUserDialogs.length] = userName;
- if (!titleTimerId) {
- originalTitle = $document.find("title").text();
- $document.find("title").text("*" + ASC.Resources.Master.ChatResource.NewMessageLabel + " " + originalTitle);
- titleTimerId = setInterval(function () {
- starsNumber++;
- $document.find("title").text(getStars(starsNumber) +
- ASC.Resources.Master.ChatResource.NewMessageLabel + " " + originalTitle);
- if (starsNumber == 3) {
- starsNumber = 0;
- }
- }, TITLE_INTERVAL);
- }
- }
- } else {
- openMessageDialog(calleeUserName);
- }
- }
- };
- // sendOfflineMessages
- chat.client.som = function (userNames) {
- offlineBuffer = userNames;
- if (currentAccount && sessionStorageManager.getItem("WasConnected")) {
- for (var i = 0; i < offlineBuffer.length; i++) {
- if (offlineBuffer[i] == "") {
- offlineBuffer[i] = sessionStorageManager.getItem("TenantGuid");
- }
- if (isDialogOpen(offlineBuffer[i])) {
- closeConversationBlock(offlineBuffer[i]);
- }
- removeUserInSessionIfExists(offlineBuffer[i]);
- openMessageDialog(offlineBuffer[i]);
- var result = flashConversationBlock(offlineBuffer[i], true);
- if (result) {
- flashBlocks[offlineBuffer[i]] = result;
- }
- }
- offlineBuffer = [];
- }
- };
- // sendTypingSignal
- chat.client.sts = function (userName) {
- if (isDialogOpen(userName)) {
- var $conversationBlock = jq(".conversation_block[data-username='" + userName + "']"),
- $typingMessageNotification = $conversationBlock.find(".typing_message_notification");
- if ($typingMessageNotification.hasClass("display-none")) {
- $messageBusContainer = $conversationBlock.find(".message_bus_container");
- $typingMessageNotification.css("bottom", $conversationBlock.find(".message_input_area").outerHeight() + PX);
- $typingMessageNotification.removeClass("display-none");
- }
- if (typingSignalTimeout) {
- clearTimeout(typingSignalTimeout);
- typingSignalTimeout = null;
- }
- typingSignalTimeout = setTimeout(function () {
- hideTypingMessageNotification($conversationBlock, $conversationBlock.find(".message_bus_container"));
- }, 5000);
- }
- };
- // setState
- chat.client.ss = function (userName, stateNumber, isJabberClient) {
- if (currentAccount != null) {
- setState(userName, stateNumber, isJabberClient);
- } else {
- bufferStates[userName] = stateNumber;
- }
- };
- // statesRetrieved
- chat.client.sr = function (states) {
- var keys = Object.keys(states),
- status = sessionStorageManager.getItem("CurrentStatus"),
- $conversationBlocks = jq(".conversation_block"),
- $chatMessagesLoading,
- $conversationBlock;
- $conversationBlocks.removeClass("display-none");
- for (var i = 0; i < keys.length; i++) {
- setState(keys[i], states[keys[i]]);
- }
- sessionStorageManager.setItem("WasConnected", true);
- for (var i = 0; i < $conversationBlocks.length; i++) {
- $conversationBlock = jq($conversationBlocks[i]);
- if (!$conversationBlock.find(".chat_messages_loading").hasClass("display-none")) {
- getRecentMessagesOnStart($conversationBlock.attr("data-username"));
- }
- }
- if (status && status != OFFLINE) {
- changeStatus(getUserNumberByState(status));
- }
- for (var userName in bufferStates) {
- setState(userName, bufferStates[userName]);
- }
- searchContact();
- bufferStates = {};
- for (var i = 0; i < offlineBuffer.length; i++) {
- if (offlineBuffer[i] == "") {
- offlineBuffer[i] = sessionStorageManager.getItem("TenantGuid");
- }
- if (isDialogOpen(offlineBuffer[i])) {
- closeConversationBlock(offlineBuffer[i]);
- }
- openMessageDialog(offlineBuffer[i]);
- var result = flashConversationBlock(offlineBuffer[i], true);
- if (result) {
- flashBlocks[offlineBuffer[i]] = result;
- }
- }
- offlineBuffer = [];
- jq(".extend_chat_icon").off("click").on("click", extendChat);
- ASC.Controls.JabberClient.extendChat = extendChat;
- setPingSending();
- };
- // setStatus
- chat.client.sst = function (number) {
- changeStatus(number);
- };
- // error
- chat.client.e = function () {
- showErrorNotification();
- connectionStop();
- closeChat();
- };
- } else {
- throw "Error! Chat proxy is undefined!!!";
- }
- function getRecentMessagesOnStart(u) {
- var userName = u;
- chat.server.grm(userName == sessionStorageManager.getItem("TenantGuid") ? "" : userName, INT_MAX_VALUE).done(function (recentMessages) {
- var $cb = jq(".conversation_block[data-username='" + userName + "']"),
- $chatLoading = $cb.find(".chat_messages_loading");
- receiveRecentMessages(userName, recentMessages, $chatLoading, $cb, 0);
- });
- }
- function removeUserInSessionIfExists(currentUserName) {
- var dialogsNumber = sessionStorageManager.getItem("dialogsNumber");
- for (var i = 0; i < dialogsNumber; i++) {
- if (currentUserName == sessionStorageManager.getItem("userName" + i)) {
- for (var j = i; j < dialogsNumber; j++) {
- sessionStorageManager.setItem("userName" + j, sessionStorageManager.getItem("userName" + (j + 1)));
- }
- sessionStorageManager.removeItem("userName" + dialogsNumber - 1);
- sessionStorageManager.setItem("dialogsNumber", dialogsNumber - 1);
- break;
- }
- }
- }
- function s4() {
- return (0 | ((1 + Math.random()) * 0x10000)).toString(16).substring(1);
- }
- function guid() {
- return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
- }
- function setPingSending() {
- if (pingTimerId) {
- clearInterval(pingTimerId);
- }
- pingTimerId = setInterval(function () {
- if (sessionStorageManager.getItem("WasConnected")) {
- // ping
- chat.server.p();
- } else {
- clearInterval(pingTimerId);
- pingTimerId = null;
- }
- }, PING_TIMEOUT_INTERVAL);
- }
- function hideTypingMessageNotification(conversationBlock, messageBusContainer) {
- jq(conversationBlock).find(".typing_message_notification").addClass("display-none");
- jq(messageBusContainer).css({ "height": "100%", "padding-bottom": "0" });
- if (typingSignalTimeout) {
- clearTimeout(typingSignalTimeout);
- typingSignalTimeout = null;
- }
- }
- function getStars(starsNumber) {
- switch (starsNumber) {
- case 1: return "*";
- case 2: return "**";
- case 3: return "***";
- }
- }
- function loadMessageDialogs() {
- var userName,
- dialogsNumber = sessionStorageManager.getItem("dialogsNumber"),
- dialogsNumberInMenu = sessionStorageManager.getItem("dialogsNumberInMenu");
- if (dialogsNumber) {
- for (var i = 0; i < dialogsNumber; i++) {
- userName = sessionStorageManager.getItem("userName" + i);
- openMessageDialog(userName, true, i);
- // if user was disabled
- if (disableUser) {
- i--;
- dialogsNumber--;
- disableUser = false;
- }
- if (sessionStorageManager.getItem("MiniCB" + userName)) {
- minimize(jq(".conversation_block[data-username='" + userName + "']"));
- }
- }
- }
- if (dialogsNumberInMenu) {
- for (var i = 0; i < dialogsNumberInMenu; i++) {
- userName = sessionStorageManager.getItem("dn_userName" + i);
- var $contactRecord = jq(".contact_block[data-username='" + userName + "']").find(".contact_record");
- // if user was disabled
- if (!$contactRecord.length) {
- sessionStorageManager.setItem("dialogsNumberInMenu", dialogsNumberInMenu - 1);
- for (var j = i; j < dialogsNumberInMenu - 1; j++) {
- sessionStorageManager.setItem("dn_userName" + j, sessionStorageManager.getItem("dn_userName" + (j + 1)));
- }
- sessionStorageManager.removeItem("dn_userName" + (dialogsNumberInMenu - 1));
- i--;
- dialogsNumberInMenu--;
- continue;
- }
- addToMenu({
- UserName: userName,
- ShowUserName: $contactRecord.text(),
- }, true);
- }
- // if user was disabled
- if (getMaxDialogNumber() > sessionStorageManager.getItem("dialogsNumber")) {
- userName = jq("#messageDialogPopupID").find(".message_dialog_item").first().attr("data-username");
- closeMessageDialogItem(userName);
- openMessageDialog(userName);
- }
- }
- jq(".message_input_area").blur();
- }
- function isDialogOpen(userName) {
- if (jq(".conversation_block[data-username='" + userName + "']").length) {
- return true;
- }
- return false;
- }
- function isDialogInMenu(userName) {
- if (jq(".message_dialog_item[data-username='" + userName + "']").length) {
- return true;
- }
- return false;
- }
- function removeParametersOfDialogInMenu(userName) {
- var $block = jq(".message_dialog_item[data-username='" + userName + "']"),
- $items = jq(".message_dialog_item"),
- dialogsNumberInMenu = sessionStorageManager.getItem("dialogsNumberInMenu") - 1,
- $messageDialogItem = jq(".message_dialog_item");
- for (var i = 0; i < $messageDialogItem.length; i++) {
- var nextIndex = $items.index($messageDialogItem[i]);
- if ($items.index($block) < nextIndex) {
- sessionStorageManager.setItem("dn_userName" + (nextIndex - 1),
- sessionStorageManager.getItem("dn_userName" + nextIndex));
- }
- }
- $block.remove();
- sessionStorageManager.removeItem("dn_userName" + dialogsNumberInMenu);
- sessionStorageManager.setItem("dialogsNumberInMenu", dialogsNumberInMenu);
- }
- function setParametersOfDialog(userName) {
- var dialogsNumber = sessionStorageManager.getItem("dialogsNumber");
- if (dialogsNumber) {
- sessionStorageManager.setItem("userName" + dialogsNumber, userName);
- jq(".conversation_block[data-username='" + userName + "']").attr("data-dialog-number", dialogsNumber);
- sessionStorageManager.setItem("dialogsNumber", ++dialogsNumber);
- } else {
- sessionStorageManager.setItem("userName0", userName);
- jq(".conversation_block[data-username='" + userName + "']").attr("data-dialog-number", "0");
- sessionStorageManager.setItem("dialogsNumber", 1);
- }
- }
- function setParametersOfDialogInMenu(userName) {
- var dialogsNumberInMenu = sessionStorageManager.getItem("dialogsNumberInMenu");
- if (dialogsNumberInMenu) {
- sessionStorageManager.setItem("dn_userName" + dialogsNumberInMenu, userName);
- sessionStorageManager.setItem("dialogsNumberInMenu", ++dialogsNumberInMenu);
- } else {
- sessionStorageManager.setItem("dn_userName0", userName);
- sessionStorageManager.setItem("dialogsNumberInMenu", 1);
- }
- }
- function getContactNumberBeforeCurrent(name, ulClass) {
- var $lists = jq("." + ulClass).children();
- for (var i = 0; i < $lists.length; i++) {
- if (name <= jq($lists[i]).find(".contact_record").text().toLowerCase()) {
- break;
- }
- }
- return i;
- }
- function setState(userName, stateNumber, isJabberClient) {
- if (userName != currentAccount.UserName) {
- var newState = getImageByNumber(stateNumber),
- $contactBlock = jq(".contact_block[data-username='" + userName + "']"),
- ulClass;
- if ($contactBlock.length) {
- var $elem = $contactBlock.find(".chat_user_state");
- if ($elem.attr("class") != undefined) {
- var oldState = $elem.attr("class").split(" ")[1];
- $elem.removeClass(oldState);
- $elem.addClass(newState);
- $contactBlock.detach();
- switch (stateNumber) {
- case NUMBER_ONLINE:
- ulClass = "online_user_list";
- break;
- case NUMBER_AWAY:
- ulClass = "away_user_list";
- break;
- case NUMBER_NOT_AVAILABLE:
- ulClass = "not_available_user_list";
- break;
- default:
- ulClass = "offline_user_list";
- }
- var contactNumber = getContactNumberBeforeCurrent($contactBlock.find(".contact_record").text().toLowerCase(), ulClass);
- if (contactNumber) {
- $contactBlock.insertAfter("." + ulClass + " li:nth-child(" + contactNumber + ")");
- } else {
- $contactBlock.prependTo("." + ulClass);
- }
- }
- } else {
- if (sessionStorageManager.getItem("WasConnected")) {
- // getContactInfo
- chat.server.gci(userName).done(function (contact) {
- switch (contact.Item2) {
- case NUMBER_ONLINE:
- ulClass = "online_user_list";
- break;
- case NUMBER_AWAY:
- ulClass = "away_user_list";
- break;
- case NUMBER_NOT_AVAILABLE:
- ulClass = "not_available_user_list";
- break;
- default:
- ulClass = "offline_user_list";
- }
- createContactInfo({
- UserName: userName,
- ShowUserName: contact.Item1,
- StateClass: ulClass
- }, ulClass);
- }).fail(function (error) {
- showErrorNotification();
- });
- }
- }
- if (isDialogOpen(userName)) {
- var $stateBlock = jq(".conversation_block[data-username='" + userName + "']").find(".conversation_block_user_state");
- if ($stateBlock.attr("class") != undefined) {
- var oldState = $stateBlock.attr("class").split(" ")[1];
- $stateBlock.removeClass(oldState);
- $stateBlock.addClass(newState);
- $stateBlock.attr("title", getRealStateByNumber(stateNumber));
- }
- }
- } else if (!isJabberClient) {
- changeStatus(stateNumber);
- }
- }
- function createContactInfo(contact, ulClass) {
- var contactNumber = getContactNumberBeforeCurrent(contact.UserName, ulClass),
- html = jq("#contactTmpl").tmpl(contact);
- if (contactNumber) {
- html.insertAfter("." + ulClass + " li:nth-child(" + contactNumber + ")");
- } else {
- html.prependTo("." + ulClass);
- }
- }
- function changeStatus(stateNumber, NoIconGreen) {
- var state = getUserStateByNumber(stateNumber);
- if (state != currentStatus) {
- var prevStatus = currentStatus,
- $showSmallChatIcon = jq(".show_small_chat_icon"),
- $smallChatPopupID = jq("#smallChatPopupID"),
- $smallChatTextStatus = jq(".small_chat_text_status"),
- $currentStatus = jq("." + currentStatus),
- realStatus;
- $smallChatPopupID.removeClass("display_block");
- $smallChatPopupID.addClass("display-none");
- $currentStatus.removeClass("disable");
- $smallChatTextStatus.removeClass(currentImage);
- $currentStatus.click(chooseStatus);
- if (state == OFFLINE) {
- $showSmallChatIcon.addClass("small_chat_icon_white");
- $showSmallChatIcon.removeClass("small_chat_icon_green");
- connectionStop();
- } else if (!NoIconGreen) {
- $showSmallChatIcon.addClass("small_chat_icon_green");
- $showSmallChatIcon.removeClass("small_chat_icon_white");
- }
- currentImage = getImageByNumber(stateNumber);
- currentStatus = state;
- sessionStorageManager.setItem("CurrentStatus", currentStatus);
- $currentStatus = jq("." + currentStatus);
- $currentStatus.off("click");
- $currentStatus.addClass("disable");
- $smallChatTextStatus.addClass(currentImage);
- realStatus = getRealState(currentStatus);
- $smallChatTextStatus.text(realStatus);
- jq("small_chat_status_menu").attr("title", realStatus);
- }
- }
- function showMessageNotification(object) {
- noty({
- text: jq("#messageNotificationTmpl").tmpl(object),
- layout: "bottomRight",
- theme: "defaultTheme",
- type: "alert",
- animation: {
- easing: "swing",
- open: { "height": "toggle" },
- close: { "height": "toggle" },
- speed: "400",
- },
- timeout: "7000",
- maxVisible: 7,
- force: true
- });
- }
- function putMessage(object, userName) {
- var $conversationBlock = jq(".conversation_block[data-username='" + userName + "']"),
- $messageBusContainer = $conversationBlock.find(".message_bus_container"),
- $last = $messageBusContainer.find(".message_of_user:last");
- if ((($last.hasClass("message_of_other_user") && object.IsMessageOfCurrentUser) ||
- ($last.hasClass("message_of_current_user") && !object.IsMessageOfCurrentUser)) &&
- timersForMessages[userName]) {
- clearTimeout(timersForMessages[userName]);
- delete timersForMessages[userName];
- }
- if (!object.IsMessageOfCurrentUser && !(userName in flashBlocks)) {
- var result = flashConversationBlock(userName, true);
- if (result) {
- flashBlocks[userName] = result;
- }
- }
- if (!timersForMessages[userName]) {
- $messageBusContainer.append(jq("#messageTmpl").tmpl(object));
- $last = $messageBusContainer.find(".message_of_user:last");
- } else {
- $last.next().text(object.DateTime);
- $last.after("<div class='message_of_user " +
- ($last.hasClass("message_of_current_user") ? "message_of_current_user" : "message_of_other_user not_read_message") +
- "'>" + object.Message + "</div>");
- clearTimeout(timersForMessages[userName]);
- delete timersForMessages[userName];
- }
- timersForMessages[userName] = setTimeout(function () {
- clearTimeout(timersForMessages[userName]);
- delete timersForMessages[userName];
- }, 30000);
- $last = $messageBusContainer.find(".message_of_user:last");
- if (userName != sessionStorageManager.getItem("TenantGuid")) {
- emoticonize($last);
- }
- $last.linkify();
- scrollTopMessageContainer($messageBusContainer);
- }
- function scrollTopMessageContainer(messageBusContainer) {
- var $messageBusContainer = jq(messageBusContainer);
- scrollHeight = $messageBusContainer.prop("scrollHeight");
- if (scrollHeight > $messageBusContainer.scrollTop() && scrollHeight > $messageBusContainer.height()) {
- $messageBusContainer.scrollTop(scrollHeight);
- }
- }
- function putSmileInMessage(e) {
- var $smile = jq(e.currentTarget),
- $smileMenu = jq(".smile_menu"),
- dn = $smileMenu.attr("id").split("smilesPopupID")[1],
- $conversationBlock = jq(".conversation_block[data-dialog-number='" + dn + "']"),
- $messageInputArea = $conversationBlock.find(".message_input_area"),
- cursorPos = $messageInputArea.prop("selectionStart"),
- v = $messageInputArea.val(),
- smileString = " " + $smile.text();
- $messageInputArea.val(v.substring(0, cursorPos) + smileString + v.substring(cursorPos, v.length));
- $messageInputArea.val($messageInputArea.val() + " ");
- setCaretPosition($messageInputArea, cursorPos + smileString.length);
- $messageInputArea.trigger("autosize.resize");
- $messageInputArea.scrollTop($messageInputArea.prop("scrollHeight"));
- sendTypingSignal($conversationBlock.attr("data-username"));
- $smileMenu.css("display", "none");
- }
- function getRealState(state) {
- switch (state) {
- case ONLINE:
- return ASC.Resources.Master.ChatResource.StatusOnline;
- case AWAY:
- return ASC.Resources.Master.ChatResource.StatusAway;
- case NOT_AVAILABLE:
- return ASC.Resources.Master.ChatResource.StatusNA;
- default:
- return ASC.Resources.Master.ChatResource.StatusOffline;
- }
- }
- function getRealStateByNumber(stateNumber) {
- switch (stateNumber) {
- case NUMBER_ONLINE:
- return ASC.Resources.Master.ChatResource.StatusOnline;
- case NUMBER_AWAY:
- return ASC.Resources.Master.ChatResource.StatusAway;
- case NUMBER_NOT_AVAILABLE:
- return ASC.Resources.Master.ChatResource.StatusNA;
- default:
- return ASC.Resources.Master.ChatResource.StatusOffline;
- }
- }
- function getRealStateByImageState(stateNumber) {
- switch (stateNumber) {
- case IMAGE_ONLINE:
- return ASC.Resources.Master.ChatResource.StatusOnline;
- case IMAGE_AWAY:
- return ASC.Resources.Master.ChatResource.StatusAway;
- case IMAGE_NOT_AVAILABLE:
- return ASC.Resources.Master.ChatResource.StatusNA;
- default:
- return ASC.Resources.Master.ChatResource.StatusOffline;
- }
- }
- function getUserStateByImageState(imageState) {
- switch (imageState) {
- case IMAGE_ONLINE:
- return ONLINE;
- case IMAGE_AWAY:
- return AWAY;
- case IMAGE_NOT_AVAILABLE:
- return NOT_AVAILABLE;
- default:
- return OFFLINE;
- }
- }
- function getImageByNumber(stateNumber) {
- switch (stateNumber) {
- case NUMBER_ONLINE:
- return IMAGE_ONLINE;
- case NUMBER_AWAY:
- return IMAGE_AWAY;
- case NUMBER_NOT_AVAILABLE:
- return IMAGE_NOT_AVAILABLE;
- default:
- return IMAGE_OFFLINE;
- }
- }
- function getUserStateByNumber(stateNumber) {
- switch (stateNumber) {
- case NUMBER_ONLINE:
- return ONLINE;
- case NUMBER_AWAY:
- return AWAY;
- case NUMBER_NOT_AVAILABLE:
- return NOT_AVAILABLE;
- default:
- return OFFLINE;
- }
- }
- function getUserNumberByState(state) {
- switch (state) {
- case ONLINE:
- return NUMBER_ONLINE;
- case AWAY:
- return NUMBER_AWAY;
- case NOT_AVAILABLE:
- return NUMBER_NOT_AVAILABLE;
- default:
- return NUMBER_OFFLINE;
- }
- }
- function getUserNumberByStateForConnection() {
- var state = getUserNumberByState(sessionStorageManager.getItem("CurrentStatus"));
- if (!state || state == NUMBER_OFFLINE) {
- state = NUMBER_ONLINE;
- }
- return state;
- }
- function openUserDetailList(e) {
- if (isMobile) {
- return;
- }
- closeUserDetailList();
- if (sessionStorageManager.getItem("WasConnected")) {
- var $contactBlock = jq(e.currentTarget),
- userName = $contactBlock.attr("data-username");
- if (!$contactBlock.is(":hover") || userName == sessionStorageManager.getItem("TenantGuid")) {
- return;
- }
- var timeoutId = setTimeout(function () {
- if (!$contactBlock.is(":hover") || !sessionStorageManager.getItem("WasConnected")) {
- return;
- }
- var $detailUserList = jq(".detail_user_list");
- if ($detailUserList.length) {
- $detailUserList.remove();
- }
- if (userInformations[userName]) {
- openDetail(userName, userInformations[userName], $contactBlock);
- } else {
- Teamlab.getProfile({}, userName, {
- success: function (params, data) {
- var departments = {};
- if (data.groups) {
- for (var i = 0; i < data.groups.length; i++) {
- departments[data.groups[i].id] = data.groups[i].name;
- }
- }
- userInformation = {
- UserName: userName,
- ShowUserName: data.displayName,
- Email: data.email,
- UserType: data.isVisitor ? ASC.Resources.Master.Guest : ASC.Resources.Master.User,
- Title: data.title,
- PhotoURL: data.avatar,
- Departments: departments
- };
- userInformations[userName] = userInformation;
- openDetail(userName, userInformation, $contactBlock);
- }
- });
- }
- }, OPEN_USER_DETAIL_LIST_INTERVAL);
- $contactBlock.data("timeoutId", timeoutId);
- }
- }
- function openDetail(userName, data, $contactBlock) {
- if (!jq($contactBlock).is(":hover")) {
- return;
- }
- if (data) {
- var html = jq("#detailUserListTmpl").tmpl(data),
- $detailUserList = jq(html).appendTo(".mainPageTableSidePanel"),
- positionOfContact = jq(".contact_block[data-username='" + userName + "']").offset(),
- top = positionOfContact.top - 30,
- $window = jq(window),
- scrollTop = $window.scrollTop();
- $detailUserList.css("left", positionOfContact.left + 220 + PX);
- if (top + $detailUserList.outerHeight(true) < $window.height() + scrollTop) {
- $detailUserList.css("top", top - scrollTop + PX);
- } else {
- $detailUserList.css("bottom", 15 + PX);
- }
- $detailUserList.fadeIn(170);
- $detailUserList.removeClass("display-none");
- }
- }
- function closeUserDetailList(e) {
- if (isMobile) {
- return;
- }
- if (sessionStorageManager.getItem("WasConnected")) {
- setTimeout(function () {
- var $detailUserList = jq(".detail_user_list");
- if (e) {
- clearTimeout(jq(e.currentTarget).data("timeoutId"));
- }
- if ($detailUserList.length && !$detailUserList.hasClass("hover")) {
- $detailUserList.fadeOut(100);
- }
- }, 50);
- }
- }
- function showChat() {
- var smallChatHeight = sessionStorageManager.getItem("SmallChatHeight"),
- $showSmallChatIcon = jq(".show_small_chat_icon"),
- $smallChatMainWindow = jq(".small_chat_main_window");
- jq(".extend_chat_icon").off("click");
- ASC.Controls.JabberClient.extendChat = function () { ASC.Controls.JabberClient.open(); }
- sessionStorageManager.setItem("WasLoad", true);
- $smallChatMainWindow.addClass("small_chat_main_window_full");
- $showSmallChatIcon.addClass("small_chat_icon_green");
- $showSmallChatIcon.removeClass("small_chat_icon_white");
- jq(".contact_container").removeClass("display-none");
- jq(".small_chat_top_panel").removeClass("display-none");
- jq(".icon_ch_size").removeClass("display-none");
- resizeChat();
- jq(".conversation_block").removeClass("display-none");
- jq(".message_dialog_btn").removeClass("display-none");
- if (smallChatHeight) {
- $smallChatMainWindow.css("height", smallChatHeight);
- }
- if (!currentAccount) {
- jq(".chat_contact_loader").removeClass("display-none");
- }
- if (currentStatus == OFFLINE) {
- chooseUserStatus(ONLINE);
- }
- }
- function closeChat() {
- var smallChatHeight = sessionStorageManager.getItem("SmallChatHeight"),
- $showSmallChatIcon = jq(".show_small_chat_icon"),
- $smallChatMainWindow = jq(".small_chat_main_window"),
- $notifications = jq(".notification_username"),
- $noRemove = jq(".chat_contact_loader"),
- $contactContainer = jq(".contact_container");
- sessionStorageManager.setItem("WasConnected", false);
- sessionStorageManager.setItem("WasLoad", false);
- var dialogsNumber = sessionStorageManager.getItem("dialogsNumber"),
- dialogsNumberInMenu = sessionStorageManager.getItem("dialogsNumberInMenu") || 0;
- for (var i = 0; i < dialogsNumber; i++) {
- sessionStorageManager.removeItem("userName" + i);
- }
- for (var i = 0; i < dialogsNumberInMenu; i++) {
- sessionStorageManager.removeItem("dn_userName");
- }
- sessionStorageManager.setItem("dialogsNumber", 0);
- sessionStorageManager.setItem("dialogsNumberInMenu", 0);
- jq(".conversation_block").remove();
- jq(".message_dialog_btn").remove();
- jq(".detail_user_list").remove();
- $contactContainer.empty();
- $contactContainer.html($noRemove);
- currentAccount = null;
- if ($notifications.length) {
- for (var i = 0; i < $notifications.length; i++) {
- jq($notifications[i]).closest("li").remove();
- }
- }
- if (smallChatHeight) {
- $smallChatMainWindow.css("height", "initial");
- }
- $smallChatMainWindow.removeClass("small_chat_main_window_full");
- $showSmallChatIcon.addClass("small_chat_icon_white");
- $showSmallChatIcon.removeClass("small_chat_icon_green");
- jq(".contact_container").addClass("display-none");
- jq(".small_chat_top_panel").addClass("display-none");
- jq(".icon_ch_size").addClass("display-none");
- if (!isMobile) {
- $smallChatMainWindow.resizable("disable").removeClass("ui-state-disabled");
- }
- //restore default state
- changeStatus(NUMBER_ONLINE, true);
- }
- function hideChat() {
- var smallChatHeight = sessionStorageManager.getItem("SmallChatHeight"),
- $showSmallChatIcon = jq(".show_small_chat_icon"),
- $smallChatMainWindow = jq(".small_chat_main_window");
- if (smallChatHeight) {
- $smallChatMainWindow.css("height", "initial");
- }
- $smallChatMainWindow.removeClass("small_chat_main_window_full");
- $showSmallChatIcon.addClass("small_chat_icon_white");
- $showSmallChatIcon.removeClass("small_chat_icon_green");
- jq(".contact_container").addClass("display-none");
- jq(".small_chat_top_panel").addClass("display-none");
- jq(".icon_ch_size").addClass("display-none");
- if (!isMobile) {
- $smallChatMainWindow.resizable("disable").removeClass("ui-state-disabled");
- }
- jq(".conversation_block").addClass("display-none");
- jq(".message_dialog_btn").addClass("display-none");
- jq(".detail_user_list").remove();
- //restore default state
- changeStatus(NUMBER_ONLINE, true);
- }
- function showOrHideSmallChat() {
- if (!sessionStorageManager.getItem("WasConnected") && currentStatus != OFFLINE) {
- if (jq.connection.hub.state === jq.connection.connectionState.connected) {
- connectionStart();
- showChat();
- }
- } else {
- connectionStop();
- hideChat();
- }
- }
- function openContacts() {
- if (shouldOpenContacts) {
- shouldOpenContacts = false;
- var dialogsNumber = sessionStorageManager.getItem("dialogsNumber"),
- dialogsNumberInMenu = sessionStorageManager.getItem("dialogsNumberInMenu") || 0,
- allDialogsNumber = dialogsNumber + dialogsNumberInMenu,
- userName;
- for (var i = 0; i < dialogsNumber; i++) {
- userName = sessionStorageManager.getItem("userName" + i);
- if (userName == sessionStorageManager.getItem("TenantGuid")) {
- ASC.Controls.JabberClient.openTenant(currentAccount.TenantName);
- } else {
- ASC.Controls.JabberClient.openContact(userName);
- }
- }
- for (var i = dialogsNumber; i < allDialogsNumber; i++) {
- userName = sessionStorageManager.getItem("dn_userName" + (i - dialogsNumber));
- if (userName == sessionStorageManager.getItem("TenantGuid")) {
- ASC.Controls.JabberClient.openTenant(currentAccount.TenantName);
- } else {
- ASC.Controls.JabberClient.openContact(userName);
- }
- }
- }
- }
- function extendChat() {
- if (!jabberTalkWindow || jabberTalkWindow.closed) {
- jabberTalkWindow = ASC.Controls.JabberClient.open();
- if (!sessionStorageManager.getItem("WasConnected") && currentStatus != OFFLINE) {
- shouldOpenContacts = false;
- } else {
- shouldOpenContacts = true;
- }
- setTimeout(function () {
- if (session…
Large files files are truncated, but you can click here to view the full file