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 || {});