Plugin Directory

Changeset 3452866


Ignore:
Timestamp:
02/03/2026 12:37:35 PM (2 months ago)
Author:
bhvreddy
Message:

Release 4.37

Location:
click-to-chat-for-whatsapp
Files:
272 added
4 edited

Legend:

Unmodified
Added
Removed
  • click-to-chat-for-whatsapp/trunk/click-to-chat.php

    r3442197 r3452866  
    88 * Plugin URI:  https://wordpress.org/plugins/click-to-chat-for-whatsapp/
    99 * Description: Lets make your Web page visitors contact you through WhatsApp with a single click/tap
    10  * Version:     4.36
     10 * Version:     4.37
    1111 * Author:      HoliThemes
    1212 * Author URI:  https://holithemes.com/plugins/click-to-chat/
     
    2222// ctc - Version - update version at readme 'Stable tag'.
    2323if ( ! defined( 'HT_CTC_VERSION' ) ) {
    24     define( 'HT_CTC_VERSION', '4.36' );
     24    define( 'HT_CTC_VERSION', '4.37' );
    2525}
    2626
  • click-to-chat-for-whatsapp/trunk/new/inc/assets/js/app.js

    r3429029 r3452866  
    1 (()=>{"use strict";function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);e&&(c=c.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,c)}return n}function e(e){for(var c=1;c<arguments.length;c++){var r=null!=arguments[c]?arguments[c]:{};c%2?t(Object(r),!0).forEach(function(t){n(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function n(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=c(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=c(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==c(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function c(t){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c(t)}var r="undefined"!=typeof window&&"function"==typeof window.jQuery?window.jQuery:null;!function(t,n,r){function a(){var a=t.location.href,o=void 0!==n.title?n.title:"",i=n.querySelector(".ht-ctc-chat"),s={},_={};var l=function(){var t="",e=9999;try{t=navigator.userAgent||"",e=screen.width||9999}catch(t){}return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(t)||e<=1025?"yes":"no"}(),u=new Map,d=["__proto__","prototype","constructor","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"],h=function(t){return!("string"!=typeof t||0===t.length||!/^[a-zA-Z0-9_-]+$/.test(t))&&!d.includes(t)};function p(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return t&&"object"===c(t)&&h(e)&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:n}function v(t,e,n){return!(!t||"object"!==c(t)||!h(e))&&(t[e]=n,!0)}function f(){if(localStorage.getItem("ht_ctc_storage"))try{var t=JSON.parse(localStorage.getItem("ht_ctc_storage"));u=new Map(Object.entries(t||{}))}catch(t){u=new Map}else u=new Map}function y(t){return!(!h(t)||!u.has(t))&&u.get(t)}function g(t,e){if(f(),h(t)){u.set(t,e);var n=JSON.stringify(Object.fromEntries(u));localStorage.setItem("ht_ctc_storage",n)}}function m(t){return t instanceof Element?[t]:"string"==typeof t?Array.from(n.querySelectorAll(t)):[]}f();var b={show:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",o=m(t);if(r)return".ctc_opt_in"===t?void r(t).fadeOut(200).fadeIn(200).fadeOut(200).fadeIn(200):void r(t).show(e||void 0);o.forEach(function(t){c&&c.split(/\s+/).forEach(function(e){e.trim()&&t.classList.add(e.trim())}),a&&a.split(/\s+/).forEach(function(e){e.trim()&&t.classList.remove(e.trim())}),e?t.style.setProperty("--ht-ctc-el-duration","".concat(e,"ms")):t.style.removeProperty("--ht-ctc-el-duration"),n&&function(t,e){if(t&&e){"none"===t.style.display&&(t.style.display="");var n=e.split(/\s+/).filter(Boolean);n.forEach(function(e){t.classList.remove(e),t.offsetWidth,t.classList.add(e)});var c=function(){n.forEach(function(e){return t.classList.remove(e)}),t.removeEventListener("animationend",c),clearTimeout(r)},r=setTimeout(c,2e3);t.addEventListener("animationend",c)}}(t,n),c||a||e||n||(t.style.display="block")})},hide:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",o=m(t);r?r(t).hide(e):o.forEach(function(t){c&&t.classList.add(c),a&&t.classList.remove(a),e?t.style.setProperty("--ht-ctc-el-duration","".concat(e,"ms")):t.style.removeProperty("--ht-ctc-el-duration"),n&&t.classList.add("ht-ctc-".concat(n)),c||a||e||n||(t.style.display="none")})}};function k(){n.dispatchEvent(new CustomEvent("ht_ctc_event_configure",{detail:{ctc:s,ctc_values:_}}));var t=n.querySelector(".ht_ctc_chat_data");t&&t.remove();var e={config:{ctc:s,ctc_values:_,is_mobile:l,url:a,post_title:o},api:{storage:{get:y,set:g,raw:u},ui:b,greetings:{open:S,close:x,closeAfterClick:L,initListeners:E,display:w},notifications:{display:P,stop:T},chat:{openLink:D,displaySettings:j},utils:{isSafeObjectKey:h,getSafeProperty:p,setSafeProperty:v}}};n.dispatchEvent(new CustomEvent("ht_ctc_event_init",{detail:e})),n.dispatchEvent(new CustomEvent("ht_ctc_event_settings",{detail:{ctc:s}})),function(){if(i){n.dispatchEvent(new CustomEvent("ht_ctc_event_chat")),j(i),i.addEventListener("click",function(){n.querySelector(".ht_ctc_chat_greetings_box")||D(i)}),E(),i&&i.addEventListener("click",function(t){if(t.target.closest(".ht_ctc_chat_greetings_box_link")){t.preventDefault();var e=n.querySelector("#ctc_opt");e?e.checked||y("g_optin")?(D(i),L()):b.show(".ctc_opt_in","","ht-ctc-fade-in","",""):(D(i),L()),n.dispatchEvent(new CustomEvent("ht_ctc_event_greetings"))}});var t=n.querySelector("#ctc_opt");t&&t.addEventListener("change",function(){t.checked&&(n.querySelector(".ctc_opt_in")&&b.hide(".ctc_opt_in",100),g("g_optin","y"),setTimeout(function(){D(i),L()},500))})}}(),n.addEventListener("click",function(t){var e=t.target.closest(".ht-ctc-sc-chat");e&&D(e)}),n.addEventListener("click",function(t){var e=t.target.closest(".ctc_chat, #ctc_chat");e&&(D(e),e.classList.contains("ctc_woo_place")&&t.preventDefault());var n=t.target.closest('[href="#ctc_chat"]');n&&(t.preventDefault(),D(n))})}function E(){if(i){var t=n.querySelector(".ht_ctc_chat_greetings_box");t&&i.addEventListener("click",function(e){e.target.closest(".ht_ctc_chat_style")&&(t.classList.contains("ctc_greetings_opened")?x("user_closed"):S("user_opened"))}),i.addEventListener("click",function(t){t.target.closest(".ctc_greetings_close_btn")&&x("user_closed")})}}function w(){var t=n.querySelector(".ht_ctc_chat_greetings_box");if(t){if(s.g_device){if("yes"!==l&&"mobile"===s.g_device)return void t.remove();if("yes"===l&&"desktop"===s.g_device)return void t.remove()}n.dispatchEvent(new CustomEvent("ht_ctc_event_after_chat_displayed",{detail:{ctc:s,greetings_open:S,greetings_close:x}})),s.g_init&&"user_closed"!==y("g_user_action")&&("default"===s.g_init?"yes"!==l&&S("init"):"open"===s.g_init&&S("init"));var e=n.querySelectorAll('.ctc_greetings, #ctc_greetings, .ctc_greetings_now, [href="#ctc_greetings"]');e.length>0&&e.forEach(function(t){t.addEventListener("click",function(t){t.preventDefault(),x("element"),S("element")})})}}function S(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"open";T();var e=n.querySelector(".ht-ctc-chat .ctc_cta_stick");e&&e.remove();var c=n.querySelector(".ht_ctc_chat_greetings_box");c&&(b.show(".ht_ctc_chat_greetings_box","init"===t?70:400,"","ht_ctc_greetings_box_open",""),c.classList.add("ctc_greetings_opened"),c.classList.remove("ctc_greetings_closed")),g("g_action",t),"user_opened"===t&&g("g_user_action",t),function(){if(!n.querySelector(".ctc_greetings_modal"))return;if(!n.querySelector(".ht_ctc_modal_backdrop")){var t=function(e){"Escape"===e.key&&(x("user_closed"),n.removeEventListener("keydown",t))},e=n.createElement("div");e.className="ht_ctc_modal_backdrop",n.body.appendChild(e),e.addEventListener("click",function(){x("user_closed")}),n.addEventListener("keydown",t)}}()}function L(){O(),setTimeout(function(){x("chat_clicked")},500)}function x(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"close";O(),"element"===t?b.hide(".ht_ctc_chat_greetings_box",70,"","ht-ctc-display-unset",""):b.hide(".ht_ctc_chat_greetings_box",400,"","","ht_ctc_greetings_box_open");var e=n.querySelector(".ht_ctc_chat_greetings_box");e&&(e.classList.add("ctc_greetings_closed"),e.classList.remove("ctc_greetings_opened")),g("g_action",t),"user_closed"===t&&g("g_user_action",t)}function O(){var t=n.querySelector(".ht_ctc_modal_backdrop");t&&t.remove()}function j(t){s.schedule&&"yes"===s.schedule?n.dispatchEvent(new CustomEvent("ht_ctc_event_display",{detail:{ctc:s,display_chat:q,ht_ctc_chat:t,online_content:C}})):(q(t),C())}function q(t){if("yes"===l){if("show"===s.dis_m){var e=n.querySelector(".ht_ctc_desktop_chat");e&&e.remove(),t.style.cssText=s.pos_m+s.css,s.side_m&&t.style.setProperty("--side",s.side_m),A(t)}}else if("show"===s.dis_d){var c=n.querySelector(".ht_ctc_mobile_chat");c&&c.remove(),t.style.cssText=s.pos_d+s.css,s.side_d&&t.style.setProperty("--side",s.side_d),A(t)}}function A(t){var e=s.se;e=parseInt(s.se),isNaN(e)?b.show(t,"","","ht-ctc-display-unset",""):b.show(t,e,"","ht-ctc-display-unset",""),w(),P(),function(t){var e=t.classList.contains("ht_ctc_entry_animation")?1200:120;setTimeout(function(){t.classList.add("ht_ctc_animation",s.ani)},e);var c=n.querySelector(".ht-ctc-chat"),r=n.querySelector(".ht-ctc-chat .ht-ctc-cta-hover");c&&r&&(c.addEventListener("mouseenter",function(){b.show(".ht-ctc-chat .ht-ctc-cta-hover",120,"","ht-ctc-cta-stick","ht-ctc-opacity-hide")}),c.addEventListener("mouseleave",function(){b.hide(".ht-ctc-chat .ht-ctc-cta-hover",100,"","ht-ctc-opacity-hide","ht-ctc-cta-stick")}))}(t)}function C(){n.querySelector(".for_greetings_header_image_badge")&&(n.querySelectorAll(".for_greetings_header_image_badge").forEach(function(t){t.classList.add("g_header_badge_online")}),b.show(".for_greetings_header_image_badge","","","ht-ctc-display-unset",""))}function P(){var t=n.querySelector(".ht_ctc_notification");if(t&&"stop"!==y("n_badge")){var e=n.querySelector(".ctc_nb");if(e){var c=e.closest(".ht_ctc_style"),r=n.querySelector(".ht_ctc_badge");if(c&&r){var a,o,i=null===(a=c.querySelector(".ctc_nb"))||void 0===a?void 0:a.getAttribute("data-nb_top"),_=null===(o=c.querySelector(".ctc_nb"))||void 0===o?void 0:o.getAttribute("data-nb_right");null!==i&&(r.style.top=i),null!==_&&(r.style.right=_)}}var l=s.n_time?1e3*s.n_time:150;setTimeout(function(){t.style.display=""},l)}}function T(){var t=n.querySelector(".ht_ctc_notification");t&&(g("n_badge","stop"),t.remove())}function I(r){if(s.analytics&&"session"===s.analytics){if(sessionStorage.getItem("ht_ctc_analytics"))return;sessionStorage.setItem("ht_ctc_analytics","done")}function i(e){var c=s.chat_number&&""!==s.chat_number?s.chat_number:s.number;try{n.dispatchEvent(new CustomEvent("ht_ctc_event_apply_variables",{detail:{templateString:e}})),e=(e=(e=(e=void 0!==t.apply_variables_value?t.apply_variables_value:e).replace("{number}",c)).replace("{title}",o)).replace("{url}",a)}catch(t){}return e}var l="event_"+Math.floor(1e4+9e4*Math.random());s.ctc_pixel_event_id=l,n.dispatchEvent(new CustomEvent("ht_ctc_event_analytics"));var u=s.chat_number&&""!==s.chat_number?s.chat_number:s.number,d=new Map,f=function(){return Object.fromEntries(d)},y="Click to Chat for WhatsApp",g="chat: "+u,m=o+", "+a;if(s.ga){var b=s.g_an_event_name&&""!==s.g_an_event_name?s.g_an_event_name:"click to chat";b=i(b),Array.isArray(_.g_an_params)&&_.g_an_params.forEach(function(t){if("string"==typeof t&&h(t)){var e=p(_,t);if(e&&"object"===c(e)){var n=e.key,r=e.value;"string"==typeof n&&(n=i(n),r=i(r),h(n)&&d.set(n,r))}}});var k=0,E="no",w=[];if("undefined"!=typeof dataLayer)try{var S=function(t,e){t&&"string"==typeof t&&""!==t.trim()&&(w.includes(t)||w.push(t))};"undefined"==typeof gtag&&(t.gtag=function(){var t;(t=dataLayer).push.apply(t,arguments)},E="yes");var L=[];try{var x,O=null===(x=t.google_tag_data)||void 0===x?void 0:x.tidr;null!=O&&O.destination&&"object"===c(O.destination)&&Object.keys(O.destination).forEach(function(t){S(t)})}catch(t){}try{var j,q=null===(j=t.google_tag_data)||void 0===j||null===(j=j.tidr)||void 0===j?void 0:j.container;q&&"object"===c(q)&&Object.values(q).forEach(function(t){Array.isArray(t.destinations)&&t.destinations.forEach(function(t){"string"==typeof t&&t.startsWith("G-")&&S(t)})})}catch(t){}try{Array.isArray(t.dataLayer)&&t.dataLayer.forEach(function(t){Array.isArray(t)&&"config"===t[0]&&"string"==typeof t[1]?S(t[1]):null!=t&&t.send_to&&"string"==typeof t.send_to&&S(t.send_to)})}catch(t){}w.forEach(function(t){var e;e=(e=t).toUpperCase(),L.includes(e)||(L.push(e),(e.startsWith("G-")||e.startsWith("GT-"))&&(d.set("send_to",e),gtag("event",b,f()),k++))})}catch(t){}if(0===k&&"no"===E)if("undefined"!=typeof gtag)gtag("event",b,f());else if("undefined"!=typeof ga&&void 0!==ga.getAll){ga.getAll()[0].send("event",y,g,m)}else"undefined"!=typeof __gaTracker&&__gaTracker("send","event",y,g,m)}if("undefined"!=typeof dataLayer){if(s.gtm){var A=s.gtm_event_name||"Click to chat";A=i(A);var C={};C.event=A,Array.isArray(_.gtm_params)&&_.gtm_params.forEach(function(t){if("string"==typeof t&&h(t)){var e=p(_,t);if(e&&"object"===c(e)){var n=i(e.key),r=i(e.value);h(n)&&v(C,n,r)}}}),dataLayer.push(C)}if(s.g_an_gtm){var P=e(e({},f()),{},{event:null!=b?b:"chat_click",ref:"dataLayer push ga admin values"});dataLayer.push(P)}}if(s.ads&&"undefined"!=typeof gtag_report_conversion&&gtag_report_conversion(),s.fb&&"undefined"!=typeof fbq){var T=s.pixel_event_name&&""!==s.pixel_event_name?s.pixel_event_name:"Click to Chat by HoliThemes",I=_.pixel_event_type&&""!==_.pixel_event_type?_.pixel_event_type:"trackCustom",D=new Map;Array.isArray(_.pixel_params)&&_.pixel_params.forEach(function(t){if("string"==typeof t&&h(t)){var e=p(_,t);if(e&&"object"===c(e)){var n=e.key,r=e.value;"string"==typeof n&&(n=i(n),r=i(r),h(n)&&D.set(n,r))}}}),s.ctc_pixel_event_id="",fbq(I,T,Object.fromEntries(D),{eventID:l})}}function D(e){n.dispatchEvent(new CustomEvent("ht_ctc_event_number",{detail:{ctc:s}}));var c=s.number,r=s.pre_filled;if(e.hasAttribute("data-number")&&""!==e.getAttribute("data-number")&&(c=e.getAttribute("data-number")),e.hasAttribute("data-pre_filled")){var a=e.getAttribute("data-pre_filled")||"";r=(s.prefix_pre_filled?s.prefix_pre_filled:"")+a}try{r=r.replaceAll("%","%25");var o=t.location.href;r=r.replace(/\[url]/gi,o),r=encodeURIComponent(decodeURI(r))}catch(t){}if(""!==c||s.custom_url_m&&""!==s.custom_url_m||s.custom_url_d&&""!==s.custom_url_d){var i="https://wa.me/"+c+"?text="+r,_=s.url_target_d?s.url_target_d:"_blank";"yes"===l?(s.url_structure_m&&"wa_colon"===s.url_structure_m&&(i="whatsapp://send?phone="+c+"&text="+r,_="_self"),s.custom_url_m&&""!==s.custom_url_m&&(i=s.custom_url_m)):(s.url_structure_d&&"web"===s.url_structure_d&&(i="https://web.whatsapp.com/send?phone="+c+"&text="+r),s.custom_url_d&&""!==s.custom_url_d&&(i=s.custom_url_d));var u="popup"===_?"scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=788,height=514,left=100,top=100":"noopener";t.open(i,_,u),s.chat_number=c,I(),function(t){var e=s&&s.hook_url;if(!e)return;var c,r={},a={};if(s.hook_v){if(r=void 0!==M?M:s.hook_v,!Array.isArray(r))return;var o={},i=1;r.forEach(function(t){v(o,"value"+i,t),i++}),s.hook_v=o}n.dispatchEvent(new CustomEvent("ht_ctc_event_hook",{detail:{ctc:s,number:t}})),r=s.hook_v,"json"===s.webhook_format?(a["Content-Type"]="application/json",c=JSON.stringify(r)):(a["Content-Type"]="application/x-www-form-urlencoded;charset=UTF-8",c=new URLSearchParams(r).toString());fetch(e,{method:"POST",headers:a,body:c}).then(function(t){}).catch(function(t){})}(c),T()}else if(s.no_number){var d=n.querySelector(".ctc-no-number-message");d&&(d.style.display="block")}}"undefined"!=typeof ht_ctc_chat_var&&(s=ht_ctc_chat_var),"undefined"!=typeof ht_ctc_variables&&(_=ht_ctc_variables),0===Object.keys(s).length||0===Object.keys(_).length?function(){var e=n.querySelector(".ht_ctc_chat_data");if(0===Object.keys(s).length&&e)try{var c=(null==e?void 0:e.getAttribute("data-settings"))||"";s=JSON.parse(c),t.ht_ctc_chat_var=s}catch(t){}0===Object.keys(_).length&&(_={g_an_event_name:"click to chat",pixel_event_name:"Click to Chat by HoliThemes",pixel_event_type:"trackCustom",g_an_params:["g_an_param_1","g_an_param_2","g_an_param_3"],g_an_param_1:{key:"number",value:"{number}"},g_an_param_2:{key:"title",value:"{title}"},g_an_param_3:{key:"url",value:"{url}"},pixel_params:["pixel_param_1","pixel_param_2","pixel_param_3","pixel_param_4"],pixel_param_1:{key:"Category",value:"Click to Chat for WhatsApp"},pixel_param_2:{key:"return_type",value:"chat"},pixel_param_3:{key:"ID",value:"{number}"},pixel_param_4:{key:"Title",value:"{title}"}},t.ht_ctc_variables=_);k()}():k();var M=s.hook_v?s.hook_v:""}r||function(){var t=n.querySelector(".ht_ctc_chat_greetings_box"),e=n.querySelector(".ht_ctc_greetings");t&&e&&(e.style.setProperty("pointer-events","none"),t.classList.add("ht_ctc_greetings_box"),t.style.removeProperty("display"),t.style.setProperty("pointer-events","auto"));var c=n.querySelector(".ht-ctc-chat .ht-ctc-cta-hover");c&&(c.classList.add("ht-ctc-opacity-hide"),c.style.removeProperty("display"))}(),"loading"!==n.readyState?a():n.addEventListener("DOMContentLoaded",a)}(window,document,r)})();
     1(()=>{"use strict";function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);e&&(c=c.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,c)}return n}function e(e){for(var c=1;c<arguments.length;c++){var r=null!=arguments[c]?arguments[c]:{};c%2?t(Object(r),!0).forEach(function(t){n(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function n(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=c(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=c(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==c(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function c(t){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c(t)}var r="undefined"!=typeof window&&"function"==typeof window.jQuery?window.jQuery:null;!function(t,n,r){function a(){var a=t.location.href,o=void 0!==n.title?n.title:"",i=n.querySelector(".ht-ctc-chat"),s={},_={};var l=function(){var t="",e=9999;try{t=navigator.userAgent||"",e=screen.width||9999}catch(t){}return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(t)||e<=1025?"yes":"no"}(),u=new Map,d=["__proto__","prototype","constructor","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"],h=function(t){return!("string"!=typeof t||0===t.length||!/^[a-zA-Z0-9_-]+$/.test(t))&&!d.includes(t)};function v(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return t&&"object"===c(t)&&h(e)&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:n}function f(t,e,n){return!(!t||"object"!==c(t)||!h(e))&&(t[e]=n,!0)}function p(){if(localStorage.getItem("ht_ctc_storage"))try{var t=JSON.parse(localStorage.getItem("ht_ctc_storage"));u=new Map(Object.entries(t||{}))}catch(t){u=new Map}else u=new Map}function y(t){return!(!h(t)||!u.has(t))&&u.get(t)}function g(t,e){if(p(),h(t)){u.set(t,e);var n=JSON.stringify(Object.fromEntries(u));localStorage.setItem("ht_ctc_storage",n)}}function m(t){return t instanceof Element?[t]:"string"==typeof t?Array.from(n.querySelectorAll(t)):[]}p();var b={show:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",o=m(t);if(r)return".ctc_opt_in"===t?void r(t).fadeOut(200).fadeIn(200).fadeOut(200).fadeIn(200):void r(t).show(e||void 0);o.forEach(function(t){c&&c.split(/\s+/).forEach(function(e){e.trim()&&t.classList.add(e.trim())}),a&&a.split(/\s+/).forEach(function(e){e.trim()&&t.classList.remove(e.trim())}),e?t.style.setProperty("--ht-ctc-el-duration","".concat(e,"ms")):t.style.removeProperty("--ht-ctc-el-duration"),n&&function(t,e){if(t&&e){"none"===t.style.display&&(t.style.display="");var n=e.split(/\s+/).filter(Boolean);n.forEach(function(e){t.classList.remove(e),t.offsetWidth,t.classList.add(e)});var c=function(){n.forEach(function(e){return t.classList.remove(e)}),t.removeEventListener("animationend",c),clearTimeout(r)},r=setTimeout(c,2e3);t.addEventListener("animationend",c)}}(t,n),c||a||e||n||(t.style.display="block")})},hide:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",o=m(t);r?r(t).hide(e):o.forEach(function(t){c&&t.classList.add(c),a&&t.classList.remove(a),e?t.style.setProperty("--ht-ctc-el-duration","".concat(e,"ms")):t.style.removeProperty("--ht-ctc-el-duration"),n&&t.classList.add("ht-ctc-".concat(n)),c||a||e||n||(t.style.display="none")})}};function k(){n.dispatchEvent(new CustomEvent("ht_ctc_event_configure",{detail:{ctc:s,ctc_values:_}}));var t=n.querySelector(".ht_ctc_chat_data");t&&t.remove();var e={config:{ctc:s,ctc_values:_,is_mobile:l,url:a,post_title:o},api:{storage:{get:y,set:g,raw:u},ui:b,greetings:{open:S,close:x,closeAfterClick:L,initListeners:E,display:w},notifications:{display:C,stop:T},chat:{openLink:D,displaySettings:j},utils:{isSafeObjectKey:h,getSafeProperty:v,setSafeProperty:f}}};n.dispatchEvent(new CustomEvent("ht_ctc_event_init",{detail:e})),n.dispatchEvent(new CustomEvent("ht_ctc_event_settings",{detail:{ctc:s}})),function(){if(i){n.dispatchEvent(new CustomEvent("ht_ctc_event_chat")),j(i),i.addEventListener("click",function(){n.querySelector(".ht_ctc_chat_greetings_box")||D(i)}),E(),i&&i.addEventListener("click",function(t){if(t.target.closest(".ht_ctc_chat_greetings_box_link")){t.preventDefault();var e=n.querySelector("#ctc_opt");e?e.checked||y("g_optin")?(D(i),L()):b.show(".ctc_opt_in","","ht-ctc-fade-in","",""):(D(i),L()),n.dispatchEvent(new CustomEvent("ht_ctc_event_greetings"))}});var t=n.querySelector("#ctc_opt");t&&t.addEventListener("change",function(){t.checked&&(n.querySelector(".ctc_opt_in")&&b.hide(".ctc_opt_in",100),g("g_optin","y"),setTimeout(function(){D(i),L()},500))})}}(),n.addEventListener("click",function(t){var e=t.target.closest(".ht-ctc-sc-chat");e&&D(e)}),n.addEventListener("click",function(t){var e=t.target.closest(".ctc_chat, #ctc_chat");e&&(D(e),e.classList.contains("ctc_woo_place")&&t.preventDefault());var n=t.target.closest('[href="#ctc_chat"]');n&&(t.preventDefault(),D(n))})}function E(){if(i){var t=n.querySelector(".ht_ctc_chat_greetings_box");t&&i.addEventListener("click",function(e){e.target.closest(".ht_ctc_chat_style")&&(t.classList.contains("ctc_greetings_opened")?x("user_closed"):S("user_opened"))}),i.addEventListener("click",function(t){t.target.closest(".ctc_greetings_close_btn")&&x("user_closed")})}}function w(){var t=n.querySelector(".ht_ctc_chat_greetings_box");if(t){if(s.g_device){if("yes"!==l&&"mobile"===s.g_device)return void t.remove();if("yes"===l&&"desktop"===s.g_device)return void t.remove()}n.dispatchEvent(new CustomEvent("ht_ctc_event_after_chat_displayed",{detail:{ctc:s,greetings_open:S,greetings_close:x}})),s.g_init&&"user_closed"!==y("g_user_action")&&("default"===s.g_init?"yes"!==l&&S("init"):"open"===s.g_init&&S("init"));var e=n.querySelectorAll('.ctc_greetings, #ctc_greetings, .ctc_greetings_now, [href="#ctc_greetings"]');e.length>0&&e.forEach(function(t){t.addEventListener("click",function(t){t.preventDefault(),x("element"),S("element")})})}}function S(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"open";T();var e=n.querySelector(".ht-ctc-chat .ctc_cta_stick");e&&e.remove();var c=n.querySelector(".ht_ctc_chat_greetings_box");c&&(b.show(".ht_ctc_chat_greetings_box","init"===t?70:400,"","ht_ctc_greetings_box_open",""),c.classList.add("ctc_greetings_opened"),c.classList.remove("ctc_greetings_closed")),g("g_action",t),"user_opened"===t&&g("g_user_action",t),function(){if(!n.querySelector(".ctc_greetings_modal"))return;if(!n.querySelector(".ht_ctc_modal_backdrop")){var t=function(e){"Escape"===e.key&&(x("user_closed"),n.removeEventListener("keydown",t))},e=n.createElement("div");e.className="ht_ctc_modal_backdrop",n.body.appendChild(e),e.addEventListener("click",function(){x("user_closed")}),n.addEventListener("keydown",t)}}()}function L(){O(),setTimeout(function(){x("chat_clicked")},500)}function x(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"close";O(),"element"===t?b.hide(".ht_ctc_chat_greetings_box",70,"","ht-ctc-display-unset",""):b.hide(".ht_ctc_chat_greetings_box",400,"","","ht_ctc_greetings_box_open");var e=n.querySelector(".ht_ctc_chat_greetings_box");e&&(e.classList.add("ctc_greetings_closed"),e.classList.remove("ctc_greetings_opened")),g("g_action",t),"user_closed"===t&&g("g_user_action",t)}function O(){var t=n.querySelector(".ht_ctc_modal_backdrop");t&&t.remove()}function j(t){s.schedule&&"yes"===s.schedule?n.dispatchEvent(new CustomEvent("ht_ctc_event_display",{detail:{ctc:s,display_chat:q,ht_ctc_chat:t,online_content:P}})):(q(t),P())}function q(t){if("yes"===l){if("show"===s.dis_m){var e=n.querySelector(".ht_ctc_desktop_chat");e&&e.remove(),t.style.cssText=s.pos_m+s.css,s.side_m&&t.style.setProperty("--side",s.side_m),A(t)}}else if("show"===s.dis_d){var c=n.querySelector(".ht_ctc_mobile_chat");c&&c.remove(),t.style.cssText=s.pos_d+s.css,s.side_d&&t.style.setProperty("--side",s.side_d),A(t)}}function A(t){var e=s.se;e=parseInt(s.se),isNaN(e)?b.show(t,"","","ht-ctc-display-unset",""):b.show(t,e,"","ht-ctc-display-unset",""),w(),C(),function(t){var e=t.classList.contains("ht_ctc_entry_animation")?1200:120;setTimeout(function(){t.classList.add("ht_ctc_animation",s.ani)},e);var c=n.querySelector(".ht-ctc-chat"),r=n.querySelector(".ht-ctc-chat .ht-ctc-cta-hover");c&&r&&(c.addEventListener("mouseenter",function(){b.show(".ht-ctc-chat .ht-ctc-cta-hover",120,"","ht-ctc-cta-stick","ht-ctc-opacity-hide")}),c.addEventListener("mouseleave",function(){b.hide(".ht-ctc-chat .ht-ctc-cta-hover",100,"","ht-ctc-opacity-hide","ht-ctc-cta-stick")}))}(t)}function P(){n.querySelector(".for_greetings_header_image_badge")&&(n.querySelectorAll(".for_greetings_header_image_badge").forEach(function(t){t.classList.add("g_header_badge_online")}),b.show(".for_greetings_header_image_badge","","","ht-ctc-display-unset",""))}function C(){var t=n.querySelector(".ht_ctc_notification");if(t&&"stop"!==y("n_badge")){var e=n.querySelector(".ctc_nb");if(e){var c=e.closest(".ht_ctc_style"),r=n.querySelector(".ht_ctc_badge");if(c&&r){var a,o,i=null===(a=c.querySelector(".ctc_nb"))||void 0===a?void 0:a.getAttribute("data-nb_top"),_=null===(o=c.querySelector(".ctc_nb"))||void 0===o?void 0:o.getAttribute("data-nb_right");null!==i&&(r.style.top=i),null!==_&&(r.style.right=_)}}var l=s.n_time?1e3*s.n_time:150;setTimeout(function(){t.style.display=""},l)}}function T(){var t=n.querySelector(".ht_ctc_notification");t&&(g("n_badge","stop"),t.remove())}function I(r){if(s.analytics&&"session"===s.analytics){if(sessionStorage.getItem("ht_ctc_analytics"))return;sessionStorage.setItem("ht_ctc_analytics","done")}function i(e){var c=s.chat_number&&""!==s.chat_number?s.chat_number:s.number;try{n.dispatchEvent(new CustomEvent("ht_ctc_event_apply_variables",{detail:{templateString:e}})),e=(e=(e=(e=void 0!==t.apply_variables_value?t.apply_variables_value:e).replace("{number}",c)).replace("{title}",o)).replace("{url}",a)}catch(t){}return e}var l="event_"+Math.floor(1e4+9e4*Math.random());s.ctc_pixel_event_id=l,n.dispatchEvent(new CustomEvent("ht_ctc_event_analytics"));var u=s.chat_number&&""!==s.chat_number?s.chat_number:s.number,d=new Map,p=function(){return Object.fromEntries(d)},y="Click to Chat for WhatsApp",g="chat: "+u,m=o+", "+a;if(s.ga){var b=s.g_an_event_name&&""!==s.g_an_event_name?s.g_an_event_name:"click to chat";b=i(b),Array.isArray(_.g_an_params)&&_.g_an_params.forEach(function(t){if("string"==typeof t&&h(t)){var e=v(_,t);if(e&&"object"===c(e)){var n=e.key,r=e.value;"string"==typeof n&&(n=i(n),r=i(r),h(n)&&d.set(n,r))}}});var k=0,E="no",w=[];if("undefined"!=typeof dataLayer)try{var S=function(t,e){t&&"string"==typeof t&&""!==t.trim()&&(w.includes(t)||w.push(t))};"undefined"==typeof gtag&&(t.gtag=function(){var t;(t=dataLayer).push.apply(t,arguments)},E="yes");var L=[];try{var x,O=null===(x=t.google_tag_data)||void 0===x?void 0:x.tidr;null!=O&&O.destination&&"object"===c(O.destination)&&Object.keys(O.destination).forEach(function(t){S(t)})}catch(t){}try{var j,q=null===(j=t.google_tag_data)||void 0===j||null===(j=j.tidr)||void 0===j?void 0:j.container;q&&"object"===c(q)&&Object.values(q).forEach(function(t){Array.isArray(t.destinations)&&t.destinations.forEach(function(t){"string"==typeof t&&t.startsWith("G-")&&S(t)})})}catch(t){}try{Array.isArray(t.dataLayer)&&t.dataLayer.forEach(function(t){Array.isArray(t)&&"config"===t[0]&&"string"==typeof t[1]?S(t[1]):null!=t&&t.send_to&&"string"==typeof t.send_to&&S(t.send_to)})}catch(t){}w.forEach(function(t){var e;e=(e=t).toUpperCase(),L.includes(e)||(L.push(e),(e.startsWith("G-")||e.startsWith("GT-"))&&(d.set("send_to",e),gtag("event",b,p()),k++))})}catch(t){}if(0===k&&"no"===E)if("undefined"!=typeof gtag)gtag("event",b,p());else if("undefined"!=typeof ga&&void 0!==ga.getAll){ga.getAll()[0].send("event",y,g,m)}else"undefined"!=typeof __gaTracker&&__gaTracker("send","event",y,g,m)}if("undefined"!=typeof dataLayer){if(s.gtm){var A=s.gtm_event_name||"Click to chat";A=i(A);var P={};P.event=A,Array.isArray(_.gtm_params)&&_.gtm_params.forEach(function(t){if("string"==typeof t&&h(t)){var e=v(_,t);if(e&&"object"===c(e)){var n=i(e.key),r=i(e.value);h(n)&&f(P,n,r)}}}),dataLayer.push(P)}if(s.g_an_gtm){var C=e(e({},p()),{},{event:null!=b?b:"chat_click",ref:"dataLayer push ga admin values"});dataLayer.push(C)}}if(s.ads&&"undefined"!=typeof gtag_report_conversion&&gtag_report_conversion(),s.fb&&"undefined"!=typeof fbq){var T=s.pixel_event_name&&""!==s.pixel_event_name?s.pixel_event_name:"Click to Chat by HoliThemes",I=_.pixel_event_type&&""!==_.pixel_event_type?_.pixel_event_type:"trackCustom",D=new Map;Array.isArray(_.pixel_params)&&_.pixel_params.forEach(function(t){if("string"==typeof t&&h(t)){var e=v(_,t);if(e&&"object"===c(e)){var n=e.key,r=e.value;"string"==typeof n&&(n=i(n),r=i(r),h(n)&&D.set(n,r))}}}),s.ctc_pixel_event_id="",fbq(I,T,Object.fromEntries(D),{eventID:l})}}function D(e){n.dispatchEvent(new CustomEvent("ht_ctc_event_number",{detail:{ctc:s}}));var r=s.number,a=s.pre_filled;if(e.hasAttribute("data-number")&&""!==e.getAttribute("data-number")&&(r=e.getAttribute("data-number")),e.hasAttribute("data-pre_filled")){var o=e.getAttribute("data-pre_filled")||"";a=(s.prefix_pre_filled?s.prefix_pre_filled:"")+o}try{a=a.replaceAll("%","%25");var i=t.location.href;a=a.replace(/\[url]/gi,i),a=encodeURIComponent(decodeURI(a))}catch(t){}if(""!==r||s.custom_url_m&&""!==s.custom_url_m||s.custom_url_d&&""!==s.custom_url_d){var _="https://wa.me/"+r+"?text="+a,u=s.url_target_d?s.url_target_d:"_blank";"yes"===l?(s.url_structure_m&&"wa_colon"===s.url_structure_m&&(_="whatsapp://send?phone="+r+"&text="+a,u="_self"),s.custom_url_m&&""!==s.custom_url_m&&(_=s.custom_url_m)):(s.url_structure_d&&"web"===s.url_structure_d&&(_="https://web.whatsapp.com/send?phone="+r+"&text="+a),s.custom_url_d&&""!==s.custom_url_d&&(_=s.custom_url_d));var d="popup"===u?"scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=788,height=514,left=100,top=100":"noopener";t.open(_,u,d),s.chat_number=r,I(),function(t){var e=s&&s.hook_url;if(!e)return;if(Array.isArray(M)){var r={};M.forEach(function(t,e){f(r,"value"+(e+1),t)}),s.hook_v=r}n.dispatchEvent(new CustomEvent("ht_ctc_event_hook",{detail:{ctc:s,number:t}}));var a,o=s.hook_v&&"object"===c(s.hook_v)?s.hook_v:{};s.hook_url&&(e=s.hook_url);var i="application/x-www-form-urlencoded;charset=UTF-8";if("json"===s.webhook_format){var _=new URLSearchParams;Object.keys(o).forEach(function(t){var e=v(o,t);_.append(t,"object"===c(e)?JSON.stringify(e):e)}),a=_.toString()}else a=new URLSearchParams(o).toString();fetch(e,{method:"POST",headers:{"Content-Type":i},body:a}).then(function(t){}).catch(function(t){})}(r),T()}else if(s.no_number){var h=n.querySelector(".ctc-no-number-message");h&&(h.style.display="block")}}"undefined"!=typeof ht_ctc_chat_var&&(s=ht_ctc_chat_var),"undefined"!=typeof ht_ctc_variables&&(_=ht_ctc_variables),0===Object.keys(s).length||0===Object.keys(_).length?function(){var e=n.querySelector(".ht_ctc_chat_data");if(0===Object.keys(s).length&&e)try{var c=(null==e?void 0:e.getAttribute("data-settings"))||"";s=JSON.parse(c),t.ht_ctc_chat_var=s}catch(t){}0===Object.keys(_).length&&(_={g_an_event_name:"click to chat",pixel_event_name:"Click to Chat by HoliThemes",pixel_event_type:"trackCustom",g_an_params:["g_an_param_1","g_an_param_2","g_an_param_3"],g_an_param_1:{key:"number",value:"{number}"},g_an_param_2:{key:"title",value:"{title}"},g_an_param_3:{key:"url",value:"{url}"},pixel_params:["pixel_param_1","pixel_param_2","pixel_param_3","pixel_param_4"],pixel_param_1:{key:"Category",value:"Click to Chat for WhatsApp"},pixel_param_2:{key:"return_type",value:"chat"},pixel_param_3:{key:"ID",value:"{number}"},pixel_param_4:{key:"Title",value:"{title}"}},t.ht_ctc_variables=_);k()}():k();var M=s.hook_v?s.hook_v:""}r||function(){var t=n.querySelector(".ht_ctc_chat_greetings_box"),e=n.querySelector(".ht_ctc_greetings");t&&e&&(e.style.setProperty("pointer-events","none"),t.classList.add("ht_ctc_greetings_box"),t.style.removeProperty("display"),t.style.setProperty("pointer-events","auto"));var c=n.querySelector(".ht-ctc-chat .ht-ctc-cta-hover");c&&(c.classList.add("ht-ctc-opacity-hide"),c.style.removeProperty("display"))}(),"loading"!==n.readyState?a():n.addEventListener("DOMContentLoaded",a)}(window,document,r)})();
  • click-to-chat-for-whatsapp/trunk/new/inc/assets/js/dev/app.dev.js

    r3442197 r3452866  
    407407
    408408        };
    409 
    410         // Build the payload for other scripts (pro.js, date.js, custom code, etc.)
    411         function buildHtCtcInitDetail () {
    412 
    413             // ---------------------------------------------
    414             // CONFIG (raw values)
    415             // ---------------------------------------------
    416             const config = {
    417                 // version: '4.34',
    418                 ctc: ctc,                // main config from wp_localize_script
    419                 ctc_values: ctc_values, // secondary config
    420                 is_mobile: is_mobile,
    421                 url: url,
    422                 post_title: post_title,
    423 
    424                 // storage: ht_ctc_storage,
    425             };
    426 
    427             // ---------------------------------------------
    428             // API (all most of functions)
    429             // ---------------------------------------------
    430             const api = {
    431 
    432                 // --------------------------
    433                 // Storage API
    434                 // --------------------------
    435                 storage: {
    436                     get: ctc_getItem,
    437                     set: ctc_setItem,
    438                     raw: ht_ctc_storage,
    439                 },
    440 
    441                 // --------------------------
    442                 // API (all most of functions)
    443                 // --------------------------
    444                 ui: ui,             // ← unified UI system
    445 
    446                 // --------------------------
    447                 // Greetings system
    448                 // --------------------------
    449                 greetings: {
    450                     open: greetings_open,
    451                     close: greetings_close,
    452                     closeAfterClick: greetings_close_500,
    453                     initListeners: greetings,
    454                     display: greetings_display,
    455                 },
    456 
    457                 // --------------------------
    458                 // Notifications system
    459                 // --------------------------
    460                 notifications: {
    461                     display: display_notifications,
    462                     stop: stop_notification_badge,
    463                 },
    464 
    465                 // --------------------------
    466                 // Chat functions
    467                 // --------------------------
    468                 chat: {
    469                     openLink: ht_ctc_link,
    470                     displaySettings: display_settings,
    471                 },
    472 
    473                 // --------------------------
    474                 // Utility functions
    475                 // --------------------------
    476                 utils: {
    477                     isSafeObjectKey,
    478                     getSafeProperty,
    479                     setSafeProperty,
    480 
    481                     // timeOnWp: time_on_wordpress,
    482                     // applyVariables: apply_variables,
    483                 },
    484             };
    485 
    486             // // an event listener so that other scripts can access config + api together and update if needed
    487             // this.dispatchEvent(new CustomEvent('ht_ctc_event_build_config', {
    488             //  detail: {
    489             //      config,
    490             //      api,
    491             //  }
    492             // }));
    493 
    494             return {
    495                 config,
    496                 api,
    497             };
    498         }
    499409
    500410        // Initialize plugin configuration containers
     
    702612        //  }
    703613        // }
     614
     615        // Build the payload for other scripts (pro.js, date.js, custom code, etc.)
     616        function buildHtCtcInitDetail () {
     617
     618            // ---------------------------------------------
     619            // CONFIG (raw values)
     620            // ---------------------------------------------
     621            const config = {
     622                // version: '4.34',
     623                ctc: ctc,                // main config from wp_localize_script
     624                ctc_values: ctc_values, // secondary config
     625                is_mobile: is_mobile,
     626                url: url,
     627                post_title: post_title,
     628
     629                // storage: ht_ctc_storage,
     630            };
     631
     632            // ---------------------------------------------
     633            // API (all most of functions)
     634            // ---------------------------------------------
     635            const api = {
     636
     637                // --------------------------
     638                // Storage API
     639                // --------------------------
     640                storage: {
     641                    get: ctc_getItem,
     642                    set: ctc_setItem,
     643                    raw: ht_ctc_storage,
     644                },
     645
     646                // --------------------------
     647                // API (all most of functions)
     648                // --------------------------
     649                ui: ui,             // ← unified UI system
     650
     651                // --------------------------
     652                // Greetings system
     653                // --------------------------
     654                greetings: {
     655                    open: greetings_open,
     656                    close: greetings_close,
     657                    closeAfterClick: greetings_close_500,
     658                    initListeners: greetings,
     659                    display: greetings_display,
     660                },
     661
     662                // --------------------------
     663                // Notifications system
     664                // --------------------------
     665                notifications: {
     666                    display: display_notifications,
     667                    stop: stop_notification_badge,
     668                },
     669
     670                // --------------------------
     671                // Chat functions
     672                // --------------------------
     673                chat: {
     674                    openLink: ht_ctc_link,
     675                    displaySettings: display_settings,
     676                },
     677
     678                // --------------------------
     679                // Utility functions
     680                // --------------------------
     681                utils: {
     682                    isSafeObjectKey,
     683                    getSafeProperty,
     684                    setSafeProperty,
     685
     686                    // timeOnWp: time_on_wordpress,
     687                    // applyVariables: apply_variables,
     688                },
     689            };
     690
     691            // // an event listener so that other scripts can access config + api together and update if needed
     692            // this.dispatchEvent(new CustomEvent('ht_ctc_event_build_config', {
     693            //  detail: {
     694            //      config,
     695            //      api,
     696            //  }
     697            // }));
     698
     699            return {
     700                config,
     701                api,
     702            };
     703        }
    704704
    705705        // Initialize the plugin after settings are loaded
     
    21012101        function hook ( number ) {
    21022102            console.log( 'hook' );
    2103             console.log( 'g_hook_v: ' + g_hook_v );
     2103            console.log( 'g_hook_v, typeof:', g_hook_v, typeof g_hook_v );
    21042104
    21052105            var h_url = ctc && ctc.hook_url;
     
    21102110            }
    21112111
    2112             let hook_values = {};
    2113             const headers = {};
    2114 
    2115             // Check if the hook values are defined
    2116             if ( ctc.hook_v ) {
    2117                 hook_values = ( typeof g_hook_v !== 'undefined' ) ? g_hook_v : ctc.hook_v;
    2118 
    2119                 // var hook_values = ctc.hook_v;
    2120 
    2121                 console.log( typeof hook_values );
    2122                 console.log( hook_values );
    2123 
    2124                 if ( ! Array.isArray( hook_values ) ) {
    2125                     console.error( 'hook_v must be an array!', hook_values );
    2126                     return;
    2127                 }
     2112            // Reset ctc.hook_v to the pair-value object derived from the original array
     2113            // This ensures a fresh start for each click (avoiding processed values carrying over incorrectly)
     2114            if ( Array.isArray( g_hook_v ) ) {
    21282115
    21292116                const pair_values = {};
    2130                 let i = 1;
    2131 
    2132                 // Loop through the hook values and assign them to pair_values
    2133                 hook_values.forEach( ( val ) => {
    2134                     console.log( i );
    2135                     console.log( val );
    2136 
    2137                     // pair_values[ 'value' + i ] = val;
    2138                     setSafeProperty( pair_values, 'value' + i, val );
    2139                     i++;
     2117
     2118                g_hook_v.forEach( ( val, index ) => {
     2119                    // pair_values[ 'value' + (index + 1) ] = val;
     2120                    setSafeProperty( pair_values, 'value' + ( index + 1 ), val );
    21402121                } );
    21412122
    2142                 console.log( typeof pair_values );
    2143                 console.log( pair_values );
    2144 
     2123                // Update ctc.hook_v so it's available in the event
    21452124                ctc.hook_v = pair_values;
    21462125            }
     
    21512130            ) );
    21522131
    2153             hook_values = ctc.hook_v;
    2154 
    2155             console.log( h_url );
    2156             console.log( hook_values );
     2132            // Use the values from ctc (which may have been modified by early/using eventlistners)
     2133            // var hook_values = ctc.hook_v || {};
     2134            var hook_values = ( ctc.hook_v && typeof ctc.hook_v === 'object' ) ? ctc.hook_v : {};
     2135
     2136            // Update URL might be modified by eventlistners
     2137            if ( ctc.hook_url ) {
     2138                h_url = ctc.hook_url;
     2139            }
     2140
     2141            console.log( 'Webhook URL:', h_url );
     2142            console.log( 'Webhook Values:', hook_values );
    21572143
    21582144            // Format data for webhook
    21592145            let data;
    2160 
    2161             if ( ctc.webhook_format === 'json' ) {
    2162                 console.log( 'main hook: json' );
    2163                 headers[ 'Content-Type' ] = 'application/json';
    2164                 data = JSON.stringify( hook_values );
     2146            const contentType = 'application/x-www-form-urlencoded;charset=UTF-8';
     2147
     2148            // To solve CORS error: Use form-urlencoded even for 'json' format
     2149            // This makes it a "simple request" and avoids the preflight check.
     2150            if ( 'json' === ctc.webhook_format ) {
     2151                console.log( 'main hook: json (sending as form-urlencoded to match jQuery/avoid preflight)' );
     2152
     2153                // Convert to search params
     2154                var params = new URLSearchParams();
     2155                Object.keys( hook_values )
     2156                    .forEach( ( key ) => {
     2157                        // params.append( key, hook_values[ key ] );
     2158                        // hook_values[ key ]
     2159                        const hookVal = getSafeProperty( hook_values, key );
     2160
     2161                        // Convert objects/arrays to string if needed
     2162                        params.append( key, ( typeof hookVal === 'object' ) ? JSON.stringify( hookVal ) : hookVal );
     2163                    } );
     2164
     2165                // todo: test well..
     2166                // data = params;
     2167                data = params.toString();
    21652168            } else {
    2166                 console.log( 'main hook: string (URL encoded)' );
    2167 
    2168                 // headers[ 'Content-Type' ] = 'text/plain';
    2169                 // data = JSON.stringify( hook_values );
    2170                 headers[ 'Content-Type' ] = 'application/x-www-form-urlencoded;charset=UTF-8';
     2169                // Default fallback
     2170                console.log( 'main hook: string' );
     2171
     2172                // data = JSON.stringify(hook_values);
    21712173                data = new URLSearchParams( hook_values )
    21722174                    .toString();
     
    21812183
    21822184                // mode: 'no-cors',
    2183                 headers: headers,
     2185                headers: {
     2186                    'Content-Type': contentType,
     2187                },
    21842188                body: data,
    21852189            } )
     
    21922196        }
    21932197
    2194     };
     2198    }
    21952199
    21962200    function onReady () {
  • click-to-chat-for-whatsapp/trunk/readme.txt

    r3442197 r3452866  
    44Requires PHP: 5.6
    55Contributors: HoliThemes
    6 Stable tag: 4.36
     6Stable tag: 4.37
    77Tags: whatsapp, whatsapp business, click to chat, whatsapp chat, WooCommerce WhatsApp
    88License: GPLv2 or later
     
    542542== Changelog ==
    543543
     544= 4.37 =
     545* Fix: Webhook not working with some integration tools.
     546
    544547= 4.36 =
    545548* Enhancement: Google Analytics feature.
Note: See TracChangeset for help on using the changeset viewer.