1function formatDate(d) { 2 if (!d) return ''; 3 var dateObj = (d instanceof Date) ? d : new Date(d); 4 if (isNaN(dateObj.getTime())) { 5 if (typeof d === 'string') { 6 var t = d.split(/[- :]/); 7 if (t.length >= 6) { 8 dateObj = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]); 9 } 10 } 11 } 12 if (isNaN(dateObj.getTime())) return d; 13 14 var day = String(dateObj.getDate()).padStart(2, '0'); 15 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; 16 var month = months[dateObj.getMonth()]; 17 var year = dateObj.getFullYear(); 18 19 var hours = dateObj.getHours(); 20 var ampm = hours >= 12 ? 'PM' : 'AM'; 21 hours = hours % 12; 22 hours = hours ? hours : 12; 23 var minutes = String(dateObj.getMinutes()).padStart(2, '0'); 24 25 return day + ' ' + month + ' ' + year + ', ' + hours + ':' + minutes + ' ' + ampm; 26} 27 28(function ($) { 29 $(document).ready(function () { 30 // Always attach botsessionid to all AJAX requests 31 $(document).ajaxSend(function (event, jqxhr, settings) { 32 try { 33 const key = wbca_conf.botSessionKey || 'botsessionid'; 34 const botSessionId = localStorage.getItem(key); 35 36 if (botSessionId) { 37 if (typeof settings.data === 'string') { 38 // Append to existing data 39 settings.data += '&botsessionid=' + encodeURIComponent(botSessionId); 40 } else if (typeof settings.data === 'object') { 41 // For FormData or object-style data 42 settings.data = settings.data || {}; 43 settings.data.botsessionid = botSessionId; 44 } 45 } 46 const email = sessionStorage.getItem('wbca_user_email'); 47 const name = sessionStorage.getItem('wbca_user_name'); 48 if (email && name) { 49 if (typeof settings.data === 'string') { 50 settings.data += '&wbca_signup_email=' + encodeURIComponent(email); 51 settings.data += '&wbca_signup_fullname=' + encodeURIComponent(name); 52 } 53 } 54 } catch (e) { 55 console.warn('Could not attach botsessionid:', e); 56 } 57 }); 58 }); 59})(jQuery); 60jQuery(document).ready(function($) { 61 const userId = $('#input_wbca_editor').data('clientid'); // already set in your markup 62 63 64 65 function appendAgentMessage(chat) { 66 const chatBody = $('#wbca_chat_body'); 67 const messageHtml = ` 68 <div class="wbca_client_message_row wbca_message_row wbca-clear"> 69 <div class="wbca_image leftImage"> 70 <img src="${chat.avatar}" alt="${chat.operatorname}" /> 71 </div> 72 <div class="wbcaMessage leftMessage"> 73 <div class="wbcaContent">${chat.message}</div> 74 <div class="ui list right aligned"> 75 <span>${chat.chat_time}</span> 76 </div> 77 </div> 78 </div> 79 `; 80 81 chatBody.append(messageHtml); 82 chatBody.scrollTop(chatBody.prop("scrollHeight")); 83 } 84 85 // Start polling when page loads 86 87}); 88 89(function ($) { 90 91 $(document).ready(function () { 92 var ClientChatStored = []; 93 var ChatIdStored = []; 94 var NotifyUserID = []; 95 var ChatCached = ""; 96 var RequestState1 = true; 97 var RequestState2 = true; 98 var notifyInterval, showNotifyInterval, chatRefresh; 99 var lastLoadedMessageId = 0; 100 var AjaxChat = { 101 102 wbcaInit: function () { 103 var self = $(this); 104 this.LoadChatWindow(); 105 this.eventHandler(); 106 this.submitMessage(); 107 this.submitFile(); 108 this.notificationAtTitle(); 109 this.resizewindow(); 110 }, 111 112 registerNewUser: function () { 113 var error = false, 114 fullName = $('#wbca_signup_fullname').val(), 115 selected_department = $('.livechat-select-department').val(), 116 email = $('#wbca_signup_email').val(); 117 118 if(!fullName){ 119 $('#wbca_signup_fulnlame').css('border-color','#ff0000'); 120 error = true; 121 } 122 if(!email){ 123 $('#wbca_signup_email').css('border-color','#ff0000'); 124 error = true; 125 } 126 var e=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i; 127 if(!e.test(email)){ 128 $('#wbca_signup_email').css('border-color','#ff0000'); 129 error = true; 130 } 131 if(!error){ 132 // $('#wbca_signup_submit').append('<i class="wbca_spinnerx16 wbca_btn_spin"></i>'); 133 $('#wbca_signup_submit').prop('disabled', true); 134 135 $.ajax({ 136 url: wbca_conf.ajaxURL, 137 type: "POST", 138 dataType: "JSON", 139 data:{ 140 action : wbca_conf.ajaxActions.wbca_register_user.action, 141 nonce : wbca_conf.ajaxNonce, 142 wbca_signup_email : email, 143 wbca_signup_fullname : fullName, 144 selected_department: selected_department, 145 }, 146 success: function(data) { 147 var chatbox = $(data.wbca_chatbox), 148 ClientID = data.wbca_userid; 149 if (data.session_data) { 150 151 sessionStorage.setItem('wbca_user_id', data.session_data.user_id
151); 152 sessionStorage.setItem('wbca_user_email', data.session_data.email); 153 sessionStorage.setItem('wbca_user_name', data.session_data.name); 154 155 //console.log('User session saved:', data.session_data); 156 } 157 if($.inArray(ClientID, ClientChatStored) == -1){ 158 ClientChatStored.push(ClientID); 159 AjaxChat.setActiveChat(ClientID); 160 } 161 /*$('.wbcaTitle span:first-child').after('<span class="chatCloseIcon" data-clientid="'+ClientID+'" data-event="close-chat-window">×</span>');*/ 162 163 164 var maincontainerheight = (jQuery('.'+wbca_conf.mainContainer).height() - 30); 165 166 chatbox.find('.wbcaBody').css( "height", maincontainerheight+"px" ); 167 chatbox.find('#wbca_chat_body').css( "height", (maincontainerheight-63)+"px" ); 168 169 170 $('.wbcaBody').html(chatbox.html()) 171 .delay(500, "steps") 172 .queue("steps", function(next) { 173 $('#wbca_chat_body').prepend('<div id="wbca_type_suggest"><p>'+wbca_conf.chatType+'</p></div>'); 174 $('#wbca_type_suggest').slideToggle('slow'); 175 next(); 176 }) 177 .delay(50000, "steps") 178 .queue("steps", function(next) { 179 $('#wbca_type_suggest').slideToggle('slow'); 180 next(); 181 }) 182 .dequeue( "steps" ); 183 184 }, 185 complete: function() { 186 } 187 }); 188 } 189 }, 190 191 offlineMessage: function () { 192 var error = false, 193 name = $('#wbca_message_fullname').val(), 194 email = $('#wbca_message_email').val(), 195 message = $('#wbca_message').val(); 196 197 if(!name){ 198 $('#wbca_message_fullname').css('border-color','#ff0000'); 199 error = true; 200 } 201 if(!email){ 202 $('#wbca_message_email').css('border-color','#ff0000'); 203 error = true; 204 } 205 var e=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i; 206 if(!e.test(email)){ 207 $('#wbca_message_email').css('border-color','#ff0000'); 208 error = true; 209 } 210 if(!message){ 211 $('#wbca_message').css('border-color','#ff0000'); 212 error = true; 213 } 214 if(!error){ 215 $('#wbca_message_submit').append('<i class="wbca_spinnerx16 wbca_btn_spin"></i>'); 216 $('#wbca_message_submit').prop('disabled', true); 217 $.ajax({ 218 url: wbca_conf.ajaxURL, 219 type: "POST", 220 dataType: "JSON", 221 data:{ 222 action : wbca_conf.ajaxActions.wbca_offline_message.action, 223 nonce : wbca_conf.ajaxNonce, 224 wbca_message_fullname : name, 225 wbca_message_email : email, 226 wbca_message : message 227 }, 228 success: function(data) { 229 var msg = data.wbca_msg; 230 if(data.error == false){ 231 $('#wbca_message_fullname').val(''); 232 $('#wbca_message_email').val(''); 233 $('#wbca_message').val(''); 234 } 235 $('#wbca_msg_notify').html(msg).slideToggle('slow') 236 .delay(4000, "steps") 237 .queue("steps", function(next) { 238 $('#wbca_msg_notify').slideToggle('slow'); 239 next(); 240 }) 241 .dequeue( "steps" ); 242 243 $('#wbca_message_submit i').remove(); 244 $('#wbca_message_submit').prop('disabled', false); 245 }, 246 complete: function() { 247 248 } 249 }); 250 } 251 }, 252 253 LoadChatWindow: function () { 254 $.ajax({ 255 url: wbca_conf.ajaxURL, 256 type: "POST", 257 dataType: "JSON", 258 data: { 259 action : wbca_conf.ajaxActions.wbca_load_wbca_window.action, 260 nonce : wbca_conf.ajaxNonce 261 }, 262 success: function(data) { 263 //alert('I am here'); 264 var bodydata = $(data.wbca_window), 265 session = data.wbca_session; 266 var title = data.title; 267 var maincontainerheight = (jQuery('.'+wbca_conf.mainContainer).height() - 30); 268 //bodydata.find('#wbca_chat_body').css( "height", maincontainerheight+"px" ); 269 bodydata.find('.wbcaBody').css( "height", maincontainerheight+"px" ); 270 bodydata.find('#wbca_chat_body').css( "height", (maincontainerheight-63)+"px" ); 271 $("."+wbca_conf.mainContainer).append(bodydata.html()); 272 //$("#wpbot-live-chat-header").append(' - '+title); 273 if(session == 1){ 274 AjaxChat.initializeActiveChats(); 275 } 276 }, 277 complete: function() { 278 chatRefresh = setTimeout(AjaxChat.loadChatRow, wbca_conf.chatRate); 279 RequestState1 = true; 280 281 } 282 }); 283 284 }, 285 286 eventHandler: function () { 287 288 $(document).on("submit",'#wbca_signup_form', function (e) { 289 e.preventDefault(); 290 AjaxChat.registerNewUser(); 291 return false;
292 }) 293 294 $("body").on("click", "button[data-event]", function (event){ 295 //event.preventDefault(); 296 var Event = $(this).attr("data-event"); 297 298 switch(Event) { 299 case "close-chat-window": 300 var clientID = $('#wbca_chat_body').attr("data-clientid"); 301 ClientChatStored.remove(clientID); 302 $("#wbca_chat_body").html(''); 303 $.ajax({ 304 url: wbca_conf.ajaxURL, 305 type: "POST", 306 dataType: "JSON", 307 data: { 308 cr_clientid: clientID, 309 action : wbca_conf.ajaxActions.wbca_remove_active_chat.action, 310 nonce : wbca_conf.ajaxNonce 311 }, 312 success: function(data) { } 313 }); 314 break; 315 316 case "open-chat-window": 317 if(wbca_conf.chatStyle == 'style_1'){ 318 var holder = $("#wbcaChatWindow").attr("data-window-state"); 319 if(holder=="0"){ 320 $("#wbcaChatWindow").slideDown("slow"); 321 $(".listOpenIcon").html("∨"); 322 $("#wbcaChatWindow").attr("data-window-state", "1"); 323 $(".wbcaBodyHolder").attr("data-window-state", "1"); 324 }else{ 325 $("#wbcaChatWindow").slideUp("slow"); 326 $(".listOpenIcon").html("∧"); 327 $("#wbcaChatWindow").attr("data-window-state", "0"); 328 $(".wbcaBodyHolder").attr("data-window-state", "0"); 329 } 330 }else{ 331 if($(window).width() < 768){ 332 var holder = $("#wbcaChatWindow").attr("data-window-state"); 333 if(holder=="0"){ 334 $("#wbcaChatWindow").slideDown("slow"); 335 $(".listOpenIcon").html("∨"); 336 $("#wbcaChatWindow").attr("data-window-state", "1"); 337 $(".wbcaBodyHolder").attr("data-window-state", "1"); 338 }else{ 339 $("#wbcaChatWindow").slideUp("slow"); 340 $(".listOpenIcon").html("∧"); 341 $("#wbcaChatWindow").attr("data-window-state", "0"); 342 $(".wbcaBodyHolder").attr("data-window-state", "0"); 343 } 344 }else{ 345 var holder = $(".wbcaBodyHolder").attr("data-window-state"); 346 if(holder=="0"){ 347 $(".wbcaBodyHolder").slideDown("slow"); 348 $(".listOpenIcon").html("∨"); 349 $("#wbcaChatWindow").attr("data-window-state", "1"); 350 $(".wbcaBodyHolder").attr("data-window-state", "1"); 351 }else{ 352 $(".wbcaBodyHolder").slideUp("slow"); 353 $(".listOpenIcon").html("∧"); 354 $("#wbcaChatWindow").attr("data-window-state", "0"); 355 $(".wbcaBodyHolder").attr("data-window-state", "0"); 356 } 357 } 358 359 } 360 break; 361 362 case "open-mobile-chat-window": 363 var holder = $("#wbcaChatWindow").attr("data-window-state"); 364 if(holder=="0"){ 365 $("#wbcaChatWindow").slideDown("slow"); 366 $(".listOpenIcon").html("∨"); 367 $("#wbcaChatWindow").attr("data-window-state", "1"); 368 $(".wbcaBodyHolder").attr("data-window-state", "1"); 369 }else{ 370 $("#wbcaChatWindow").slideUp("slow"); 371 $(".listOpenIcon").html("∧"); 372 $("#wbcaChatWindow").attr("data-window-state", "0"); 373 $(".wbcaBodyHolder").attr("data-window-state", "0"); 374 } 375 376 break; 377 378 case "offline-message": 379 AjaxChat.offlineMessage(); 380 break; 381 382 } 383 }); 384 385 }, 386 387 setActiveChat: function(ClientID){ 388 var nVer = navigator.appVersion; 389 var nAgt = navigator.userAgent; 390 var browserName = navigator.appName; 391 var nameOffset,verOffset,ix; 392 // In Opera, the true version is after "Opera" or after "Version" 393 if ((verOffset=nAgt.indexOf("Opera"))!=-1) { 394 browserName = "Opera"; 395 fullVersion = nAgt.substring(verOffset+6); 396 if ((verOffset=nAgt.indexOf("Version"))!=-1) 397 fullVersion = nAgt.substring(verOffset+8); 398 } 399 // In MSIE, the true version is after "MSIE" in userAgent 400 else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) { 401 browserName = "Microsoft Internet Explorer"; 402 fullVersion = nAgt.substring(verOffset+5); 403 } 404 // In Chrome, the true version is after "Chrome" 405 else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) { 406 browserName = "Chrome"; 407 fullVersion = nAgt.substring(verOffset+7); 408 } 409 // In Safari, the true version is after "Safari" or after "Version" 410 else if ((verOffset=nAgt.indexOf("Safari"))!=-1) { 411 browserName = "Safari"; 412 fullVersion = nAgt.substring(verOffset+7); 413 if ((verOffset=nAgt.indexOf("Version"))!=-1) 414 fullVersion = nAgt.substring(verOffset+8); 415 } 416 // In Firefox, the true version is after "Firefox" 417 else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) { 418 browserName = "Firefox"; 419 fullVersion = nAgt.substring(verOffset+8); 420 } 421 // In most other browsers, "name/version" is at the end of userAgent 422 else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < 423 (verOffset=nAgt.lastIndexOf('/')) ) 424 { 425 browserName = nAgt.substring(nameOffset,verOffset); 426 fullVersion = nAgt.substring(verOffset+1); 427 if (browserName.toLowerCase()==browserName.toUpperCase()) { 428 browserName = navigator.appName; 429 } 430 } 431 432 433 { 434 var OSName = "Unknown OS"; 435 if (navigator.userAgent.indexOf("Win") != -1) OSName = "Windows"; 436 if (navigator.userAgent.indexOf("Mac") != -1) OSName = "Macintosh"; 437 if (navigator.userAgent.indexOf("Linux") != -1) OSName = "Linux"; 438 if (navigator.userAgent.indexOf("Android") != -1) OSName = "Android"; 439 if (navigator.userAgent.indexOf("like Mac") != -1) OSName = "iOS"; 440 } 441 $.ajax({ 442 url: wbca_conf.ajaxURL, 443 type: "POST", 444 dataType: "JSON", 445 data: { 446 cw_clientid: ClientID, 447 tz: Intl.DateTimeFormat().resolvedOptions().timeZone, 448 OSName: OSName, 449 browserName: browserName, 450 location: window.location.href, 451 userAgent: navigator.userAgent, 452 screen_resolution : window.screen.width * window.devicePixelRatio + ' : ' + window.screen.height * window.devicePixelRatio, 453 action : wbca_conf.ajaxActions.wbca_set_active_chat.action, 454 nonce : wbca_conf.ajaxNonce 455 }, 456 success: function(data) { }, 457 complete: function() { 458 RequestState5 = true; 459 } 460 }); 461 }, 462 463// ðµ Global variable to track last loaded message ID 464 465 466loadChatRow: function () { 467 let inactivityTimerFire = 0;
468 let chat_idle_time = 1; 469 470 if (RequestState1 === true) { 471 RequestState1 = false; 472 473 let ClientID = $("#wbca_chat_body").attr("data-clientid"); 474 let CurrentSessionID = $("#wbca_chat_body").attr("data-sessionid"); 475 476 $.ajax({ 477 url: wbca_conf.ajaxURL, 478 type: "POST", 479 dataType: "json", 480 data: { 481 action: wbca_conf.ajaxActions.wbca_load_client_chat.action, 482 nonce: wbca_conf.ajaxNonce, 483 wbca_clientID: ClientID, 484 botsessionid: CurrentSessionID 485 }, 486 487 success: function (data) { 488 if (!data || !data.wbca_client_chat) { 489 console.warn("No chat data returned."); 490 return; 491 } 492 493 const chatdata = data.wbca_client_chat; 494 chat_idle_time = data.chat_idle_time || 1; 495 496 // ð¢ Loop through ALL messages from server 497 (Array.isArray(chatdata) ? chatdata : Object.values(chatdata)).forEach(function (msg) { 498 499 // Convert ID properly 500 const msgID = parseInt(msg.id || 0); 501
502 // Skip if ID is invalid 503 if (!msgID) return; 504 505 // Skip duplicate or old messages 506 if (msgID <= lastLoadedMessageId) { 507 return; 508 } 509 510 // Skip other session messages 511 if (msg.session_id !== CurrentSessionID) { 512 return; 513 } 514 515 // Append NEW message 516 AjaxChat.appendMessageRow(msg); 517 518 // Update max ID 519 if (msgID > lastLoadedMessageId) { 520 lastLoadedMessageId = msgID; 521 } 522 }); 523 524 // Auto scroll after inserting new messages 525 const container = $("#wbca_chat_body"); 526 container.scrollTop(container.prop("scrollHeight")); 527 528 // Play sound 529 const audio = document.getElementById("wbca_alert"); 530 if (audio) audio.play(); 531 532 // Update operator online status logic (unchanged) 533 if ($('#wp-chatbot-board-container').hasClass('active-chat-board')) { 534 if (data.is_operator_online !== undefined && 535 data.is_operator_online !== globalwpw.settings.obj.is_operator_online) { 536 537 globalwpw.settings.obj.is_operator_online = data.is_operator_online; 538 539 if (data.is_operator_online !== 1) { 540 $('.qcld-chatbot-custom-intent, .wpbo_live_chat').hide(); 541 wpwKits.updateGlobalMenu(); 542 } else { 543 $('.qcld-chatbot-custom-intent, .wpbo_live_chat').show(); 544 wpwKits.updateGlobalMenu(); 545 } 546 } 547 } 548 }, 549 550 complete: function () { 551 // Idle timeout logic (unchanged) 552 if (chat_idle_time > 1199) { 553 inactivityTimerFire = 1; 554 555 $("#wbca_chat_body").removeAttr("data-clientid"); 556 $("#input_wbca_editor") 557 .addClass("bg-light-gray") 558 .attr("disabled", "disabled"); 559 560 $("#wbca_chat_body").append(` 561 <div class="chat-closed-text"> 562 <p><b>Chat was disconnected due to inactivity or no reply.</b></p> 563 <p class="qcld-livechat-reload"><i class="fa fa-refresh" aria-hidden="true"></i> Reload the page to start again.</p> 564 </div> 565 `); 566 567 let container = $("#wbca_chat_body"); 568 container.scrollTop(container.prop("scrollHeight")); 569 } 570 571 if (inactivityTimerFire === 0) { 572 chatRefresh = setTimeout(AjaxChat.loadChatRow, wbca_conf.chatRate); 573 RequestState1 = true; 574 } else { 575 setTimeout(AjaxChat.checkUserIdThenProcess, 5000); 576 } 577 }, 578 579 error: function (xhr, status, error) { 580 console.error("Chat AJAX error:", status, error); 581 RequestState1 = true; 582 setTimeout(AjaxChat.loadChatRow, 5000); 583 } 584 }); 585 } 586}, 587 588 589 590 591// â Reusable helper to append a message to chat UI 592appendMessageRow: function (object) { 593 if (!object || !object.message) return; 594 595 const operatorID = object.operatorid || 0; 596 const operatorName = object.operatorname || "Agent"; 597 const clientID = object.clientid || ""; 598 const message = object.message; 599 const chatTime = formatDate(object.chat_time) || ""; 600 const avatar = object.avatar || "https://www.gravatar.com/avatar/?d=mp&s=40"; 601 602 const Container = $("#wbca_chat_body"); 603 const CurrentHeight = $(Container).prop("scrollHeight"); 604 605 const chatContent = ` 606 <div class="wbca_admin_message_row wbca_message_row wbca-clear" 607 data-operatorname="${operatorName}" 608 data-operatorid="${operatorID}"> 609 <div class="wbca_image leftImage"> 610 <img src="${avatar}" /> 611 </div> 612 <div class="wbcaMessage leftMessage ui floating violet message"> 613 <div class="wbcaContent">${message}</div> 614 <div class="ui list right aligned"><span>${chatTime}</span></div> 615 </div> 616 </div> 617 `; 618 619 $(Container).append(chatContent); 620 621 // Auto-scroll 622 $(Container).scrollTop($(Container).prop("scrollHeight")); 623 624 // â Play alert sound if available 625 const audioplayer = document.getElementById("wbca_alert"); 626 if (audioplayer) { 627 try { audioplayer.play(); } catch (e) {} 628 } 629}, 630 631 //New function to check for active user for chat. 632 checkUserIdThenProcess: function(){ 633 634 var ClientID = $("#wbca_chat_body").attr("data-clientid"); 635 636 if( typeof ClientID == 'undefined' ){ 637 //console.log('Checking for active Chat.'); 638 setTimeout(AjaxChat.checkUserIdThenProcess, 5000); 639 } 640 else{ 641 //console.log('User is now active in the chat.'); 642 chatRefresh = setTimeout(AjaxChat.loadChatRow, wbca_conf.chatRate); 643 RequestState1 = true; 644 } 645 646 647 }, //New function ends. 19-04-2024 648 649 submitMessage: function () { 650 651 $("body").on("keyup", "[data-event=\"submit-client-chat\"]", function (e) { 652
653 if((e.keyCode == 13) ) { 654 var userImage = wbca_conf.avatar; 655 var d = new Date(); 656 var n = d.getTime(); 657 var Message = $.trim($(this).val()); 658 var ClientID = $('#wbca_chat_body').attr("data-clientid"); 659 let sessionId = localStorage.getItem('botsessionid'); 660 if (sessionId) { 661 $('#wbca_chat_body').attr('data-sessionid', sessionId); 662 } 663 //Print Client ID to Console 664 //console.log(sessionId) 665 //Print Client ID to Console 666 //console.log(ClientID) 667 668 var operatorID = 'none'; 669 var department_id = 0; 670 var dateTime = formatDate(d); 671 672 var Container = $("#wbca_chat_body"); 673 if($("#wbca_chat_body div.wbca_admin_message_row").length > 0){ 674 operatorID = $("#wbca_chat_body div.wbca_admin_message_row:last").attr("data-operatorid"); 675 } 676 //if( operatorID != 'none'){ 677 department_id = $('#wbca_chat_body').attr("data-departmet"); 678 //} 679 var user_icon_src = wbca_conf.wbcaUrl +'/images/client.png'; 680 681 var MessageStripped = Message.replace(/<(https?:\/\/[^>]+)>/gi, '$1'); 682 var escapedMessage = $('<div/>').text(MessageStripped).html(); 683 var msg = '<div class="wbca_client_message_row wbca_message_row wbca-clear"><div class="wbca_image rightImage"><img src="'+user_icon_src+'" /></div><div class="wbcaMessage rightMessage "><div class="wbcaContent">'+escapedMessage+'</div><div class="ui list right aligned"><span>'+ dateTime +'</span></div></div></div>'; 684 //var msg = '<div class="wbca_admin_message_row wbca_message_row wbca-clear"><div class="wbcaMessage rightMessage ui floating message"><div data-chatid="'+chatID+'" class="wbcaContent">'+Message+'</div></div></div><div class="date-user">'+ dateTime +'</div>'; 685 if(Message.length > 0) { 686 687 $(Container).append(msg); 688 $(Container).scrollTop($(Container).prop("scrollHeight")); 689 690 $.ajax({ 691 url: wbca_conf.ajaxURL, 692 type: "POST", 693 dataType: "JSON", 694 data: { 695 messageContent: Message, 696 receiverUserId: operatorID, 697 departmentId: department_id, 698 senderUserId: ClientID, 699 action : wbca_conf.ajaxActions.wbca_submit_client_message.action, 700 nonce : wbca_conf.ajaxNonce 701 }, 702 success: function(data) { 703 if(data.is_submit == 1 && $(".wbca_admin_message_row").length == 0){ 704 var operator = data.operator_info; 705 if(operator && data.opid == 'none'){ 706 var operatorID = operator.operatorid; 707 var operatorName = operator.operatorname; 708 var operatorBio = operator.operatorbio;
709 var message = wbca_conf.welcome+' '+operatorName+'. '; 710 var avatar = operator.avatar; 711 712 if(operatorID==0){ 713 message = wbca_conf.no_operator; 714 operatorBio = ''; 715 } 716 717 var chatContent = '<div class="wbca_admin_message_row wbca_message_row wbca-clear" data-operatorname="'+operatorName+'" data-operatorid="'+operatorID+'"><div class="wbca_image leftImage">'+avatar+'</div><div class="wbcaMessage leftMessage ui floating violet message"><div class="wbcaContent">'+message+operatorBio+'</div></div></div>'; 718 $("#wbca_chat_body").append(chatContent); 719 } 720 $("#wbca_chat_body").append('<div class="wbca_admin_message_row wbca_message_row wbca-hide" data-operatorid="'+data.operator_id+'"> </div>'); 721 var Container = $("#wbca_chat_body"); 722 var ScrollTop = $(Container).scrollTop(); 723 var CurrentHeight = $(Container).prop("scrollHeight"); 724 } 725 if(RequestState1 == true && data.is_submit == 1){ 726 if($.inArray(ClientID, ClientChatStored) == -1){ 727 ClientChatStored.push(ClientID); 728 AjaxChat.setActiveChat(ClientID); 729 } 730 AjaxChat.loadChatRow(); 731 } 732 } 733 }); 734 } 735 $(this).val(""); 736 } 737 }); 738 $("body").on("click", ".wbca_float_right_footer", function (e) { 739 740 var userImage = wbca_conf.avatar; 741 var d = new Date(); 742 var n = d.getTime(); 743 var Message = $.trim($("[data-event=\"submit-client-chat\"]").val()); 744 var ClientID = $('#wbca_chat_body').attr("data-clientid"); 745 //console.log(ClientID) 746 var operatorID = 'none'; 747 var department_id = 0; 748 var dateTime = formatDate(d); 749 750 var Container = $("#wbca_chat_body"); 751 if($("#wbca_chat_body div.wbca_admin_message_row").length > 0){ 752 operatorID = $("#wbca_chat_body div.wbca_admin_message_row:last").attr("data-operatorid"); 753 } 754 755 if( operatorID != 'none'){ 756 department_id = $('#wbca_chat_body').attr("data-departmet"); 757 } 758 var user_icon_src = wbca_conf.wbcaUrl +'/images/client.png'; 759 760 var MessageStripped = Message.replace(/<(https?:\/\/[^>]+)>/gi, '$1'); 761 var escapedMessage = $('<div/>').text(MessageStripped).html(); 762 var msg = '<div class="wbca_client_message_row wbca_message_row wbca-clear"><div class="wbca_image rightImage"><img src="'+user_icon_src+'" /></div><div class="wbcaMessage rightMessage "><div class="wbcaContent">'+escapedMessage+'</div><div class="ui list right aligned"><span>'+ dateTime +'</span></div></div></div>'; 763 //var msg = '<div class="wbca_admin_message_row wbca_message_row wbca-clear"><div class="wbcaMessage rightMessage ui floating message"><div data-chatid="'+chatID+'" class="wbcaContent">'+Message+'</div></div></div><div class="date-user">'+ dateTime +'</div>'; 764 765 if(Message.length > 0) { 766 $(Container).append(msg); 767 $(Container).scrollTop($(Container).prop("scrollHeight")); 768 $.ajax({ 769 url: wbca_conf.ajaxURL, 770 type: "POST", 771 dataType: "JSON", 772 data: { 773 messageContent: Message, 774 receiverUserId: operatorID, 775 departmentId: department_id, 776 senderUserId: ClientID, 777 action : wbca_conf.ajaxActions.wbca_submit_client_message.action, 778 nonce : wbca_conf.ajaxNonce 779 }, 780 success: function(data) { 781 if(data.is_submit == 1 && $(".wbca_admin_message_row").length == 0){ 782 var operator = data.operator_info; 783 if(operator && data.opid == 'none'){ 784 var operatorID = operator.operatorid; 785 var operatorName = operator.operatorname; 786 var operatorBio = operator.operatorbio;
787 var message = wbca_conf.welcome+' '+operatorName+'. '; 788 var avatar = operator.avatar; 789 790 if(operatorID==0){ 791 message = wbca_conf.no_operator; 792 operatorBio = ''; 793 } 794 795 var chatContent = '<div class="wbca_admin_message_row wbca_message_row wbca-clear" data-operatorname="'+operatorName+'" data-operatorid="'+operatorID+'"><div class="wbca_image leftImage">'+avatar+'</div><div class="wbcaMessage leftMessage ui floating violet message"><div class="wbcaContent">'+message+operatorBio+'</div></div></div>'; 796 $("#wbca_chat_body").append(chatContent); 797 } 798 $("#wbca_chat_body").append('<div class="wbca_admin_message_row wbca_message_row wbca-hide" data-operatorid="'+data.operator_id+'"> </div>'); 799 var Container = $("#wbca_chat_body"); 800 var ScrollTop = $(Container).scrollTop(); 801 var CurrentHeight = $(Container).prop("scrollHeight"); 802 } 803 if(RequestState1 == true && data.is_submit == 1){ 804 if($.inArray(ClientID, ClientChatStored) == -1){ 805 ClientChatStored.push(ClientID); 806 AjaxChat.setActiveChat(ClientID); 807 } 808 AjaxChat.loadChatRow(); 809 } 810 } 811 }); 812 } 813 $("[data-event=\"submit-client-chat\"]").val(""); 814 815 }); 816 817 }, 818 submitFile: function(){ 819 $("body").on('change', '#qclivechat_file', function (e) { 820 var ClientID = $('#wbca_chat_body').attr("data-clientid"); 821 var operatorID = 'none'; 822 var department_id = 0; 823 //var dateTime = d.getFullYear()+'-'+( d.getMonth() + 1)+'-'+d.getDate()+' '+ d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds(); 824 var Container = $("#wbca_chat_body"); 825 if($("#wbca_chat_body div.wbca_admin_message_row").length > 0){ 826 operatorID = $("#wbca_chat_body div.wbca_admin_message_row:last").attr("data-operatorid"); 827 } 828 $this = $(this); 829 file_data = $(this).prop('files')[0]; 830 form_data = new FormData(); 831 form_data.append('file', file_data); 832 form_data.append('receiverUserId', operatorID); 833 form_data.append('senderUserId', ClientID); 834 form_data.append('action', wbca_conf.ajaxActions.wbca_livechatfile_upload.action); 835 form_data.append('nonce', wbca_conf.ajaxNonce); 836 var Container = $("#wbca_chat_body"); 837 var uploading = '<div class="qcld_fileuploading">File uploading....</div>'; 838 Container.append('<div class="wbcaMessage">'+ uploading +'</div>'); 839 $.ajax({ 840 url: wbca_conf.ajaxURL, 841 type: 'POST', 842 contentType: false, 843 processData: false, 844 data: form_data, 845 success: function (data) { 846 function isJsonString(str) { 847 try { 848 JSON.parse(str); 849 } catch (e) { 850 return false; 851 } 852 return true; 853 } 854 var Container = $("#wbca_chat_body"); 855 var ScrollTop = $(Container).scrollTop(); 856 var CurrentHeight = $(Container).prop("scrollHeight"); 857 var user_icon_src = wbca_conf.wbcaUrl +'/images/client.png'; 858 if(isJsonString(data)){ 859 datas = JSON.parse(data); 860 }else{ 861 datas = data; 862 } 863 if(datas.message == 'file not supported'){ 864 Container.append('<div class="wbcaMessage"> ' + datas.message + '</div>'); 865 }else{ 866 Container.append('<div class="wbca_client_message_row wbca_message_row wbca-clear"><div class="wbca_image rightImage"><img src="'+user_icon_src+'" /></div><div class="wbcaMessage rightMessage"><div>' + data.message + '</div><div class="ui list right aligned"><span class="item">' + formatDate(datas.date) + '</span></div></div></div>'); 867 Container.scrollTop($(Container).prop("scrollHeight")); 868 869 if(RequestState1 == true && data.is_submit == 1){ 870 if($.inArray(ClientID, ClientChatStored) == -1){ 871 ClientChatStored.push(ClientID); 872 AjaxChat.setActiveChat(ClientID); 873 } 874 AjaxChat.loadChatRow(); 875 } 876 } 877 } 878 }); 879 }); 880 }, 881 882 initializeActiveChats: function () { 883 $.ajax({ 884 url: wbca_conf.ajaxURL, 885 type: "POST", 886 dataType: "JSON", 887 data: { 888 action : wbca_conf.ajaxActions.wbca_load_active_chat.action, 889 nonce : wbca_conf.ajaxNonce 890 }, 891 success: function(data) { 892 var data = data.ClientChatStored; 893 $.each(data, function(i, object) { 894 var ClientID = data[i].CLIENTID; 895 896 $.ajax({ 897 url: wbca_conf.ajaxURL, 898 type: "POST", 899 dataType: "JSON", 900 data: { 901 cc_clientid: ClientID, 902 action : wbca_conf.ajaxActions.wbca_load_allchat.action, 903 nonce : wbca_conf.ajaxNonce 904 }, 905 success: function(data) { 906 var data = data.allmessages; 907 $.each(data, function(i, object) { 908 var WindowId = i; 909 var chatContent = object; 910 var Container = $("#wbca_chat_body"); 911 912 $(Container).prepend(chatContent); 913 $(Container).scrollTop($(Container).prop("scrollHeight")); 914 }); 915 } 916 917 }); 918 }); 919 } 920 }); 921 }, 922 923 notificationAtTitle : function(){ 924 var timer=0, newtitle = [], oldtitle = document.title; 925 newtitle.push(oldtitle); 926 var vis = (function(){ 927 var stateKey, eventKey, keys = { 928 hidden: "visibilitychange", 929 webkitHidden: "webkitvisibilitychange", 930 mozHidden: "mozvisibilitychange", 931 msHidden: "msvisibilitychange" 932 }; 933 for (stateKey in keys) { 934 if (stateKey in document) { 935 eventKey = keys[stateKey]; 936 break; 937 } 938 } 939 return function(c) { 940 if (c) document.addEventListener(eventKey, c); 941 return !document[stateKey]; 942 } 943 })(); 944 vis(function(){ 945 var boxname = [], chatno = {}; 946 var audioplayer = document.getElementById("wbca_alert"); 947 var id = $("#wbca_chat_body").attr('data-clientid'); 948 chatno[id] = $("#wbca_chat_body").find('.wbca_message_row').length; 949 950 if(!vis()){ 951 notifyInterval = setInterval(function(){ 952 var nchatno = {}, ntitle; 953 var nid = $("#wbca_chat_body").attr('data-clientid'), 954 ntitle = 'New message from '+$("#wbca_chat_body").find('.wbca_admin_message_row:last-child').attr('data-operatorname'); 955 956 nchatno[nid] = $("#wbca_chat_body").find('.wbca_message_row').length; 957
958 if(nchatno[nid] > chatno[nid] && $.inArray(ntitle, newtitle) == -1){ 959 newtitle.push(ntitle); 960 } 961 }, 2000); 962 963 showNotifyInterval = setInterval(function(){ 964 if(newtitle.length > 1){ 965 document.title = newtitle[timer]; 966 timer++ 967 if (timer >= newtitle.length){ 968 timer=0; 969 } 970 if(audioplayer == "null"){ 971 audioplayer.play(); 972 } 973 } 974 }, 3000); 975 976 }else{ 977 clearInterval(notifyInterval); 978 clearInterval(showNotifyInterval); 979 document.title = oldtitle; 980 newtitle = []; 981 newtitle.push(oldtitle); 982 // audioplayer.pause(); 983 } 984 985 }); 986 987 }, 988 989 resizewindow: function(){ 990 if(wbca_conf.fullHeight && $(window).width() < 768){ 991 $(window).resize(function(e) { 992 $('#wbcaChatWindow').css('height',$(window).height()+'px'); 993 $('#wbca_chat_body').css('height',$(window).height()-68.5+'px'); 994 }); 995 } 996 } 997 } 998 999 AjaxChat.wbcaInit(); 1000 1001 }); 1002}(jQuery));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.