HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/wpicare/wp-content/plugins/creame-whatsapp-me/public/js/joinchat-lite.js
((window, document, joinchat_obj) => {
  'use strict';

  joinchat_obj = {
    settings: null,
    is_mobile: /Mobile|Android|iPhone|iPad/i.test(navigator.userAgent),
    can_qr: window.QrCreator && typeof QrCreator.render === 'function',
    ...joinchat_obj
  };
  window.joinchat_obj = joinchat_obj; // Save global

  /**
   * Trigger Analytics events
   *
   * Available customizations via joinchat_obj.settings:
   *  - 'data_layer' for custom data layer name (default 'dataLayer' or GTM4WP custom DataLayer name)
   *  - 'ga_event'   for GA4 custom event       (default 'generate_lead' recommended event)
   *
   * All params can be edited with document event 'joinchat:event' or cancel if returns false.
   * e.g.: $(document).on('joinchat:event', function(){ return false; });
   *
   */
  joinchat_obj.send_event = function (params) {
    params = {
      event_category: 'JoinChat', // Name
      event_label: '',            // Destination url
      event_action: '',           // "chanel: id"
      chat_channel: 'whatsapp',   // Channel name
      chat_id: '--',              // Channel contact (phone, username...)
      is_mobile: this.is_mobile ? 'yes' : 'no',
      page_location: location.href,
      page_title: document.title || 'no title',
      ...params
    };
    params.event_label = params.event_label || params.link || '';
    params.event_action = params.event_action || `${params.chat_channel}: ${params.chat_id}`;
    delete params.link;

    // Trigger event (params can be edited by third party scripts or cancel if return false)
    if (!document.dispatchEvent(new CustomEvent('joinchat:event', { detail: params, cancelable: true }))) return;

    const data_layer = window[this.settings.data_layer] || window[window.gtm4wp_datalayer_name] || window.dataLayer;

    if (typeof data_layer === 'object') {
      const gtag = window.gtag || function () { data_layer.push(arguments); };

      // GA4 send recommended event "generate_lead"
      const ga4_event = this.settings.ga_event !== undefined ? this.settings.ga_event : 'generate_lead';

      if (ga4_event) {
        const ga4_params = { transport_type: 'beacon', ...params };
        // GA4 params max_length (https://support.google.com/analytics/answer/9234069 https://support.google.com/analytics/answer/9267744)
        Object.keys(ga4_params).forEach(k => {
          if (k === 'page_location') ga4_params[k] = ga4_params[k].substring(0, 1000);
          else if (k === 'page_referrer') ga4_params[k] = ga4_params[k].substring(0, 420);
          else if (k === 'page_title') ga4_params[k] = ga4_params[k].substring(0, 300);
          else if (typeof ga4_params[k] === 'string') ga4_params[k] = ga4_params[k].substring(0, 100);
        });

        const ga4_tags = [];
        const ga4_send = tag => {
          if (ga4_tags.includes(tag)) return;
          if (tag.startsWith('G-') || tag.startsWith('GT-')) {
            ga4_tags.push(tag);
            gtag('event', ga4_event, { send_to: tag, ...ga4_params }); // Send GA4 event
          }
        };

        // gtag.js (New "Google Tag" find destinations)
        if (window.google_tag_data && google_tag_data.tidr && !!google_tag_data.tidr.destination) {
          for (const tag in google_tag_data.tidr.destination) ga4_send(tag);
        }
        // gtag.js (Old method, traverse dataLayer and find 'config')
        data_layer.forEach(item => {
          if (item[0] === 'config' && item[1]) ga4_send(item[1]);
        });
      }

      // Send Google Ads conversion
      if (this.settings.gads) {
        gtag('event', 'conversion', { send_to: this.settings.gads });
      }
    }

    // Store category and delete from params
    const event_category = params.event_category;
    delete params.event_category;

    // Send Google Tag Manager custom event
    if (typeof data_layer === 'object') {
      data_layer.push({ event: event_category, ...params });
    }

    // Send Facebook Pixel custom event (mask phone)
    if (typeof fbq === 'function') {
      if (params.chat_channel === 'whatsapp') {
        const phone = params.chat_id;
        const masked = `${phone.substring(0, 3)}${'X'.repeat(phone.length - 5)}${phone.substring(phone.length - 2)}`;

        params.chat_id = masked;
        params.event_label = params.event_label.replace(phone, masked);
        params.event_action = params.event_action.replace(phone, masked);
      }

      fbq('trackCustom', event_category, params);
    }
  };

  // Return WhatsApp link with optional message
  joinchat_obj.get_wa_link = function (phone, message, wa_web) {
    message = message !== undefined ? message : this.settings.message_send || '';
    wa_web = wa_web !== undefined ? wa_web : this.settings.whatsapp_web && !this.is_mobile;

    const url = new URL(`${wa_web ? 'https://web.whatsapp.com/send?phone=' : 'https://wa.me/'}${phone || this.settings.telephone}`);
    if (message) url.searchParams.set('text', message);

    return url.toString();
  };

  // Open WhatsApp link with supplied phone and message or with settings defaults
  joinchat_obj.open_whatsapp = function (phone, message) {
    phone = phone || this.settings.telephone;
    message = message !== undefined ? message : this.settings.message_send || '';

    let params = {
      link: this.get_wa_link(phone, message),
      chat_channel: 'whatsapp',
      chat_id: phone,
      chat_message: message,
    };

    // Trigger event (params can be edited by third party scripts or cancel if return false)
    if (!document.dispatchEvent(new CustomEvent('joinchat:open', { detail: params, cancelable: true }))) return;

    // Send analytics events
    this.send_event(params);
    // Open WhatsApp link
    window.open(params.link, 'joinchat', 'noopener');
  };

  // Generate QR canvas
  joinchat_obj.qr = function (text, options) {
    const canvas = document.createElement('CANVAS');
    QrCreator.render(Object.assign({
      text: text,
      radius: 0.4,
      background: '#FFF',
      size: 200 * (window.devicePixelRatio || 1),
    }, this.settings.qr || {}, options || {}), canvas);
    return canvas;
  }

  const on_page_ready = () => {
    // TRIGGERS: launch WhatsApp on click
    document.addEventListener('click', function (e) {
      if (e.target.closest('.joinchat_open, .joinchat_app, a[href="#joinchat"], a[href="#whatsapp"]')) {
        e.preventDefault();
        joinchat_obj.open_whatsapp(e.target.dataset.phone, e.target.dataset.message);
      }
    });

    // Gutenberg buttons add QR
    if (joinchat_obj.can_qr && !joinchat_obj.is_mobile) {
      document.querySelectorAll('.joinchat-button__qr').forEach(el => el.appendChild(joinchat_obj.qr(joinchat_obj.get_wa_link(el.dataset.phone, el.dataset.message, false))));
    } else {
      document.querySelectorAll('.wp-block-joinchat-button figure').forEach(el => el.remove());
    }

    // Replace product variable SKU (requires jQuery)
    if (joinchat_obj.settings.sku !== undefined && typeof jQuery === 'function') {
      const message = joinchat_obj.settings.message_send;
      jQuery('form.variations_form').on('found_variation reset_data', function (e, variation) {
        const sku = variation && variation.sku || joinchat_obj.settings.sku;
        joinchat_obj.settings.message_send = message.replace(/<jc-sku>.*<\/jc-sku>/g, sku);
      });
    }
  }

  // Ready!!
  if (document.readyState !== 'loading') on_page_ready();
  else document.addEventListener('DOMContentLoaded', on_page_ready);

})(window, document, window.joinchat_obj || {});