1(function () { 2 function domReady(fn) { 3 // If we're early to the party 4 document.addEventListener("DOMContentLoaded", fn); 5 if (document.readyState === "interactive" || document.readyState === "complete") { 6 fn(); 7 } 8 } 9 10 function getCookie(name) { 11 var value = "; " + document.cookie; 12 var parts = value.split("; " + name + "="); 13 if (parts.length === 2) { 14 return parts.pop().split(";").shift(); 15 } else { 16 return null; 17 } 18 } 19 20 class AdFormsWpIframe { 21 constructor(parent) { 22 this.parent = parent; 23 this.id = Math.ceil(Math.random() * 1e12); 24 this.el = document.createElement("iframe"); 25 } 26 27 get type() { 28 return this.parent.dataset.type; 29 } 30 31 release() { 32 let src = this.parent.dataset.iframeUrl; 33 src += (src.indexOf('?') === -1 ? '?' : '&'); 34 src += 'iframe_id=' + this.id; 35 const hutk = getCookie('hubspotutk'); 36 if (hutk) { 37 src += '&hutk=' + hutk; 38 } 39 this.el.setAttribute('src', src); 40 this.el.id = this.id; 41 this.el.setAttribute('style', 'width:100%;border:none'); 42 this.parent.appendChild(this.el); 43 } 44 45 setHeight(ht) { 46 this.el.style.visibility = 'hidden'; 47 this.el.style.height = ht + "px"; 48 this.el.style.width = "100%"; 49 this.el.style.visibility = 'visible'; 50 } 51 } 52 53 class AdFormsWpManager { 54 constructor(sel) { 55 this.sel = sel; 56 this.iframes = {}; 57 window.addEventListener('message', (e) => { 58 this.treatMessage(e); 59 }, false); 60 } 61 62 release() { 63 const formDivTargets = document.querySelectorAll(this.sel) 64 for (var index = 0; index < formDivTargets.length; index++) { 65 const iframe = new AdFormsWpIframe( 66 formDivTargets[index] 67 ); 68 this.iframes[iframe.id] = iframe; 69 iframe.release(); 70 } 71 } 72 73 treatMessage(e) { 74 if (typeof e.data !== 'string') { 75 return; 76 } 77 // parse data 78 var message = JSON.parse(e.data); 79 80 if (message.source === 'ad-forms-iframe') { 81 const ifrm = this.iframes[message.iframeId]; 82 switch (message.type) { 83 case 'resize' : 84 ifrm.setHeight(message.data.height); 85 break; 86 case 'formSent' : 87 if (window.dataLayer) { 88 dataLayer.push({ 89 event: "ad-forms-wp.formSent", 90 formType: ifrm.type, 91 formData: message.data.data, 92 formResponse: message.data.response, 93 }); 94 } 95 break; 96 case 'formError' : 97 if (window.dataLayer) { 98 dataLayer.push({ 99 event: "ad-forms-wp.formError", 100 formType: ifrm.type, 101 formData: message.data.data, 102 formResponse: message.data.response, 103 }); 104 } 105 break; 106 case 'redirect' : 107 window.location = message.data.url; 108 break; 109 default: 110 console.log('iframeManager - Unknown message type : ', message); 111 } 112 } 113 } 114 115 sendMessage(iframeId, type, data) { 116 var message = JSON.stringify({ 117 type: type, 118 data: data 119 }); 120 this.iframes[iframeId] 121 .contentWindow 122 .postMessage(message, '*'); 123 } 124 } 125 126 domReady(function () { 127 (new AdFormsWpManager('div.ad-form-iframe-cntnr')).release(); 128 }); 129})();
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.