Skills › Marketing Skills › conversion-tracking › divi-forms.js
divi-forms.js
52 lines · skills/conversion-tracking/assets/snippets/divi-forms.js at 88c79f6
1/*! Divi Forms conversion detection (MIT)
2 * Detects: form submission. Pushes dataLayer event: divi_form_submitted
3 * From the conversion-tracking skill in Marketing Skills */
4(function () {
5 if (window.__ctDetectDiviForms) return;
6 window.__ctDetectDiviForms = true;
7 window.dataLayer = window.dataLayer || [];
8 var reported = typeof WeakSet === 'function' ? new WeakSet() : null;
9 function inspect(container) {
10 if (!container || !container.querySelector) return;
11 var notice;
12 try {
13 notice = container.querySelector('.et-pb-contact-message.et_pb_success_message');
14 if (!notice || container.querySelector('form.et_pb_contact_form') ||
15 container.querySelector('.et_pb_contact_error_meesage') ||
16 container.querySelector('.et_contact_error')) return;
17 } catch (e) { return; }
18 if (reported && reported.has(notice)) return;
19 if (reported) reported.add(notice);
20 var id = container.id || (container.getAttribute && container.getAttribute('data-id')) || '';
21 if (!id) return;
22 var adapter = window.__ctDiviMethod2Emit;
23 if (typeof adapter === 'function' && adapter(container, String(id)) === true) return;
24 window.dataLayer.push({ event: 'divi_form_submitted', form_id: String(id) });
25 }
26 function observe(container) {
27 if (!container || container.__ctDiviObserved || typeof MutationObserver === 'undefined') return;
28 container.__ctDiviObserved = true;
29 new MutationObserver(function () { inspect(container); }).observe(container,
30 { childList: true, subtree: true, attributes: true, attributeFilter: ['class'] });
31 inspect(container);
32 }
33 function start() {
34 var existing = document.querySelectorAll('.et_pb_contact_form_container');
35 for (var i = 0; i < existing.length; i++) observe(existing[i]);
36 if (typeof MutationObserver !== 'undefined' && document.documentElement) {
37 new MutationObserver(function (records) {
38 for (var r = 0; r < records.length; r++) {
39 for (var n = 0; n < records[r].addedNodes.length; n++) {
40 var node = records[r].addedNodes[n];
41 if (node.nodeType !== 1) continue;
42 if (node.matches && node.matches('.et_pb_contact_form_container')) observe(node);
43 var nested = node.querySelectorAll ? node.querySelectorAll('.et_pb_contact_form_container') : [];
44 for (var j = 0; j < nested.length; j++) observe(nested[j]);
45 }
46 }
47 }).observe(document.documentElement, { childList: true, subtree: true });
48 }
49 }
50 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start, { once: true });
51 else start();
52})();