1/*! 2 * 2Click-Iframe-Privacy v0.3.0 3 * https://github.com/01-Scripts/2Click-Iframe-Privacy 4 * 5 * Licensed MIT © 2018-2019 Michael Lorer - https://www.01-scripts.de/ 6 */ 7 8 var _2ClickIframePrivacy = new function() { 9 10 var config = { 11 enableCookies: true, 12 useSessionCookie: true, 13 cookieNamespace: '_2ClickIPEnable-', 14 showContentLabel: 'Inhalt anzeigen', 15 rememberChoiceLabel: 'Auswahl merken', 16 privacyPolicyLabel: 'Datenschutzerklärung', 17 privacyPolicyUrl: false 18 }; 19 20 this.types = new Array( 21 { 22 type: 'video', 23 description: 'Zum Aktivieren des Videos bitte auf den Link klicken. Durch das Aktivieren von eingebetteten Videos werden Daten an den jeweiligen Anbieter übermittelt. Weitere Informationen können unserer Datenschutzerklärung entnommen werden.<br />' 24 }, 25 { 26 type: 'map', 27 description: 'Zum Aktivieren der eingebetteten Karte von Google Maps bitte auf den Link klicken. Durch das Aktivieren werden Daten an Google übermittelt. Weitere Informationen können unserer <a href="Datenschutz.php">Datenschutzerklärung</a> entnommen werden.<br><br>' 28 }, 29 { 30 type: 'calendar', 31 description: 'Zum Aktivieren des eingebetteten Kalenders bitte auf den Link klicken. Durch das Aktivieren werden Daten an den jeweiligen Anbieter übermittelt. Weitere Informationen können unserer Datenschutzerklärung entnommen werden.<br />' 32 } 33 ); 34 35 function setCookie(name, value, days) { 36 var d = new Date; 37 d.setTime(d.getTime() + 24*60*60*1000*days); 38 document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString(); 39 } 40 41 function setSessionCookie(name, value) { 42 document.cookie = name + "=" + value + ";path=/"; 43 } 44 45 function getCookie(name) { 46 var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 47 return v ? v[2] : null; 48 } 49 50 // Create <div>-element within the respective iframe to display the defined data-security message and get consent for loading the iframe content. 51 function wrap(el, wrapper, type, text) { 52 el.parentNode.insertBefore(wrapper, el); 53 wrapper.className = 'privacy-msg privacy-'+type+'-msg'; 54 wrapper.style.width = el.clientWidth+'px'; 55 wrapper.style.height = el.clientHeight+'px';
56 wrapper.innerHTML = text +'<a href="#foo" onclick="_2ClickIframePrivacy.EnableContent(\''+ type +'\'); return false;" class="button">'+config.showContentLabel+'</a>'; 57 if(config.enableCookies){ 58 wrapper.innerHTML = wrapper.innerHTML + '<br /><input type="checkbox" name="remind-\''+ type +'\'" /> <label>'+config.rememberChoiceLabel+'</label>'; 59 } 60 if(config.privacyPolicyUrl){ 61 wrapper.innerHTML = wrapper.innerHTML + '<br /><a href="'+config.privacyPolicyUrl+'">'+config.privacyPolicyLabel+'</a>'; 62 } 63 wrapper.innerHTML = '<p>' + wrapper.innerHTML + '</p>'; 64 wrapper.appendChild(el); 65 } 66 67 this.EnableContent = function (type){ 68 var i; 69 70 // Cookies globally enabled by config? 71 if(config.enableCookies){ 72 var remind = false; 73 var x = document.querySelectorAll('div.privacy-'+type+'-msg p input'); 74 // Check if any checkbox for the selected class was checked. If so a cookie will be set 75 for (i = 0; i < x.length; i++) { 76 if(x[i].checked == true){ 77 remind = true; 78 } 79 } 80 81 if(remind){ 82 if(config.useSessionCookie){ 83 setSessionCookie(config.cookieNamespace+type, '1'); 84 } 85 else{ 86 setCookie(config.cookieNamespace+type, '1', 30); 87 } 88 } 89 } 90 91 var x = document.querySelectorAll('div.privacy-'+type+'-msg p'); 92 for (i = 0; i < x.length; i++) { 93 x[i].parentNode.removeChild(x[i]); 94 } 95 96 x = document.querySelectorAll('div.privacy-'+type+'-msg'); 97 for (i = 0; i < x.length; i++) { 98 var parent = x[i].parentNode; 99 100 // Move all children out of the element 101 while (x[i].firstChild) parent.insertBefore(x[i].firstChild, x[i]); 102 103 // Remove the empty element 104 parent.removeChild(x[i]); 105 } 106 107 x = document.querySelectorAll('iframe[data-2click-type="'+type+'"]'); 108 for (i = 0; i < x.length; i++) { 109 x[i].src = x[i].getAttribute("data-src"); 110 } 111 112 // If available, execute the callback that is defined for the currently active type 113 for (i = 0; i < this.types.length; i++) { 114 if(this.types[i].type == type && this.types[i].callback) { 115 window[this.types[i].callback](); 116 } 117 } 118 } 119 120 this.init = function (Userconfig) { 121 // Read UserConfiguration: 122 if (typeof Userconfig.enableCookies !== 'undefined') { 123 config.enableCookies = Userconfig.enableCookies; 124 } 125 if (typeof Userconfig.useSessionCookie !== 'undefined') { 126 config.useSessionCookie = Userconfig.useSessionCookie; 127 } 128 if (typeof Userconfig.cookieNamespace !== 'undefined') { 129 config.cookieNamespace = Userconfig.cookieNamespace; 130 } 131 if (typeof Userconfig.privacyPolicyUrl !== 'undefined') { 132 config.privacyPolicyUrl = Userconfig.privacyPolicyUrl; 133 } 134 if (typeof Userconfig.showContentLabel !== 'undefined') { 135 config.showContentLabel = Userconfig.showContentLabel; 136 } 137 if (typeof Userconfig.rememberChoiceLabel !== 'undefined') { 138 config.rememberChoiceLabel = Userconfig.rememberChoiceLabel; 139 } 140 if (typeof Userconfig.privacyPolicyLabel !== 'undefined') { 141 config.privacyPolicyLabel = Userconfig.privacyPolicyLabel; 142 } 143 144 if (Array.isArray(Userconfig.CustomTypes)) { 145 this.types = Userconfig.CustomTypes; 146 } 147 148 for (i = 0; i < this.types.length; i++) { 149 var selector = document.querySelectorAll('iframe[data-2click-type="'+this.types[i].type+'"]'); 150 151 var x; 152 if(!getCookie(config.cookieNamespace+this.types[i].type)){ 153 for (x = 0; x < selector.length; x++) { 154 wrap(selector[x], document.createElement('div'), this.types[i].type, this.types[i].description); 155 } 156 }else{ 157 for (x = 0; x < selector.length; x++) { 158 selector[x].src = selector[x].getAttribute("data-src"); 159 } 160 } 161 } 162 163 }; 164}
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.