1var notification_admin_id; 2var current_url = jQuery(location).attr('href'); 3var session_html = ''; 4 5 6function scrollToBottomLive() { 7 if(jQuery('#chat-messages').length){ 8 var chatBox = document.getElementById("chat-messages"); 9 chatBox.scrollTop = chatBox.scrollHeight; 10 } 11} 12 13jQuery(document).ready(function ($) { 14 15 if (jQuery('body').hasClass('wp-admin') && siteConfig.is_have_any_live_chat){ 16 setInterval(() => { 17 lbbLoadChat(); 18 }, 10000); 19 } 20 21 jQuery(window).on('storage', lbb_message_receive); 22 jQuery(window).on('storage', lbb_admin_message_receive); 23 24 jQuery("#lbb-chat-main-wrapper.lbb-template-wrapper .lbb-conversation").on('scroll', function() { 25 if (jQuery(this).scrollTop() + jQuery(this).innerHeight() + 2 >= jQuery(this)[0].scrollHeight) { 26 jQuery('#lbb-chat-main-wrapper').removeClass('lbb-new-message-found'); 27 } 28 }); 29 30 31 jQuery(document).on('keyup','.lbb-live-mode .lbb_input_message', function(key){ 32 if (key.keyCode == 13) { 33 if (jQuery('#lbb-app').hasClass('lbb-live-mode')) { 34 SendMessage(); 35 jQuery('.lbb-live-mode .lbb_input_message').val(''); 36 } 37 } 38 }); 39 40 jQuery(document).on('click', '.lbb-live-mode .lbb-send-icon', function(e){ 41 if (jQuery('#lbb-app').hasClass('lbb-live-mode')) { 42 SendMessage(); 43 jQuery('.lbb-live-mode .lbb_input_message').val(''); 44 } 45 }); 46 47if (typeof chat_id !== 'undefined') { 48 var conversation_chat_cookie_key = 'lbbcf_'+chat_id+'_conversation_chat_id'; 49 var conversation_chat_cookie_val = ''; 50 if (getCookie(conversation_chat_cookie_key)){ 51 conversation_chat_cookie_val = getCookie(conversation_chat_cookie_key); 52 jQuery('#current_role_id').val(conversation_chat_cookie_val); 53 } 54} 55 56 57 58var current_admin_id = jQuery("#current_admin_id").val(); 59 60 61jQuery('.form-bottom-submit-with-checkbox button').on('click', function(e){ 62 63 64 var admin_send_msg = jQuery('#message-to-send').val(); 65 66 jQuery('.user-admin-list-left-side.active-chat .status').text(admin_send_msg); 67 jQuery('.user-admin-list-left-side.active-chat').removeClass('chat-new-msg'); 68 69 LBBMoveLiToFirst('.user-admin-list-left-side.active-chat'); 70 lbbAdminChatHTML('','','A'); 71 72 73 jQuery('#message-to-send').val(''); 74 lbbAdminscrollToBottom(); 75 e.preventDefault(); 76}); 77 78 79jQuery('.lbb-chat-user-info-nice-form').on('submit', function(e){ 80 e.preventDefault(); 81 var fname = jQuery('#lbb-chat-user-info-full-name').val(); 82 var email = jQuery('#lbb-chat-user-info-email').val(); 83 84 if(jQuery('#lbb-app').hasClass('lbb-trained_ai-mode')){ 85 86 submitTrainedAIContact(fname,email); 87 88 }else{ 89 90 jQuery('.lbb-contact-form-error').hide(); 91 var req_privacy = jQuery('#lbb-chat-user-privacy').val(); 92 var show_privacy = jQuery('#lbb-chat-user-req-privacy').val(); 93 var phone = jQuery('#lbb-chat-user-info-phone').val(); 94 95 var req_phone = jQuery('#lbb-chat-user-phone-req').val(); 96 var is_valid = true; 97 98 if(fname == ''){ 99 jQuery('.lbb-contact-form-error-fullname').show(); 100 is_valid = false; 101 }else if (email == '') { 102 jQuery('.lbb-contact-form-error-email').show(); 103 is_valid = false; 104 }else if(req_phone == 'yes' && phone == ''){ 105 jQuery('.lbb-contact-form-error-phone').show(); 106 is_valid = false; 107 }else if(show_privacy == 'yes' && req_privacy == 'yes' && !jQuery('#chat-privacy').is(':checked')){ 108 jQuery('.lbb-contact-form-error-term').show(); 109 is_valid = false; 110 }else{ 111 //alert('Please enter email address'); 112 } 113 114 if(is_valid){ 115 116 get_current_user_data(fname, email,phone); 117 } 118 } 119}); 120 121 122/*Notification*/ 123 jQuery(document).on('DOMContentLoaded', function () { 124 // Request desktop notifications permission on page load 125 126 127 }); 128 129 /*if (jQuery('#lbb-livechat-video-player').length) { 130 jQuery('#lbb-livechat-video-player')[0].play(); 131 } 132 133 if (jQuery('#lbb-bg-video-tag').length) { 134 jQuery('#lbb-bg-video-tag')[0].play(); 135 } 136 137 if (jQuery('#lbb-bg-video-tag-common').length) { 138 jQuery('#lbb-bg-video-tag-common')[0].play(); 139 } 140 141 if (jQuery('#lbb-bg-video-tag-common-btn').length) { 142 jQuery('#lbb-bg-video-tag-common-btn')[0].play(); 143 }*/ 144 145 146}); 147 148 149 150jQuery(window).on("load", function(){ 151 if (siteConfig.is_wp_admin) { 152 if (!Notification) { 153 console.log('Desktop notifications are not available in your browser.'); 154 return; 155 } 156 157 /*if (Notification.permission !== 'granted') { 158 Notification.requestPermission(); 159 }*/ 160 } 161 162}); 163 164 165function lbbConversationMotificationsFrontend(){ 166 167 var conversation_cookie_key = 'lbbcf_'+chatflow_id+'_conversation_id'; 168 var conversation_id = ''; 169 if (getCookie(conversation_cookie_key)){ 170 conversation_id = getCookie(conversation_cookie_key); 171 } 172 173 jQuery.ajax({ 174 type: 'post', 175 url: siteConfig.ajaxurl, 176 data: { 177 'conversation_id': conversation_id, 178 'timezone' : Intl.DateTimeFormat().resolvedOptions().timeZone, 179 'action': 'lbb_user_notification_heartbeat', 180 }, 181 success: function (response) { 182 response = JSON.parse(response); 183 var unread_current_user = (response.unread_current_user); 184 var message_ids = []; 185 186 if (unread_current_user != undefined) { 187 jQuery.each(unread_current_user, function(key, value) { 188 var msg_data = value.message_text; 189 var sent_time = value.sent_time; 190 //var conversation_id = value.conversation_id; 191 msg_data = msg_data.replace(/\\/g, ''); 192 message_ids.push(value.message_id); 193 194 SendMessage(sent_time, msg_data,'A'); 195 196 }); 197 198 //lbbUpdateMessageInDb(message_ids, conversation_id, sender_type = 'U'); 199 200 } 201 } 202 }); 203} 204function showNotification(last_msg = '', firebase_user_id = '') { 205 206 const dynamic_key = last_msg+'-'+firebase_user_id; 207 const notificationKey = 'notificationDisplayed_'+dynamic_key; 208 209 if (Notification.permission !== 'granted') { 210 Notification.requestPermission(); 211 } else { 212 if (last_msg == ''){ 213 last_msg = 'You have received a new message';
214 } 215 const options = { 216 body: last_msg, 217 tag : notificationKey, 218 dir: 'ltr', 219 /* image: 'image.jpg'*/ 220 }; 221 const notification = new Notification('New Message', options); 222 223 notification.onshow = () => { 224 if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio){ 225 //lbb_notification_ding(); 226 } 227 228 }; 229 230 if (firebase_user_id != ''){ 231 notification.onclick = function () { 232 window.open(siteConfig.conversationurl+'&mode=L&firebase_id='+firebase_user_id); 233 } 234 } 235 236 } 237 } 238 239 function lbb_send_event(){ 240 /*jQuery('.lbb-live-mode .lbb_input_message').keyup(function (key) { 241 if (key.keyCode == 13) { 242 SendMessage(); 243 jQuery(this).val(''); 244 } 245 }); 246 247 jQuery('.lbb-live-mode .lbb-send-icon').click(function (key) { 248 SendMessage(); 249 jQuery(this).val(''); 250 });*/ 251 252} 253 254function lbbConnectingAgent(){ 255 256 var conversation_chat_cookie_key = 'lbbcf_'+chatflow_id+'_conversation_chat_id'; 257 var conversation_chat_cookie_val = ''; 258 if (getCookie(conversation_chat_cookie_key)){ 259 conversation_chat_cookie_val = getCookie(conversation_chat_cookie_key); 260 } 261 262 var conversation_cookie_key = 'lbbcf_'+chatflow_id+'_conversation_id'; 263 var conversation_cookie_val = ''; 264 if (getCookie(conversation_cookie_key)){ 265 conversation_cookie_val = getCookie(conversation_cookie_key); 266 } 267 268 jQuery.ajax({ 269 url: siteConfig.ajaxurl, 270 type: "POST", 271 dataType: "JSON", 272 data: { 273 action: "lbb_check_agent_status", 274 lbb_chatflow_id: chatflow_id, 275 conversation_chat_cookie_val: conversation_chat_cookie_val, 276 conversation_cookie_val: conversation_cookie_val 277 }, 278 success: function(response) { 279 280 var response_data = (response); 281 282 if(response_data.available == 1){ 283 jQuery('.connecting-agent').remove(); 284 lbbCustomReponse('Admin has joined chat','lbb-special-messages-old'); 285 store_messsage_in_db('Admin has joined chat', conversation_cookie_val, 1, 1, 1); 286 287 var welcome_message = response_data.welcome_message; 288 if (welcome_message == ''){ 289 welcome_message = siteConfig.welcome_message; 290 } 291 292 jQuery('.lbb-admin-response .lbb-avatar-outer img').attr('src',lbb_live_agent_image); 293 jQuery('.lbb-avatar-image img').attr('src',lbb_live_agent_image); 294 295 jQuery('.lbb-admin-info-wrapper .lbb-header').html(lbbAdminLiveName); 296 297 298 setTimeout(function() { 299 store_messsage_in_db(welcome_message, conversation_cookie_val, 1, 1); 300 lbbConversationMotificationsFrontend(); 301 }, 500); 302 setTimeout(function() { 303 sendMessageFromAdmin(current_role_id, welcome_message); 304 lbbConversationMotificationsFrontend(); 305 lbb_send_event(); 306 }, 2000); 307 308 }else{ 309 jQuery('.connecting-agent').remove(); 310 lbbCustomReponse('Agent is not available at momment','lbb-special-messages-old'); 311 } 312 313 lbbConversationMotificationsFrontend(); 314 } 315 }); 316} 317function get_current_user_data(fname = '', email = '',phone = '') { 318 lbb_chatflow_id = jQuery('#lbb_chatflow_id').val(); 319 320 let conversation_chat_cookie_key = 'lbbcf_'+lbb_chatflow_id+'_conversation_chat_id'; 321 var conversation_chat_cookie_val = ''; 322 if (getCookie(conversation_chat_cookie_key)){ 323 conversation_chat_cookie_val = getCookie(conversation_chat_cookie_key); 324 } 325 326 var conversation_cookie_key = 'lbbcf_'+lbb_chatflow_id+'_conversation_id'; 327 var conversation_cookie_val = ''; 328 if (getCookie(conversation_cookie_key)){ 329 conversation_cookie_val = getCookie(conversation_cookie_key); 330 } 331 332 var orgval = jQuery('.lbb-chat-user-info-button').html(); 333 jQuery('.lbb-chat-user-info-button').html('Please wait..'); 334 jQuery('.lbb-chat-user-info-button').attr('disabled', 'true'); 335 336 jQuery.ajax({ 337 url: siteConfig.ajaxurl, 338 type: "POST", 339 dataType: "JSON", 340 data: { 341 action: "lbb_check_current_user", 342 type: "GET", 343 lbb_chatflow_id: lbb_chatflow_id, 344 fname: fname, 345 email: email, 346 phone: phone, 347 conversation_chat_cookie_val: conversation_chat_cookie_val, 348 conversation_cookie_val: conversation_cookie_val 349 }, 350 success: function(response) { 351 var newItems = false;
352 var response_data = JSON.parse(response.data); 353 jQuery('.lbb-chat-user-info-button').removeAttr('disabled'); 354 jQuery('.lbb-chat-user-info-button').html(orgval); 355 if( response_data.key !== "" ) { 356 //user is logged in 357 358 if (conversation_chat_cookie_val == ''){ 359 setCookie(conversation_chat_cookie_key, response_data.key, 365); 360 } 361 362 363 jQuery("#current_role_id").val(response_data.key); 364 365 var current_id_new = response_data.id; 366 if (current_id_new == '1'){ 367 current_id_new = 0; 368 } 369 jQuery("#current_id").val(current_id_new); 370 371 current_role_id = response_data.key; 372 373 /*var chat_id = siteConfig.chat_id; 374 var email = siteConfig.email;*/ 375 376 377 //setCookie('lbb_firstname', fname, 365); 378 //setCookie('lbb_email', email, 365); 379 380 381 382 //var chat_token = response_data.token; 383 //var conversation_chat_cookie_key = 'lbbcf_'+chatflow_id+'_conversation_chat_token'; 384 //setCookie(conversation_chat_cookie_key, chat_token, 365); 385 386 387 lbb_chatflow_id = jQuery('#lbb_chatflow_id').val(); 388 389 if (!response_data.is_existing_user) { 390 391 jQuery('#lbb-chat-main-wrapper').removeClass('lbb-chat-user-input'); 392 lbbCustomReponse('Connecting to agent...','connecting-agent'); 393 lbbConnectingAgent(); 394 lbbConversationMotificationsFrontend(); 395 /*var welcome_message = response_data.welcome_message; 396 if (welcome_message == ''){ 397 welcome_message = siteConfig.welcome_message; 398 } 399 400 store_messsage_in_db(welcome_message, conversation_cookie_val, 1, 1); 401 setTimeout(function() { 402 sendMessageFromAdmin(current_role_id, welcome_message); 403 lbb_send_event(); 404 }, 2000);*/ 405 }else{ 406 isAdminBusy = false; 407 //jQuery('.lbb-typing').addClass('lbb-user-input-hide'); 408 lbb_reset_timer(); 409 lbb_chat_activity_timer() 410 jQuery('.lbb-agent-typing').hide(); 411 lbb_send_event(); 412 } 413 jQuery('.lbb-typing').removeClass('lbb-user-input-hide'); 414 415 416 417 418 } 419 420 jQuery('#lbb-chat-main-wrapper').removeClass('lbb-chat-user-input'); 421 422 423 } 424 }) 425} 426 427 428function load_user_message_for_admin(firebase_dynamic_id = ''){ 429 var newItemsAdmin = false; 430 431 432 433} 434 435function load_new_admin_child(snapshot) { 436 437 alert('load_new_admin_child'); 438 return; 439 440 chat_key_data = snapshot.key; 441 chat_val_data = snapshot.val(); 442 var admin_user = 1; 443 var msg = chat_val_data.msg; 444 var sender_id = chat_val_data.sender_id; 445 var date = chat_val_data.date; 446 var msg_html = msg; 447 var time_format = moment(chat_val_data.date).format('HH:mm:ss'); 448 var latest_chat_message = ""; 449 450 //console.log(chat_val_data); 451 var inputDateTime = new Date(date); 452 453 // Extract hours and minutes from the Date object 454 var hours = inputDateTime.getHours(); 455 var minutes = inputDateTime.getMinutes(); 456 457 // Format the time as "HH:mm" (hours:minutes) 458 var formattedTime = (hours < 10 ? '0' : '') + hours + ':' + (minutes < 10 ? '0' : '') + minutes; 459 460 var user_avtar = jQuery('.user-admin-list-left-side.active-chat').attr('data-admin-img'); 461 462 463 464 if(admin_user !== parseInt(chat_val_data.user_id)) { 465 var user_avtar = jQuery('.user-admin-list-left-side.active-chat').attr('data-admin-img'); 466 var user_name = jQuery('.user-admin-list-left-side.active-chat .about .name').text(); 467 //chat message from user 468 latest_chat_message = `<li class="user-visitor-list chat-top-msg" id="`+chat_key_data+`"> 469 <div class="message-box-img"> 470 <span class="chat-icon"><img src="`+user_avtar+`"></span> 471 </div> 472 <div class="message-box-data"> 473 <div class="message-data"> 474 <span class="message-data-name"> `+user_name+`</span> 475 <span class="message-data-time">`+formattedTime+`</span> 476 </div> 477 <div class="message my-message"> 478 <div class="lbb-user-message">${msg_html}</div> 479 </div> 480 </div> 481 </li>`; 482 483 484 var old_count = parseInt(jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"] ').find('.lbb-message-count').text()); 485 486 var final_count = 0; 487 if (!isNaN(old_count)){ 488 final_count = old_count; 489 } 490 491 var checkuser = jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"]').hasClass('active-chat'); 492 jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"] .status').text(msg_html); 493 jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"]').find('.lbb-message-count').text(final_count + 1); 494 jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"]').addClass('chat-new-msg'); 495 496 497 //jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"]').prependTo('#people-list'); 498 499 LBBMoveLiToFirst('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"]'); 500 501
502 if (typeof siteConfig.notify_notification !== 'undefined' && siteConfig.notify_notification){ 503 showNotification(msg_html, sender_id); 504 } 505 if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio && siteConfig.notify_notification == false){ 506 lbb_notification_ding(); 507 } 508 509 510 } else { 511 //chat messahe from admin 512 //latest_chat_message = `<span id="`+chat_key_data+`" class="chat_msg_item chat_msg_item_admin"><span class="msg">${msg_html}</span><span class="time_status">${time_format}</span></span>`; 513 514 515 516 517 } 518 519 520 521 522 var scrollToBottom = LBBCheckScroll(); 523 524 if (jQuery('#message-to-send-user-id').val() != '' && checkuser){ 525 jQuery('#chat-data-append').append(latest_chat_message); 526 if (scrollToBottom){ 527 var chat_history_div = jQuery('#chat-history'); 528 chat_history_div.animate({ scrollTop: chat_history_div.prop('scrollHeight') }, 1000); 529 } 530 531 } 532 533 //console.log(snapshot.key); 534 535 536 if(admin_user !== parseInt(chat_val_data.user_id)) { 537 setTimeout(function() { 538 if (typeof checkFirebaseId === 'function') { 539 checkFirebaseId(); 540 } 541 }, 1000); 542 543 } 544} 545 546function LBBMoveLiToFirst(selector) { 547 var element = jQuery(selector); 548 element.prependTo(element.parent()); 549} 550 551function LBBCheckScroll(scrolldiv = 'chat-history') { 552 var scrollableDiv = document.getElementById(scrolldiv); 553 554 if (!scrollableDiv) { 555 //console.error("Element with ID '" + scrolldiv + "' not found."); 556 return false; 557 } 558 559 // Check if the user has scrolled to the bottom 560 if (scrollableDiv.scrollTop + scrollableDiv.clientHeight + 10 >= scrollableDiv.scrollHeight) { 561 return true; 562 // You can perform additional actions here 563 } else { 564 return false; 565 } 566 } 567 568 569function getCurrentTime() { 570 const now = new Date(); 571 const hours = now.getHours(); 572 const minutes = now.getMinutes(); 573 574 // Ensure hours and minutes are displayed with leading zero if needed 575 const formattedHours = String(hours).padStart(2, '0'); 576 const formattedMinutes = String(minutes).padStart(2, '0'); 577 578 // Combine the formatted time components 579 const formattedTime = `${formattedHours}:${formattedMinutes}`; 580 581 return formattedTime; 582} 583 584function load_new_child(snapshot) { 585 586 alert('load_new_child'); 587 return; 588 589 chat_key_data = snapshot.key; 590 chat_val_data = snapshot.val(); 591 var admin_user = 1; 592 var msg = chat_val_data.msg; 593 var msg_html = msg; 594 var time_format = moment(chat_val_data.date).format('HH:mm:ss'); 595 var latest_chat_message = ""; 596 597 if(admin_user !== parseInt(chat_val_data.user_id)) { 598 //chat message from user 599 600 601 } else { 602 //chat messahe from admin 603 //latest_chat_message = `<span id="`+chat_key_data+`" class="chat_msg_item chat_msg_item_admin"><span class="msg">${msg_html}</span><span class="time_status">${time_format}</span></span>`; 604 605 //latest_chat_message = `<span id="`+chat_key_data+`" class="chat_msg_item chat_msg_item_user"><span class="msg">${msg_html}</span></span>`; 606 //lbbHandleAdminResponse(latest_chat_message); 607 var scrollToBottomFrontend = LBBCheckScroll('chat-messages'); 608 609 if (!jQuery('.lbb-dynamic-mode-set').is(':visible')) { 610 jQuery('#lbb-chat-main-wrapper').addClass('lbb-new-message-found'); 611 }else{ 612 var cthis = "#lbb-chat-main-wrapper.lbb-template-wrapper .lbb-conversation"; 613 if (jQuery(cthis).scrollTop() + jQuery(cthis).innerHeight() + 2 >= jQuery(cthis)[0].scrollHeight) { 614 jQuery('#lbb-chat-main-wrapper').removeClass('lbb-new-message-found'); 615 }else{ 616 jQuery('#lbb-chat-main-wrapper').addClass('lbb-new-message-found'); 617 } 618 } 619 620 isAdminBusy = false; 621 lbb_reset_timer(); 622 lbb_chat_activity_timer(); 623 624 var cur_time = ''; 625 latest_chat_message = `<div class="lbb-message lbb-admin-response" id="`+chat_key_data+`"> 626 <div class="lbb-avatar-outer"> 627 <img src="{{image}}" alt="" class="lbb-lazy-img-loaded"> 628 </div> 629 <div class="chat-user-info-wrapper"> 630 <div class="chat-user-name">Bot</div> 631 <div class="lbb-anchors lbb-bot-response lbb-text"">${msg_html}</div> 632 <div class="chat-user-submit-time">`+getCurrentTime()+`</div> 633 </div> 634 </div>`; 635 lbbHandleAdminResponse(latest_chat_message, false); 636 637 if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio){ 638 lbb_notification_ding(); 639 } 640 641 642 if (scrollToBottomFrontend){ 643 var chat_history_div = jQuery('#chat-messages'); 644 chat_history_div.animate({ scrollTop: chat_history_div.prop('scrollHeight') }, 1000); 645 } 646 647 648 649 } 650} 651 652 653function lbb_activate_chat_live_mode() { 654 jQuery('#lbb-app').removeClass('lbb-bot-mode'); 655 jQuery('#lbb-app').addClass('lbb-live-mode'); 656
657 jQuery('#lbb-app').removeClass('lbb-allow-bot-to-trained'); 658 659 if(jQuery('#lbb-app').length > 0) { 660 setInterval(() => { 661 lbbConversationMotificationsFrontend(); 662 }, 5000); 663 664 } 665 666 var check_firebase_user = getCookie('lbbcf_'+chatflow_id+'_conversation_chat_id'); 667 var lbb_firstname = getCookie('lbb_firstname'); 668 var lbb_email = getCookie('lbb_email'); 669 670 if (check_firebase_user != null && check_firebase_user != undefined && check_firebase_user != '') { 671 return; 672 } 673 674 if ((lbb_firstname != null && lbb_firstname != undefined && lbb_firstname != '') && (lbb_email != null && lbb_email != undefined && lbb_email != '')) { 675 lbb_email = lbb_email.replace("@", "%40"); 676 get_current_user_data(lbb_firstname, lbb_email); 677 }else if (check_firebase_user == null || check_firebase_user == undefined || check_firebase_user == '') { 678 jQuery('#lbb-chat-main-wrapper').addClass('lbb-chat-user-input') 679 }else{ 680 get_current_user_data(); 681 } 682 683} 684 685 686function sendMessageFromAdmin(current_role_id, message_text) { 687 688 isAdminBusy = false; 689 //jQuery('.lbb-typing').addClass('lbb-user-input-hide'); 690 lbb_reset_timer(); 691 lbb_chat_activity_timer(); 692 lbbAdminChatHTML('A'); 693 jQuery('.lbb-agent-typing').hide(); 694} 695 696 697function lbbAdminChatHTML(time = '', text = '', sendder_type = 'U' ) { 698 699 var admin_avtar = jQuery('.user-admin-list-left-side.active-chat').attr('data-admin-img'); 700 if (sendder_type == 'U'){ 701 702 // Convert to Date object 703 704 // Format the date-time to "HH:mm" 705 var formattedTime = time; 706 707 708 latest_chat_message = `<li class="user-visitor-list chat-top-msg"> 709 <div class="message-box-img"> 710 <span class="chat-icon"></span> 711 </div> 712 <div class="message-box-data"> 713 <div class="message-data"> 714 <span class="message-data-name"> Unknown Visitor</span> 715 <span class="message-data-time">`+formattedTime+`</span></div> 716 <div class="message my-message"> 717 <div class="lbb-user-message">${text}</div> 718 </div> 719 </div> 720 </li>`; 721 var checkuser = 1; 722 jQuery('#chat-data-append').append(latest_chat_message); 723 724 lbb_chatflow_id = jQuery('#message-conversation-id').val(); 725 726 var jsonData = { 727 "conversation_id": lbb_chatflow_id, 728 "msg": latest_chat_message 729 }; 730 731 var jsonString = JSON.stringify(jsonData); 732 733 lbb_admin_message_broadcast({'command':'lbbsetadminsendmsg', 'lbb_admin_user_msg': jsonString}); 734 735 }else{ 736 737 var admin_send = 1; 738 var is_conversation_id = 1; 739 lbb_chatflow_id = jQuery('#message-conversation-id').val(); 740 isAdminBusy = false; 741 742 743 var currentDate = new Date(); 744 // Get the current hours and minutes 745 var currentHours = currentDate.getHours(); 746 var currentMinutes = currentDate.getMinutes(); 747 748 // Format hours and minutes with leading zeros if needed 749 currentHours = ('0' + currentHours).slice(-2); 750 currentMinutes = ('0' + currentMinutes).slice(-2); 751 752 var formattedTime = currentHours + ":" + currentMinutes; 753 var text_message = jQuery('#message-to-send').val(); 754 755 var admin_name = jQuery('#admin-name').val(); 756 757 latest_chat_message = `<li class="user-admin-list"> 758 <div class="message-box-img"> 759 <span class="chat-icon"></span> 760 </div> 761 <div class="message-box-data"> 762 <div class="message-data"> 763 <span class="message-data-name"> Admin</span> 764 <span class="message-data-time">`+formattedTime+`</span> 765 </div> 766 <div class="message my-message"> 767 <div class="lbb-user-message">${text_message}</div> 768 </div> 769 </div> 770 </li>`; 771 772 var checkuser = 1; 773 if (jQuery('#chat-list-user-'+lbb_chatflow_id).hasClass('active-chat')){ 774 jQuery('#chat-data-append').append(latest_chat_message); 775 776 var jsonData = { 777 "conversation_id": lbb_chatflow_id, 778 "msg": latest_chat_message 779 }; 780 781 782 var jsonString = JSON.stringify(jsonData); 783 784 lbb_admin_message_broadcast({'command':'lbbsetadminunreadmsg', 'lbb_admin_user_msg': jsonString}); 785 } 786 787 788 store_messsage_in_db(text_message, lbb_chatflow_id, admin_send, is_conversation_id) 789 790 scrollToBottomLive(); 791 } 792 793 794 795 796} 797 798function lbb_message_broadcast(message) 799{ 800 localStorage.setItem('lbb_user_msg',JSON.stringify(message)); 801 localStorage.removeItem('lbb_user_msg'); 802} 803 804 805// receive message 806// 807function lbb_message_receive(ev) 808{ 809 if (ev.originalEvent.key!='lbb_user_msg') return; // ignore other keys 810 var message=JSON.parse(ev.originalEvent.newValue); 811 if (!message) return; // ignore empty msg or msg reset 812 813 // here you act on messages. 814 // you can send objects like { 'command': 'doit', 'data': 'abcd' } 815 if (message.command == 'lbbsetunreadmsg'){ 816 jQuery('.lbb-conversation.Messages_list').append(message.lbb_user_msg); 817 } 818 819 if (message.command == 'lbbsetsendmsg'){ 820 jQuery('.lbb-conversation.Messages_list').append(message.lbb_user_msg); 821 } 822 823 // etc. 824} 825 826function lbb_admin_message_broadcast(message) 827{ 828 localStorage.setItem('lbb_admin_user_msg',JSON.stringify(message)); 829 localStorage.removeItem('lbb_admin_user_msg'); 830} 831 832 833// receive message 834// 835function lbb_admin_message_receive(ev) 836{ 837 if (ev.originalEvent.key!='lbb_admin_user_msg') return; // ignore other keys 838 var message=JSON.parse(ev.originalEvent.newValue); 839 if (!message) return; // ignore empty msg or msg reset 840 841 var chatflow_brodcast_id = jQuery('.user-admin-list-left-side.active-chat').attr('data-id'); 842 843 844 var jsonData = JSON.parse(message.lbb_admin_user_msg); 845 846 // Access values 847 var conversationId = jsonData.conversation_id; 848 var message_data = jsonData.msg; 849 850 851 852 // here you act on messages. 853 // you can send objects like { 'command': 'doit', 'data': 'abcd' } 854 if (message.command == 'lbbsetadminunreadmsg'){ 855 856 if (conversationId == chatflow_brodcast_id){ 857 jQuery('#chat-data-append').append(message_data); 858 } 859 860 } 861 862 if (message.command == 'lbbsetadminsendmsg'){ 863 if (conversationId == chatflow_brodcast_id){ 864 jQuery('#chat-data-append').append(message_data); 865 } 866 } 867 868 // etc. 869} 870 871 872 873function SendMessage(time = '', text = '', sender_type = 'U') { 874 875 if (sender_type == 'U'){ 876 877 var currentUserId = jQuery('#current_id').val(); 878 var text_message = jQuery('.lbb_input_message').val(); 879 880 var admin_send = 0; 881 var is_conversation_id = 1; 882 //lbb_chatflow_id = jQuery('#lbb_chatflow_id').val(); 883 lbb_chatflow_id = getConversationID(); 884 885 886 887 latest_chat_message = `<span class="chat_msg_item chat_msg_item_user"><span class="msg">${text_message}</span></span>`;
888 889 latest_chat_message = latest_chat_message.replace('{{time}}',getCurrentTime()); 890 var latest_chat_message_html = lbbHandleUserResponse(latest_chat_message, false); 891 lbb_message_broadcast({'command':'lbbsetsendmsg', 'lbb_user_msg': latest_chat_message_html}); 892 893 894 895 isUserBusy = false; 896 lbb_reset_timer(); 897 lbb_chat_activity_timer(); 898 899 900 901 store_messsage_in_db(text_message, lbb_chatflow_id, admin_send, is_conversation_id) 902 903 904 scrollToBottomLive(); 905 906 }else{ 907 var scrollToBottomFrontend = LBBCheckScroll('chat-messages'); 908 909 if (!jQuery('.lbb-dynamic-mode-set').is(':visible')) { 910 jQuery('#lbb-chat-main-wrapper').addClass('lbb-new-message-found'); 911 }else{ 912 var cthis = "#lbb-chat-main-wrapper.lbb-template-wrapper .lbb-conversation"; 913 if (jQuery(cthis).scrollTop() + jQuery(cthis).innerHeight() + 2 >= jQuery(cthis)[0].scrollHeight) { 914 jQuery('#lbb-chat-main-wrapper').removeClass('lbb-new-message-found'); 915 }else{ 916 jQuery('#lbb-chat-main-wrapper').addClass('lbb-new-message-found'); 917 } 918 } 919 920 isAdminBusy = false; 921 lbb_reset_timer(); 922 lbb_chat_activity_timer(); 923 924 var formattedTime = time; 925 926 927 var cur_time = ''; 928 latest_chat_message = `<div class="lbb-message lbb-admin-response""> 929 <div class="lbb-avatar-outer"> 930 <img src="{{image}}" alt="" class="lbb-lazy-img-loaded"> 931 </div> 932 <div class="chat-user-info-wrapper"> 933 <div class="chat-user-name">Bot</div> 934 <div class="lbb-anchors lbb-bot-response lbb-text"">${text}</div> 935 <div class="chat-user-submit-time">`+formattedTime+`</div> 936 </div> 937 </div>`; 938 var latest_chat_message_html = lbbHandleAdminResponse(latest_chat_message, false); 939 lbb_message_broadcast({'command':'lbbsetunreadmsg', 'lbb_user_msg': latest_chat_message_html}); 940 941 if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio){ 942 lbb_notification_ding(); 943 } 944 945 946 if (scrollToBottomFrontend){ 947 var chat_history_div = jQuery('#chat-messages'); 948 chat_history_div.animate({ scrollTop: chat_history_div.prop('scrollHeight') }, 1000); 949 } 950 } 951 952 953} 954 955 956function store_messsage_in_db(text_message, lbb_chatflow_id, admin_send, is_conversation_id = 0, default_is_read = 0){ 957 958 jQuery.ajax({ 959 url: siteConfig.ajaxurl, 960 type: "POST", 961 dataType: "JSON", 962 data: { 963 action: "lbb_add_message", 964 type: "GET", 965 lbb_chatflow_id: lbb_chatflow_id, 966 text_message: text_message, 967 admin_send: admin_send, 968 is_read: default_is_read, 969 is_conversation_id: is_conversation_id 970 }, 971 success: function(response) { 972 973 } 974 }); 975} 976 977 978 979/*const lbbAudioContext = new AudioContext();*/ 980 981function LBBPlaySound() { 982 /*const oscillatorNode = lbbAudioContext.createOscillator(); 983 const gainNode = lbbAudioContext.createGain(); 984 985 oscillatorNode.type = 'sine'; 986 oscillatorNode.frequency.setValueAtTime(150, lbbAudioContext.currentTime); 987 oscillatorNode.frequency.exponentialRampToValueAtTime(500, lbbAudioContext.currentTime + 0.5); 988 989 gainNode.gain.setValueAtTime(0.3, lbbAudioContext.currentTime); 990 gainNode.gain.exponentialRampToValueAtTime(0.01, lbbAudioContext.currentTime + 0.5); 991 992 oscillatorNode.connect(gainNode); 993 gainNode.connect(lbbAudioContext.destination); 994 995 oscillatorNode.start(); 996 oscillatorNode.stop(lbbAudioContext.currentTime + 0.5);*/ 997 998 if (jQuery('#lbb-bell-audio-admin').length){ 999 setTimeout(function() { 1000 var bellAudio = document.getElementById('lbb-bell-audio-admin'); 1001 bellAudio.play(); 1002 1003 }, 100); 1004 } 1005} 1006 1007function lbb_notification_ding() { 1008 1009 if (jQuery('#lbb-bell-audio').length){ 1010 setTimeout(function() { 1011 var bellAudio = document.getElementById('lbb-bell-audio'); 1012 bellAudio.play(); 1013 1014 }, 100); 1015 }else{ 1016 var sound = new Audio("data:audio/mp3;base64,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3aouOes1ZYRoh2tt1bIG/Ds3ubWzEMTQZhToanns/TekyGTZPfpl+5G1yZoSkEVEsOCuP5TNSZQ2VGuU/zpLyZW38VWNWzL/f7arkemyet8uFD/h+hRRu+ZTLWZmXkT/+1LE5oAMdUMf54xrwWUYI/SCiTBZd8r5nk7U8SH4uQUl222222B1GXqtRJ29XotjFfKkKpZIwlbj5uDbO2Mv9MI5rerZHVWm2VGc9b/8he+e3jf/Hyv/07mrO/k0vWFfwdRBMd3z7M2t3+v/HPfMGHGsqgpHHJJHJGiQN7MgMiO5qe72rxFxmXUdVo7scyVGk8WqhhedkfbphkEnXWx1JbHUBrEfcxmZ2R4Mszzh1o5GeZqcpsc/17PP0ndL3W8eRdqhs6U+WTcX7p//Wb1yKf/7UsTmAAv05ynhmGuhWYzk/DGM4Ee0HXiLoODqAmwIJJbZW0QIQhCEIXqq/8bjdX2Y1XwqqupNqX1dS//USTM3V6rNV9nCszMfG1VVUtS9S9YbNw1UBAWqqX/+u3AxMKAoi6w11u1B0N/3eJRKs7g09QNVTEFNRTMuOTcgKGJldGEpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxOkATLGnH+MMbclKiiQ0UQzhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45NyAoYmV0YSlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE6oAMqVkfowxt2ViiovQRjXJVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsTqg8AAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"); 1017 1018 setTimeout(function() { 1019 sound.play(); 1020 }, 100); 1021 1022 } 1023 1024 1025} 1026 1027 1028function lbbUpdateMessageInDb(message_ids, conversation_id, sender_type = 'A'){ 1029 1030 if (message_ids != '' && conversation_id.length >= 1) { 1031 1032 if (sender_type == 'A'){ 1033 var ajax_admin_url = lbb_ajax.ajaxurl; 1034 }else{ 1035 var ajax_admin_url = siteConfig.ajaxurl; 1036 } 1037 jQuery.ajax({ 1038 type: 'post', 1039 url: ajax_admin_url, 1040 data: { 1041 'conversation_id': conversation_id, 1042 'message_ids' : message_ids, 1043 'action': 'lbb_messages_update', 1044 }, 1045 success: function (response) { 1046 //response = JSON.parse(response); 1047 } 1048 }); 1049 }else{ 1050 1051 } 1052 1053 1054} 1055 1056 1057
1058function lbb_firebase_notifincation_init(){ 1059 1060 1061 alert('attach_thread'); 1062 return; 1063 1064 const chat_data_ref = firebase.database().ref("chat_data"); 1065 chat_data_ref.on("child_changed", (snapshot, prevChildKey) => { 1066 var open_friend_id = jQuery('#message-to-send-user-id').val(); 1067 1068 // const sender_id = snapshot.val().sender_id; 1069 1070 1071 1072 1073 1074 1075 const messages = snapshot.val().message; 1076 1077 // Get the keys (message IDs) of the messages 1078 const messageKeys = Object.keys(messages); 1079 1080 // Find the last message ID 1081 const lastMessageKey = messageKeys[messageKeys.length - 1]; 1082 1083 // Get the last message object 1084 const lastMessage = messages[lastMessageKey]; 1085 1086 // Retrieve the text of the last message 1087 const lastMessageText = lastMessage.msg; 1088 1089 1090 if(open_friend_id != lastMessage.sender_id){ 1091 1092 /*if (typeof siteConfig.notify_notification !== 'undefined' && siteConfig.notify_notification){ 1093 showNotification(lastMessageText, snapshot.keym); 1094 } 1095 if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio && siteConfig.notify_notification == false){ 1096 lbb_notification_ding(); 1097 } */ 1098 1099 } 1100 1101 1102 1103 // Now, you have the last message text in the `lastMessageText` variable 1104 //console.log("Last Message Text:", lastMessageText); 1105 1106 /*const dynamic_key = lastMessageText+'-'+snapshot.key; 1107 const notificationKey = 'notificationDisplayed_'+dynamic_key;*/ 1108 1109 1110 1111 1112 1113 1114 }); 1115} 1116 1117function lbb_is_page_in_focus() { 1118 // Check if the Page Visibility API is supported 1119 if (typeof document.hidden !== "undefined") { 1120 return !document.hidden; 1121 } else if (typeof document.msHidden !== "undefined") { 1122 return !document.msHidden; 1123 } else if (typeof document.webkitHidden !== "undefined") { 1124 return !document.webkitHidden; 1125 } 1126 1127 // If the Page Visibility API is not supported, assume the page is in focus 1128 return true; 1129} 1130 1131function lbb_check_last_message_from_firebase(user_type = 'user', idle_time = 500){ 1132 1133 1134 alert('lbb_check_last_message_from_firebase'); 1135 return; 1136 var friend_id = jQuery('#current_role_id').val(); 1137 var response_return = false; 1138 var user_has_no_msg = true; 1139 var get_specific_user_message = friend_id; 1140 1141 if (user_type == 'admin'){ 1142 var get_specific_user_message = jQuery('#current_admin_id').val(); 1143 1144 } 1145 1146 var chatRef = firebase.database().ref('chat_data/' + friend_id + '/message'); 1147 chatRef.orderByChild('sender_id').equalTo(get_specific_user_message).limitToLast(1).once('value', function(snapshot) { 1148 snapshot.forEach(function(childSnapshot) { 1149 user_has_no_msg = false; 1150 1151 // This will give you the last message data 1152 var lastMessageData = childSnapshot.val(); 1153 1154 var sender_id = lastMessageData.sender_id; 1155 console.log(lastMessageData); 1156 1157 1158 1159 var currentTime = new Date().getTime(); 1160 var messageTime = new Date(lastMessageData.date).getTime(); 1161 var timeDifferenceInSeconds = (currentTime - messageTime) / 1000; // in seconds 1162 //console.log(lastMessageData.date); 1163 // console.log(timeDifferenceInSeconds); 1164 // Check if the time difference is greater than 5 minutes 1165 if (timeDifferenceInSeconds >= idle_time) { 1166 response_return = true; 1167 } 1168 1169 }); 1170 }); 1171 1172 if(user_type == 'user' && user_has_no_msg){ 1173 return lbb_check_last_message_from_firebase('admin',idle_time); 1174 } 1175 1176 if (user_has_no_msg){ 1177 return user_has_no_msg; 1178 }else{ 1179 return response_return; 1180 } 1181 1182} 1183 1184function lbb_get_last_message_from_user_firebase(){ 1185 1186 alert('lbb_get_last_message_from_user_firebase'); 1187 return; 1188 1189 var friend_id = jQuery('#current_role_id').val(); 1190 var response_return = false; 1191 var get_specific_user_message = friend_id; 1192 1193 1194 var sender_type = ''; 1195 var chatRef = firebase.database().ref('chat_data/' + friend_id + '/message'); 1196 chatRef.orderByKey().limitToLast(1).once('value', function(snapshot) { 1197 snapshot.forEach(function(childSnapshot) { 1198 var lastMessageData = childSnapshot.val(); 1199 var sender_id = lastMessageData.sender_id; 1200 if (friend_id == sender_id){ 1201 sender_type = 'user'; 1202 }else{ 1203 sender_type = 'admin'; 1204 } 1205 return sender_type; 1206 }); 1207 }); 1208 1209 return sender_type; 1210 1211} 1212 1213function lbb_init_firebase(){ 1214 jQuery('#lbb-chat-main-wrapper').removeClass('lbb-chat-user-input'); 1215} 1216 1217function lbbLoadChat() { 1218 1219 /*var current_user_id = 0;
1220 if (jQuery('#message-to-send-user-id').val() != ''){ 1221 current_user_id = jQuery('#message-to-send-user-id').val(); 1222 } 1223 */ 1224 if (typeof siteConfig.notify_notification !== 'undefined' && siteConfig.notify_notification){ 1225 jQuery.ajax({ 1226 url: siteConfig.ajaxurl, 1227 type: "POST", 1228 data: { 1229 action: "lbb_read_unseen_messages", 1230 /*lbb_user_id: current_user_id,*/ 1231 browser_uniq_id: lbbGetMyBrowserUniqId(), 1232 }, 1233 success: function(response) { 1234 1235 response = JSON.parse(response); 1236 var message_ids = []; 1237 1238 if (response != undefined && response.length != 0) { 1239 jQuery.each(response, function(key, value) { 1240 var msg_data = value.message_text; 1241 var sent_time = value.sent_time; 1242 var sender_id = value.conversation_id; 1243 1244 1245 jQuery('.user-admin-list-left-side[data-id="' + sender_id + '"] .status').text(msg_data); 1246 jQuery('.user-admin-list-left-side[data-id="' + sender_id + '"]').addClass('chat-new-msg'); 1247 1248 LBBMoveLiToFirst('.user-admin-list-left-side[data-id="' + sender_id + '"]'); 1249 1250 1251 1252 1253 showNotification(msg_data); 1254 }); 1255 1256 if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio){ 1257 //lbb_notification_ding(); 1258 LBBPlaySound(); 1259 } 1260 } 1261 1262 1263 } 1264 }); 1265 } 1266} 1267 1268function lbbGetUTCTime(){ 1269 var utcDate = new Date(); 1270 1271// Get the UTC methods from the Date object 1272var utcFullYear = utcDate.getUTCFullYear(); 1273var utcMonth = lbbAddLeadingZero(utcDate.getUTCMonth() + 1); // Months are zero-based, so add 1 1274var utcDay = lbbAddLeadingZero(utcDate.getUTCDate()); 1275var utcHours = lbbAddLeadingZero(utcDate.getUTCHours()); 1276var utcMinutes = lbbAddLeadingZero(utcDate.getUTCMinutes()); 1277var utcSeconds = lbbAddLeadingZero(utcDate.getUTCSeconds()); 1278 1279// Create a string representation of the UTC time 1280var utcTimeString = 1281 utcFullYear + 1282 '-' + 1283 utcMonth + 1284 '-' + 1285 utcDay + 1286 ' ' + 1287 utcHours + 1288 ':' + 1289 utcMinutes + 1290 ':' + 1291 utcSeconds; 1292 1293 return utcTimeString; 1294 1295} 1296 1297function lbbAddLeadingZero(number) { 1298 return number < 10 ? '0' + number : number; 1299} 1300 1301function lbbGetMyBrowserUniqId(){ 1302 var current = window.localStorage.getItem("_DEVICEID_") 1303 if (current) return current; 1304 var id = lbbUUId(); 1305 window.localStorage.setItem("_DEVICEID_",id); 1306 return id; 1307} 1308 1309lbbUUId = function(){ 1310 var u = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, 1311 function(c) { 1312 var r = Math.random() * 16 | 0, 1313 v = c == 'x' ? r : (r & 0x3 | 0x8); 1314 return v.toString(16); 1315 }); 1316 return u; 1317}
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.