1(function() { 2 var onlineUserBackdrop; 3 var closeOnlineUserBtn; 4 var iframesToDelete = []; 5 document.addEventListener('DOMContentLoaded', function() { 6 onlineUserBackdrop = document.getElementsByClassName('onlineuser_backdrop')[0]; 7 closeOnlineUserBtn = document.getElementById('close_onlineuser_modal_trigger'); 8 9 10 // set banners 11 document.querySelectorAll('.adsbygoogle').forEach(function(e) { 12 var childIns = e.children[0]; 13 if (childIns && childIns.getAttribute('style')) { 14 15 } 16 }); 17 18 // Iterate over the banners' qids and delete the corresponding iframe and contaner (if present); 19 setTimeout(function() { 20 iframesToDelete.forEach(function(qid) { 21 let iframe = document.querySelector("iframe[data-google-query-id='" + qid + "']"); 22 if (iframe) { 23 const parent = iframe.parentNode.parentElement.closest('.ads-banner-container'); 24 console.debug("deleting parent", parent); 25 if (parent) parent.remove(); 26 console.debug("deleting iframe", iframe); 27 if (iframe) iframe.remove(); 28 } 29 30 }); 31 }, 1000); // the timeout brutal: but it is useful if some iframe gets loaded after sometime. 32 33 34 if (closeOnlineUserBtn) { 35 closeOnlineUserBtn.addEventListener('click', function (e) { 36 e.stopPropagation(); 37 toggleModal(false); 38 }) 39 } 40 41 42 if (onlineUserBackdrop) { 43 onlineUserBackdrop.addEventListener('click', function () { 44 toggleModal(false); 45 }) 46 47 } 48 49 let otherOnlineTrigger = document.getElementById('show_other_onlineusers_trigger'); 50 if (otherOnlineTrigger) { 51 otherOnlineTrigger.addEventListener('click', function() { 52 toggleModal(true); 53 54 }) 55 } 56 57 }) 58 59 function toggleModal(open) { 60 onlineUserBackdrop.style.display = open ? 'block' : 'none'; 61 } 62 63 /** 64 * Listen to every "resize-me" message sent by google ads in order to catch failed/empty banners. 65 * The empty banners' qid will be pushed into an array that will be iterated once the document has been loaded (see above). 66 */ 67 window.addEventListener('message', function (event) { 68 try { 69 let msg = JSON.parse(event.data); 70 if (msg.msg_type === 'resize-me') { 71 let shouldCollapseAd = false; 72 let qid; 73 for (let index in msg.key_value) { 74 let key = msg.key_value[index].key; 75 let value = msg.key_value[index].value; 76 77 if (key == 'r_nh' && value == '0') { 78 shouldCollapseAd = true; 79 } 80 if (key == 'qid') { 81 qid = value; 82 } 83 } 84 85 if (shouldCollapseAd) { 86 iframesToDelete.push(qid); 87 let iframe = document.querySelector("iframe[data-google-query-id='" + qid + "']"); 88 if (iframe) { 89 const parent = iframe.parentNode.parentElement.closest('.ads-banner-container'); 90 console.debug("deleting parent", parent); 91 if (parent) parent.remove(); 92 console.debug("deleting iframe", iframe); 93 if (iframe) iframe.remove(); 94 95 } 96 97 } 98 99 } 100 } catch (e) { 101 102 } 103 }); 104})(); 105
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.