/* Template Name: Grenviro Monitoring Author: Themesbrand Website: https://Themesbrand.com/ Contact: Themesbrand@gmail.com File: Chat init js */ (function () { var dummyUserImage = "build/images/users/user-dummy-img.jpg"; var dummyMultiUserImage = "build/images/users/multi-user.jpg"; var isreplyMessage = false; // favourite btn document.querySelectorAll(".favourite-btn").forEach(function (item) { item.addEventListener("click", function (event) { this.classList.toggle("active"); }); }); // toggleSelected function toggleSelected() { var userChatElement = document.querySelectorAll(".user-chat"); Array.from(document.querySelectorAll(".chat-user-list li a")).forEach(function (item) { item.addEventListener("click", function (event) { userChatElement.forEach(function (elm) { elm.classList.add("user-chat-show"); }); // chat user list link active var chatUserList = document.querySelector(".chat-user-list li.active"); if (chatUserList) chatUserList.classList.remove("active"); this.parentNode.classList.add("active"); }); }); // user-chat-remove document.querySelectorAll(".user-chat-remove").forEach(function (item) { item.addEventListener("click", function (event) { userChatElement.forEach(function (elm) { elm.classList.remove("user-chat-show"); }); }); }); } //User current Id var currentChatId = "users-chat"; var currentSelectedChat = "users"; var url="build/json/"; var usersList = ""; var userChatId = 1; scrollToBottom(currentChatId); //user list by json var getJSON = function (jsonurl, callback) { var xhr = new XMLHttpRequest(); xhr.open("GET", url + jsonurl, true); xhr.responseType = "json"; xhr.onload = function () { var status = xhr.status; if (status === 200) { callback(null, xhr.response); } else { callback(status, xhr.response); } }; xhr.send(); }; // get User list getJSON("chat-users-list.json", function (err, data) { if (err !== null) { console.log("Something went wrong: " + err); } else { // set users message list var users = data[0].users; users.forEach(function (userData, index) { var isUserProfile = userData.profile ? '' : '
' + userData.nickname + '
'; var isMessageCount = userData.messagecount ? '
' + userData.messagecount + "
" : ""; var messageCount = userData.messagecount ? '' : '' var activeClass = userData.id === 1 ? "active" : ""; document.getElementById("userList").innerHTML += '
  • \ '+ messageCount + ' \
    \
    \
    \ ' + isUserProfile + '\
    \
    \
    \

    ' + userData.name + "

    \
    \ " + isMessageCount + "\
    \
    \
  • "; }); // set channels list var channelsData = data[0].channels; channelsData.forEach(function (isChannel, index) { var isMessage = isChannel.messagecount ? '
    ' + isChannel.messagecount + "
    " : ""; var isMessageCount = isChannel.messagecount ? '
    ' + isChannel.messagecount + "
    " : ""; var messageCount = isChannel.messagecount ? '' : '' document.getElementById("channelList").innerHTML += '
  • \ '+ messageCount + ' \
    \
    \
    \
    #
    \
    \
    \
    \

    ' + isChannel.name + "

    \
    \
    " + isMessage + "
    \
    \
    \
  • "; }); } toggleSelected(); chatSwap(); }); // get contacts list getJSON("chat-contacts-list.json", function (err, data) { if (err !== null) { console.log("Something went wrong: " + err); } else { usersList = data; data.sort(function (a, b) { return a.name.localeCompare(b.name); }); // set favourite users list var msgHTML = ""; var userNameCharAt = ""; usersList.forEach(function (user, index) { var profile = user.profile ? '' : '' + user.nickname + ''; msgHTML = '
  • \
    \
    \
    \ ' + profile + '\
    \
    \
    \

    ' + user.name + '

    \
    \
    \ \
    \
    \
  • '; var isSortContact = '
    \
    ' + user.name.charAt(0).toUpperCase() + '\
    \ " + "
    "; }); } contactList(); toggleSelected(); }); function contactList() { document.querySelectorAll(".sort-contact ul li").forEach(function (item) { item.addEventListener("click", function (event) { currentSelectedChat = "users"; updateSelectedChat(); var contactName = item.querySelector("li .contactlist-name").innerHTML; document.querySelector(".user-chat-topbar .text-truncate .username").innerHTML = contactName; document.querySelector(".profile-offcanvas .username").innerHTML = contactName; if (isreplyMessage == true) { isreplyMessage = false; document.querySelector(".replyCard").classList.remove("show"); } if (item.querySelector(".align-items-center").querySelector(".avatar-xxs img")) { var contactImg = item.querySelector(".align-items-center").querySelector(".avatar-xxs .rounded-circle").getAttribute("src"); document.querySelector(".user-own-img .avatar-xs").setAttribute("src", contactImg); document.querySelector(".profile-offcanvas .profile-img").setAttribute("src", contactImg); } else { document.querySelector(".user-own-img .avatar-xs").setAttribute("src", dummyUserImage); document.querySelector(".profile-offcanvas .profile-img").setAttribute("src", dummyUserImage); } var conversationImg = document.getElementById("users-conversation"); conversationImg.querySelectorAll(".left .chat-avatar").forEach(function (item3) { if (contactImg) { item3.querySelector("img").setAttribute("src", contactImg); } else { item3.querySelector("img").setAttribute("src", dummyUserImage); } }); window.stop(); }); }); } //user list by json function getJSONFile(jsonurl, callback) { var xhr = new XMLHttpRequest(); xhr.open("GET", jsonurl, true); xhr.responseType = "json"; xhr.onload = function () { var status = xhr.status; if (status === 200) { document.getElementById("elmLoader").innerHTML = ''; callback(null, xhr.response); } else { callback(status, xhr.response); } }; xhr.send(); } // getNextMsgCounts function getNextMsgCounts(chatsData, i, from_id) { var counts = 0; while (chatsData[i]) { if (chatsData[i + 1] && chatsData[i + 1]["from_id"] == from_id) { counts++; i++; } else { break; } } return counts; } //getNextMsgs function getNextMsgs(chatsData, i, from_id, isContinue) { var msgs = 0; while (chatsData[i]) { if (chatsData[i + 1] && chatsData[i + 1]["from_id"] == from_id) { msgs = getMsg(chatsData[i + 1].id, chatsData[i + 1].msg, chatsData[i + 1].has_images, chatsData[i + 1].has_files, chatsData[i + 1].has_dropDown); i++; } else { break; } } return msgs; } // getMeg function getMsg(id, msg, has_images, has_files, has_dropDown) { var msgHTML = '
    '; if (msg != null) { msgHTML += '

    ' + msg + "

    "; } else if (has_images && has_images.length > 0) { msgHTML += '
    '; for (i = 0; i < has_images.length; i++) { msgHTML += '
    \
    \ \ \ \
    \ \
    '; } msgHTML += "
    "; } else if (has_files.length > 0) { msgHTML += '
    \
    \
    \
    \
    \ \
    \
    \
    \
    \
    design-phase-1-approved.pdf
    \

    12.5 MB

    \
    \
    \
    \
    \
    \ \ \ \
    \
    \
    \
    \
    \
    '; } if (has_dropDown === true) { msgHTML += '' } msgHTML += '
    '; return msgHTML; } function updateSelectedChat() { if (currentSelectedChat == "users") { document.getElementById("channel-chat").style.display = "none"; document.getElementById("users-chat").style.display = "block"; getChatMessages(url + "chats.json"); } else { document.getElementById("channel-chat").style.display = "block"; document.getElementById("users-chat").style.display = "none"; getChatMessages(url + "chats.json"); } } updateSelectedChat(); //Chat Message function getChatMessages(jsonFileUrl) { getJSONFile(jsonFileUrl, function (err, data) { if (err !== null) { console.log("Something went wrong: " + err); } else { var chatsData = currentSelectedChat == "users" ? data[0].chats : data[0].channel_chat; document.getElementById( currentSelectedChat + "-conversation" ).innerHTML = ""; var isContinue = 0; chatsData.forEach(function (isChat, index) { if (isContinue > 0) { isContinue = isContinue - 1; return; } var isAlighn = isChat.from_id == userChatId ? " right" : " left"; var user = usersList.find(function (list) { return list.id == isChat.to_id; }); var msgHTML = '
  • \
    '; if (userChatId != isChat.from_id) msgHTML += '
    '; msgHTML += '
    '; msgHTML += getMsg(isChat.id, isChat.msg, isChat.has_images, isChat.has_files, isChat.has_dropDown); if (chatsData[index + 1] && isChat.from_id == chatsData[index + 1]["from_id"]) { isContinue = getNextMsgCounts(chatsData, index, isChat.from_id); msgHTML += getNextMsgs(chatsData, index, isChat.from_id, isContinue); } msgHTML += '
    '+user.name+''+ isChat.datetime + '
    '; msgHTML += "
    \
    \
  • "; document.getElementById(currentSelectedChat + "-conversation").innerHTML += msgHTML; }); } deleteMessage(); deleteChannelMessage(); deleteImage(); replyMessage(); replyChannelMessage(); copyMessage(); copyChannelMessage(); copyClipboard(); scrollToBottom("users-chat"); updateLightbox(); }); } // GLightbox Popup function updateLightbox() { var lightbox = GLightbox({ selector: ".popup-img", title: false, }); } // // Scroll to Bottom function scrollToBottom(id) { setTimeout(function () { var simpleBar = (document.getElementById(id).querySelector("#chat-conversation .simplebar-content-wrapper")) ? document.getElementById(id).querySelector("#chat-conversation .simplebar-content-wrapper") : '' var offsetHeight = document.getElementsByClassName("chat-conversation-list")[0] ? document.getElementById(id).getElementsByClassName("chat-conversation-list")[0].scrollHeight - window.innerHeight + 335 : 0; if (offsetHeight) simpleBar.scrollTo({ top: offsetHeight, behavior: "smooth" }); }, 100); } //chat form var chatForm = document.querySelector("#chatinput-form"); var chatInput = document.querySelector("#chat-input"); var chatInputfeedback = document.querySelector(".chat-input-feedback"); function currentTime() { var ampm = new Date().getHours() >= 12 ? "pm" : "am"; var hour = new Date().getHours() > 12 ? new Date().getHours() % 12 : new Date().getHours(); var minute = new Date().getMinutes() < 10 ? "0" + new Date().getMinutes() : new Date().getMinutes(); if (hour < 10) { return "0" + hour + ":" + minute + " " + ampm; } else { return hour + ":" + minute + " " + ampm; } } setInterval(currentTime, 1000); var messageIds = 0; if (chatForm) { //add an item to the List, including to local storage chatForm.addEventListener("submit", function (e) { e.preventDefault(); var chatId = currentChatId; var chatReplyId = currentChatId; var chatInputValue = chatInput.value if (chatInputValue.length === 0) { chatInputfeedback.classList.add("show"); setTimeout(function () { chatInputfeedback.classList.remove("show"); }, 2000); } else { if (isreplyMessage == true) { getReplyChatList(chatReplyId, chatInputValue); isreplyMessage = false; } else { getChatList(chatId, chatInputValue); } scrollToBottom(chatId || chatReplyId); } chatInput.value = ""; //reply msg remove textarea document.getElementById("close_toggle").click(); }) } //user Name and user Profile change on click function chatSwap() { document.querySelectorAll("#userList li").forEach(function (item) { item.addEventListener("click", function () { currentSelectedChat = "users"; updateSelectedChat(); currentChatId = "users-chat"; var contactId = item.getAttribute("id"); var username = item.querySelector(".text-truncate").innerHTML; document.querySelector(".user-chat-topbar .text-truncate .username").innerHTML = username; document.querySelector(".profile-offcanvas .username").innerHTML = username; if (isreplyMessage == true) { isreplyMessage = false; document.querySelector(".replyCard").classList.remove("show"); } if (document.getElementById(contactId).querySelector(".userprofile")) { var userProfile = document.getElementById(contactId).querySelector(".userprofile").getAttribute("src"); document.querySelector(".user-chat-topbar .avatar-xs").setAttribute("src", userProfile); document.querySelector(".profile-offcanvas .avatar-lg").setAttribute("src", userProfile); } else { document.querySelector(".user-chat-topbar .avatar-xs").setAttribute("src", dummyUserImage); document.querySelector(".profile-offcanvas .avatar-lg").setAttribute("src", dummyUserImage); } var conversationImg = document.getElementById("users-conversation"); conversationImg.querySelectorAll(".left .chat-avatar").forEach(function (item) { if (userProfile) { item.querySelector("img").setAttribute("src", userProfile); } else { item.querySelector("img").setAttribute("src", dummyUserImage); } }); window.stop(); }); }); //channel Name and channel Profile change on click document.querySelectorAll("#channelList li").forEach(function (item) { item.addEventListener("click", function () { currentChatId = "channel-chat"; currentSelectedChat = "channel"; updateSelectedChat(); var channelname = item.querySelector(".text-truncate").innerHTML; var changeChannelName = document.getElementById("channel-chat"); changeChannelName.querySelector(".user-chat-topbar .text-truncate .username").innerHTML = channelname; document.querySelector(".profile-offcanvas .username").innerHTML = channelname; changeChannelName.querySelector(".user-chat-topbar .avatar-xs").setAttribute("src", dummyMultiUserImage); document.querySelector(".profile-offcanvas .avatar-lg").setAttribute("src", dummyMultiUserImage); if (isreplyMessage == true) { isreplyMessage = false; document.querySelector(".replyCard").classList.remove("show"); } }); }); }; //Copy Message to clipboard var itemList = document.querySelector(".chat-conversation-list"); function copyMessage() { var copyMessage = itemList.querySelectorAll(".copy-message"); copyMessage.forEach(function (item) { item.addEventListener("click", function () { var isText = item.closest(".ctext-wrap").children[0] ? item.closest(".ctext-wrap").children[0].children[0].innerText : ""; navigator.clipboard.writeText(isText); }); }); } function copyChannelMessage() { var copyChannelMessage = channelItemList.querySelectorAll(".copy-message"); copyChannelMessage.forEach(function (item) { item.addEventListener("click", function () { var isText = item.closest(".ctext-wrap").children[0] ? item.closest(".ctext-wrap").children[0].children[0].innerText : ""; navigator.clipboard.writeText(isText); }); }); } //Copy Message Alert function copyClipboard() { var copyClipboardAlert = document.querySelectorAll(".copy-message"); copyClipboardAlert.forEach(function (item) { item.addEventListener("click", function () { document.getElementById("copyClipBoard").style.display = "block"; document.getElementById("copyClipBoardChannel").style.display = "block"; setTimeout(hideclipboard, 1000); function hideclipboard() { document.getElementById("copyClipBoard").style.display = "none"; document.getElementById("copyClipBoardChannel").style.display = "none"; } }); }); } //Delete Message function deleteMessage() { var deleteItems = itemList.querySelectorAll(".delete-item"); deleteItems.forEach(function (item) { item.addEventListener("click", function () { item.closest(".user-chat-content").childElementCount == 2 ? item.closest(".chat-list").remove() : item.closest(".ctext-wrap").remove(); }); }); } //Delete Image function deleteImage() { var deleteImage = itemList.querySelectorAll(".chat-conversation-list .chat-list"); deleteImage.forEach(function (item) { item.querySelectorAll(".delete-image").forEach(function (subitem) { subitem.addEventListener("click", function () { subitem.closest(".message-img").childElementCount == 1 ? subitem.closest(".chat-list").remove() : subitem.closest(".message-img-list").remove(); }); }); }); } deleteImage(); //Delete Channel Message var channelItemList = document.querySelector("#channel-conversation"); function deleteChannelMessage() { channelChatList = channelItemList.querySelectorAll(".delete-item"); channelChatList.forEach(function (item) { item.addEventListener("click", function () { item.closest(".user-chat-content").childElementCount == 2 ? item.closest(".chat-list").remove() : item.closest(".ctext-wrap").remove(); }); }); } deleteChannelMessage(); //Reply Message function replyMessage() { var replyMessage = itemList.querySelectorAll(".reply-message"); var replyToggleOpen = document.querySelector(".replyCard"); var replyToggleClose = document.querySelector("#close_toggle"); replyMessage.forEach(function (item) { item.addEventListener("click", function () { isreplyMessage = true; replyToggleOpen.classList.add("show"); replyToggleClose.addEventListener("click", function () { replyToggleOpen.classList.remove("show"); }); var replyMsg = item.closest(".ctext-wrap").children[0].children[0].innerText; document.querySelector(".replyCard .replymessage-block .flex-grow-1 .mb-0").innerText = replyMsg; var replyuser = document.querySelector(".user-chat-topbar .text-truncate .username").innerHTML; var msgOwnerName = (item.closest(".chat-list")) ? item.closest(".chat-list").classList.contains("left") ? replyuser : 'You' : replyuser; document.querySelector(".replyCard .replymessage-block .flex-grow-1 .conversation-name").innerText = msgOwnerName; }); }); } //reply Channelmessage function replyChannelMessage() { var replyChannelMessage = channelItemList.querySelectorAll(".reply-message"); var replyChannelToggleOpen = document.querySelector(".replyCard"); var replyChannelToggleClose = document.querySelector("#close_toggle"); replyChannelMessage.forEach(function (item) { item.addEventListener("click", function () { isreplyMessage = true; replyChannelToggleOpen.classList.add("show"); replyChannelToggleClose.addEventListener("click", function () { replyChannelToggleOpen.classList.remove("show"); }); var replyChannelMsg = item.closest(".ctext-wrap").children[0].children[0].innerText; document.querySelector(".replyCard .replymessage-block .flex-grow-1 .mb-0").innerText = replyChannelMsg; var replyChanneluser = item.closest(".user-chat-content").querySelector(".conversation-name .name").innerText; var msgOwnerName = (item.closest(".chat-list")) ? item.closest(".chat-list").classList.contains("left") ? replyChanneluser : 'You' : replyChanneluser; document.querySelector(".replyCard .replymessage-block .flex-grow-1 .conversation-name").innerText = msgOwnerName; }); }); } //Append New Message var getChatList = function (chatid, chatItems) { messageIds++; var chatConList = document.getElementById(chatid); var itemList = chatConList.querySelector(".chat-conversation-list"); if (chatItems != null) { itemList.insertAdjacentHTML( "beforeend", '
  • \
    \
    \
    \
    \

    \ ' + chatItems + '\

    \
    \ \
    \
    \ ' + currentTime() + '\ \
    \
    \
    \
  • ' ); } // remove chat list var newChatList = document.getElementById("chat-list-" + messageIds); newChatList.querySelectorAll(".delete-item").forEach(function (subitem) { subitem.addEventListener("click", function () { itemList.removeChild(newChatList); }); }); //Copy Message newChatList.querySelectorAll(".copy-message").forEach(function (subitem) { subitem.addEventListener("click", function () { var currentValue = newChatList.childNodes[1].firstElementChild.firstElementChild .firstElementChild.firstElementChild.innerText; navigator.clipboard.writeText(currentValue); }); }); //Copy Clipboard alert newChatList.querySelectorAll(".copy-message").forEach(function (subitem) { subitem.addEventListener("click", function () { document.getElementById("copyClipBoard").style.display = "block"; setTimeout(hideclipboardNew, 1000); function hideclipboardNew() { document.getElementById("copyClipBoard").style.display = "none"; } }); }); //reply Message model newChatList.querySelectorAll(".reply-message").forEach(function (subitem) { subitem.addEventListener("click", function () { var replyToggleOpenNew = document.querySelector(".replyCard"); var replyToggleCloseNew = document.querySelector("#close_toggle"); var replyMessageNew = subitem.closest(".ctext-wrap").children[0].children[0].innerText; var replyUserNew = document.querySelector(".replyCard .replymessage-block .flex-grow-1 .conversation-name").innerHTML; isreplyMessage = true; replyToggleOpenNew.classList.add("show"); replyToggleCloseNew.addEventListener("click", function () { replyToggleOpenNew.classList.remove("show"); }); var msgOwnerName = (subitem.closest(".chat-list")) ? subitem.closest(".chat-list").classList.contains("left") ? replyUserNew : 'You' : replyUserNew; document.querySelector(".replyCard .replymessage-block .flex-grow-1 .conversation-name").innerText = msgOwnerName; document.querySelector(".replyCard .replymessage-block .flex-grow-1 .mb-0").innerText = replyMessageNew; }); }); }; var messageboxcollapse = 0; //message with reply var getReplyChatList = function (chatReplyId, chatReplyItems) { var chatReplyUser = document.querySelector(".replyCard .replymessage-block .flex-grow-1 .conversation-name").innerHTML; var chatReplyMessage = document.querySelector(".replyCard .replymessage-block .flex-grow-1 .mb-0").innerText; messageIds++; var chatreplyConList = document.getElementById(chatReplyId); var itemReplyList = chatreplyConList.querySelector(".chat-conversation-list"); if (chatReplyItems != null) { itemReplyList.insertAdjacentHTML( "beforeend", '
  • \
    \
    \
    \
    \
    \
    \
    ' + chatReplyUser + '
    \

    ' + chatReplyMessage + '

    \
    \
    \ \
    \
    \

    \ ' + chatReplyItems + '\

    \
    \ \
    \
    \ ' + currentTime() + '\ \
    \
    \
    \
  • ' ); messageboxcollapse++; } // remove chat list var newChatList = document.getElementById("chat-list-" + messageIds); newChatList.querySelectorAll(".delete-item").forEach(function (subitem) { subitem.addEventListener("click", function () { itemList.removeChild(newChatList); }); }); //Copy Clipboard alert newChatList.querySelectorAll(".copy-message").forEach(function (subitem) { subitem.addEventListener("click", function () { document.getElementById("copyClipBoard").style.display = "block"; document.getElementById("copyClipBoardChannel").style.display = "block"; setTimeout(hideclipboardNew, 1000); function hideclipboardNew() { document.getElementById("copyClipBoard").style.display = "none"; document.getElementById("copyClipBoardChannel").style.display = "none"; } }); }); newChatList.querySelectorAll(".reply-message").forEach(function (subitem) { subitem.addEventListener("click", function () { var replyMessage = subitem.closest(".ctext-wrap").children[0].children[0].innerText; var replyuser = document.querySelector(".user-chat-topbar .text-truncate .username").innerHTML; document.querySelector(".replyCard .replymessage-block .flex-grow-1 .mb-0").innerText = replyMessage; var msgOwnerName = (subitem.closest(".chat-list")) ? subitem.closest(".chat-list").classList.contains("left") ? replyuser : 'You' : replyuser; document.querySelector(".replyCard .replymessage-block .flex-grow-1 .conversation-name").innerText = msgOwnerName; }); }); //Copy Message newChatList.querySelectorAll(".copy-message").forEach(function (subitem) { subitem.addEventListener("click", function () { newChatList.childNodes[1].children[1].firstElementChild.firstElementChild.getAttribute("id"); isText = newChatList.childNodes[1].children[1].firstElementChild.firstElementChild.innerText; navigator.clipboard.writeText(isText); }); }); }; var emojiPicker = new FgEmojiPicker({ trigger: [".emoji-btn"], removeOnSelection: false, closeButton: true, position: ["top", "right"], preFetch: true, dir: "build/js/pages/plugins/json", insertInto: document.querySelector(".chat-input"), }); // emojiPicker position var emojiBtn = document.getElementById("emoji-btn"); emojiBtn.addEventListener("click", function () { setTimeout(function () { var fgEmojiPicker = document.getElementsByClassName("fg-emoji-picker")[0]; if (fgEmojiPicker) { var leftEmoji = window.getComputedStyle(fgEmojiPicker) ? window.getComputedStyle(fgEmojiPicker).getPropertyValue("left") : ""; if (leftEmoji) { leftEmoji = leftEmoji.replace("px", ""); leftEmoji = leftEmoji - 40 + "px"; fgEmojiPicker.style.left = leftEmoji; } } }, 0); }); })(); //Search Message function searchMessages() { var searchInput, searchFilter, searchUL, searchLI, a, i, txtValue; searchInput = document.getElementById("searchMessage"); searchFilter = searchInput.value.toUpperCase(); searchUL = document.getElementById("users-conversation"); searchLI = searchUL.getElementsByTagName("li"); Array.from(searchLI).forEach(function (search) { a = search.getElementsByTagName("p")[0] ? search.getElementsByTagName("p")[0] : ''; txtValue = a.textContent || a.innerText ? a.textContent || a.innerText : ''; if (txtValue.toUpperCase().indexOf(searchFilter) > -1) { search.style.display = ""; } else { search.style.display = "none"; } }); }; // chat-conversation var scrollEl = new SimpleBar(document.getElementById('chat-conversation')); scrollEl.getScrollElement().scrollTop = document.getElementById("users-conversation").scrollHeight;