1if (!window.steffiOtaz_de) window.steffiOtaz_de = new Object; 2 3(function() { 4 5 if (steffiOtaz_de.WebelementSwitch) { 6 return; 7 } 8 9 steffiOtaz_de.WebelementSwitch = function(definition) { 10 11 function setWebelementSwitch(webelementId) { 12 13 // feature configuration 14 const idCheckEnabled = true; 15 const internalProviderCheckEnabled = true; 16 const externalProviderCheckEnabled = true; 17 18 // cookie name for saving allowed external providers 19 const cookieName = "consentWebelementConfig"; 20 const cookieExpirationDays = 30; 21 22 // allowed webelement ids 23 const allowedIds = ['5667876']; 24 25 // regex for allowed providers 26 const allowedInternalProviders = ['/php-bin/', 'tziCookie', 'src="https://taz.de', "src='https://taz.de",'href="#','id="abortionMap"', 'class="full picture webelement-html-content-videoloop"', 'action="https://taz.de/!', 'href="/lib/ch/web/styles/form.css', 'id="informant_anchor"','onclick="window._sp_.gdpr.loadPrivacyManagerModal', 'href="http://www.taz.de/!', 'action="https://taz.de/scripts/', 'id="reward', 'src="/fileadmin/static', "https://taz.de/fileadmin", 'href="/uploads/images', 'font-family: taz_', 'form id="formchr"', 'src="/static/' ]; 27 const allowedExternalProviders = ['survey.lamapoll','q5kf46ry','cdn.michael-kreil', 'public.flourish.studio', 'src="https://pretix.eu/widget/v1.de.js"', 'src="https://pretix.eu/widget/v2.de.js"', '//datawrapper.dwcdn.net', '.podigee.io', 'class="podigee-podcast-player"',"taz-verlags-und-vertriebs-gmbh-5001569", "src='https://d2c0cdjj8gf5hk.cloudfront.net/js/dpa.js'", 'sibpages.com' ]; 28 const previewExternalProviders = ['src="/fileadmin/quiz-files/tabletop.min.js', 'src="https://www.youtu', 'class="twitter-tweet', 'class="instagram-media', 'src="https://open.spotify.com/', 'src="https://tazde.carto.com', 'src="https://giphy.com', 'soundcloud.com']; 29 const previewExternalProvidersText = ['google spreadsheets', 'Youtube', 'Twitter', 'Instagram', 'Spotify', 'Carto.com', 'Giphy', 'soundcloud' ]; 30 const prepareAllowedIframeForLazyLoad = ['taz-verlags-und-vertriebs-gmbh-5001569', '//datawrapper.dwcdn.net', '.podigee.io']; 31// defines which vendors from CMP to whitelist (will be compared with vendorConsents.consentedVendors in __tcfapi) 32const allowedEmbedsbyCMP = [{vendor: 'Youtube',snippet: 'src="https://www.youtu'}, 33 {vendor: 'Twitter, Inc.',snippet:'class="twitter-tweet'}, 34 {vendor: 'Instagram, Inc.',snippet:'class="instagram-media'}, 35 {vendor: 'Facebook, Inc.',snippet:'class="facebook.com'}, 36 {vendor: 'Facebook Content Feeds', snippet: 'facebook.com/'} ]; 37 38 // regex for content text optimization 39 const twitterRegex = RegExp(''); 40 const youtubeRegex = RegExp(''); 41 42 43 function setCookieValueForReloadIndication() { 44 var date = new Date(); 45 date.setTime(date.getTime() + (30*1000)); 46 var expires = "expires="+ date.toUTCString(); 47 document.cookie = cookieName + "Reload" + "=reload;" + expires + ";path=/"; 48 } 49 50 function getCookieValueForReloadIndication() { 51 var name = cookieName + "Reload" + "="; 52 var decodedCookie = decodeURIComponent(document.cookie); 53 var ca = decodedCookie.split(';'); 54 for(var i = 0; i <ca.length; i++) { 55 var c = ca[i]; 56 while (c.charAt(0) == ' ') { 57 c = c.substring(1); 58 } 59 if (c.indexOf(name) == 0) { 60 return c.substring(name.length, c.length); 61 } 62 } 63 return undefined; 64 } 65 66 function removeCookieForReloadIndication() { 67 var expires = "expires=Thu, 01 Jan 1970 00:00:00 UTC"; 68 document.cookie = cookieName + "Reload" + "=reload;" + expires + ";path=/"; 69 } 70 71 // webelement functions for different types 72 73 function replaceWithAllowedInternalContent() { 74 var webelementContentContainer = $('[webelementid="'+webelementId+'"].webelement-content-container '); 75 var webelementConsentFirstPart= $('[webelementid="'+webelementId+'"].webelement-content-container .webelement-content-container-content'); 76 const webelementConsentSecondPart = $('[webelementid="'+webelementId+'"].webelement-content-container .webelement-content-container-inner '); 77 //var webelementContentContainerContent = $('[webelementid="'+webelementId+'"].webelement-content-container > .webelement-content-container-content'); 78 var webelementContentString = ($('[webelementid="'+webelementId+'"].webelement-html-content > template.html-content').first()[0] || {}).innerHTML || ''; 79 $(webelementConsentFirstPart).html(webelementContentString); 80 $(webelementConsentSecondPart).remove(); 81 } 82 83 function initWithAllowedExternalContent(providerRegex) { 84 var webelementContentContainerContent = $('[webelementid="'+webelementId+'"].webelement-content-container > .webelement-content-container-content'); 85 var webelementContentContainerInner = $('[webelementid="'+webelementId+'"].webelement-content-container > .webelement-content-container-inner'); 86 var webelementContentCheckbox = $('[webelementid="'+webelementId+'"].webelement-content-container-inner .checkbox-switch > input'); 87 var webelementContentCheckboxSwitchText = $('[webelementid="'+webelementId+'"].webelement-content-container > .webelement-content-container-inner .checkbox-switch > .webelement-checkbox-switch-text'); 88 var webelementContentCheckboxSwitchDisclaimer = $('[webelementid="'+webelementId+'"].webelement-content-container > .webelement-content-container-inner .webelement-checkbox-switch-disclaimer'); 89 var webelementContentString = ($('[webelementid="'+webelementId+'"].webelement-html-content > template.html-content').first()[0] || {}).innerHTML || ''; 90; 91 92 //var webelementContentConfigCheckboxOuterLabel = $('[webelementid="'+webelementId+'"].webelement-content-container > .webelement-content-container-inner > .checkbox-config'); 93 //var webelementContentConfigCheckbox = $('[webelementid="'+webelementId+'"].webelement-content-container > .webelement-content-container-inner > .checkbox-config > input'); 94 //$(webelementContentConfigCheckboxOuterLabel).css({"display": "unset"}); 95 96 function activateWebelementContent() { 97 98 // todo: better should be transparent 99 $(webelementContentContainerContent).css({"background-color": "transparent", "padding": "0"}); 100 101 $(webelementContentContainerContent).html(webelementContentString).addClass('activated').attr('x-init', 'isConsented = true'); 102 103 // mar: hide until there is no save function 104 $(webelementContentContainerInner).css({ 'visibility': 'hidden', 'height': '0', 'padding': '0', 'margin': '0 !important'}); 105 $(webelementContentCheckboxSwitchText).html("Externen Inhalt deaktivieren"); 106 $(webelementContentCheckboxSwitchDisclaimer).html('<a href="https://taz.de/!166598" target="_blank">Mehr dazu in unserer Datenschutzerklärung.</a>'); 107 108 } 109 110 // load initial state from cookie 111 //if(checkCookie(providerRegexElement)) { 112 // if(getCookieValueForReloadIndication() === "reload") { 113 // removeCookieForReloadIndication(); 114 // } else { 115 // $(webelementContentConfigCheckbox).prop('checked', true); 116 // $(webelementContentCheckbox).prop('checked', true); 117 // } 118 //} 119 120 // set initial state 121 if(getCookieValueForReloadIndication() === "reload") { 122 removeCookieForReloadIndication(); 123 if($(webelementContentCheckbox).is(":checked")) { 124 activateWebelementContent(); 125 } 126 } else { 127 $(webelementContentCheckbox).prop('checked', true); 128 activateWebelementContent(); 129 } 130 131 // set on change listener for switch 132 $(webelementContentCheckbox).on('change', function() { 133 if($(webelementContentCheckbox).is(":checked")) { 134 //if($(webelementContentConfigCheckbox).is(":checked")) { 135 // addToCookie(providerRegexElement); 136 //} 137 activateWebelementContent(); 138 } else { 139 //if($(webelementContentConfigCheckbox).is(":checked")) {
140 // removeFromCookie(providerRegexElement); 141 //} 142 //console.log("webelement content removed for id "+webelementId); 143 setCookieValueForReloadIndication(); 144 location.reload(); 145 } 146 }); 147 148 149 // set on change listener for config checkbox 150 //$(webelementContentConfigCheckbox).change(function() { 151 // if($(webelementContentConfigCheckbox).is(":checked")) { 152 // if($(webelementContentCheckbox).is(":checked")) { 153 // addToCookie(providerRegexElement); 154 // } else { 155 // removeFromCookie(providerRegexElement); 156 // } 157 // } 158 //}); 159 160 } 161 162 function initWithUnknownExternalContent() { 163 164 var webelementContentContainer = $('[webelementid="'+webelementId+'"].webelement-content-container'); 165 166 167 var webelementContentContainerContent = $('[webelementid="'+webelementId+'"].webelement-content-container > .webelement-content-container-content'); 168 var webelementContentCheckbox = $('[webelementid="'+webelementId+'"].webelement-content-container > .webelement-content-container-inner .checkbox-switch > input'); 169 var webelementContentCheckboxSwitchText = $('[webelementid="'+webelementId+'"].webelement-content-container > .webelement-content-container-inner .checkbox-switch > .webelement-checkbox-switch-text'); 170 171 172 173 var webelementContentCheckboxSwitchDisclaimer = $('[webelementid="'+webelementId+'"].webelement-content-container > .webelement-content-container-inner .webelement-checkbox-switch-disclaimer'); 174 var webelementContentString = ($('[webelementid="'+webelementId+'"].webelement-html-content > template.html-content').first()[0] || {}).innerHTML || ''; 175; 176 177 // html to insert is here: 178 // console.log('webelementContentString', webelementContentString); 179 180 181 var webelementContentStringPrev = $(webelementContentCheckboxSwitchText).find('#consentPreview'); 182 183 // html element is empty - nothing to consent 184 if( webelementContentString == '' ) $( webelementContentContainer ).remove(); 185 previewExternalProviders.forEach(detectExternalProviderForPreview); 186 187 function detectExternalProviderForPreview(providerRegex, index) { 188 const regex = RegExp(providerRegex); 189 var webelementContentString = ($('[webelementid="'+webelementId+'"].webelement-html-content > template.html-content').first()[0] || {}).innerHTML || ''; 190; 191 if(regex.test(webelementContentString)) { 192 193 webelementContentStringPrev.text( ': ' + previewExternalProvidersText[index] ) 194 195 } 196 } 197 function activateUnknowWebelementContent(webelementContentString) { 198 199 // mar: do it once 200 if ( $(webelementContentContainerContent).hasClass('isoverlay') ) var overlayId = $(webelementContentContainerContent).closest( '.webelement-content-container' ).attr('webelementid') 201 if ( $(webelementContentContainerContent).nextUntil( '.webelement-content-container' ).is("[data-initial-state]") 202 203 || (typeof overlayId !== 'undefined' && $('.webelement-html-content').is('[data-initial-state][webelementid=' + overlayId + ']' ) ) ) 204 { 205 206 $(webelementContentContainerContent).nextUntil( '.webelement-content-container' ).removeAttr("data-initial-state"); 207 if (typeof overlayId !== 'undefined') { 208 $( '.webelement-html-content[webelementid=' + overlayId + '][data-initial-state]').removeAttr("data-initial-state"); 209 } 210 $(webelementContentContainerContent).css({"background-color": "#fff", "padding": "0px"}); 211 212 213 214 $(webelementContentContainerContent).html(webelementContentString).addClass('activated').attr('x-init', 'isConsented = true'); 215 $(webelementContentCheckboxSwitchText).html("Externen Inhalt deaktivieren"); 216 $(webelementContentCheckboxSwitchDisclaimer).html('<a href="https://taz.de/!166598" target="_blank">Mehr dazu in unserer Datenschutzerklärung.</a>'); 217 } 218 } 219 220 221 222 223 // set initial state 224 if($(webelementContentCheckbox).is(":checked")) { 225 activateUnknowWebelementContent(webelementContentString); 226 } 227 228 // set on change listener 229 $(webelementContentCheckbox).on('change',function() { 230 231 if($(webelementContentCheckbox).is(":checked")) { 232 233 activateUnknowWebelementContent(webelementContentString); 234 } else { 235 location.reload(); 236 } 237 }); 238 } 239 240 function checkId(id) { 241 var idString = webelementId.substring(webelementId.lastIndexOf('-')+1); 242 if( id === idString ) { 243 replaceWithAllowedInternalContent(); 244 } else { 245 initWithUnknownExternalContent(); 246 } 247 } 248 249 function checkInternalProvider(providerRegex) { 250 const regex = RegExp(providerRegex); 251 var webelementContentString = ($('[webelementid="'+webelementId+'"].webelement-html-content > template.html-content').first()[0] || {}).innerHTML || ''; 252; 253 if(regex.test(webelementContentString)) { 254 replaceWithAllowedInternalContent(); 255 } else { 256 initWithUnknownExternalContent(); 257 } 258 } 259 260 function checkExternalProvider(providerRegex) { 261 const regex = RegExp(providerRegex); 262 var webelementContentString = ($('[webelementid="'+webelementId+'"].webelement-html-content > template.html-content').first()[0] || {}).innerHTML || ''; 263; 264 265 if(regex.test(webelementContentString) && prepareAllowedIframeForLazyLoad.includes(providerRegex)) { 266 initWithAllowedExternalContent(providerRegex); 267 268 } else if (regex.test(webelementContentString)) { 269 initWithAllowedExternalContent(providerRegex); 270 } 271 else { 272 //this was wrong ? test it? 273 // initWithUnknownExternalContent(); 274 275 } 276 } 277 // added by mar: check embed consent in CMP
278 function checkExternalProviderFromCMPConsent(providerRegex) { 279 const regex = RegExp(providerRegex.snippet); 280 var webelementContentString = ($('[webelementid="'+webelementId+'"].webelement-html-content > template.html-content').first()[0] || {}).innerHTML || ''; 281; 282 283 // if code snippet matches 284 if (regex.test(webelementContentString)) { 285 286 287 // todo: better loopup for category? 288 // native cookie read: 289 //todo: still newest cookie name? NO! todo: 290 if ( ('; '+document.cookie).split(`; euconsent-v2=`).pop().split(';')[0] !== '' ){ 291 // CMP already consented 292 isConsentedinCMP(providerRegex).then( 293 function(value) { if (value.name != undefined) initWithAllowedExternalContent(providerRegex); }, 294 function(error) { console.log('could not reach __tcfapi') } 295 ); 296 297 } else { 298 // CMP for first time 299 if (typeof __tcfapi !== 'undefined') { 300 __tcfapi('addEventListener', 2, function(tcData,success){ 301 if(success && tcData.eventStatus === 'useractioncomplete') { 302 isConsentedinCMP(providerRegex).then( 303 function(value) { if (value.name != undefined) initWithAllowedExternalContent(providerRegex); }, 304 function(error) { console.log('could not reach __tcfapi', error) } 305 ); } 306 }); 307 } 308 } 309 } 310 311 312 function isConsentedinCMP(providerRegex ){ 313 var item; 314 let promise = new Promise(function(myResolve, myReject) { 315 __tcfapi('getCustomVendorConsents', 2, function(vendorConsents,success){ 316 if (success) { 317 item = vendorConsents.consentedVendors.find(item => item.name === providerRegex.vendor); 318 myResolve(item); 319 } 320 }); 321 322 }); 323 var result = promise.then( 324 // resolve 325 function(value) { return value }, 326 function(error) {console.log('could not reach __tcfapi')} 327 ); 328 return result 329 } 330 } 331 332 //initialCookieCheck(); 333 334 if(idCheckEnabled) { 335 allowedIds.forEach(checkId); 336 } 337 338 if(internalProviderCheckEnabled) { 339 allowedInternalProviders.forEach(checkInternalProvider); 340 } 341 342 if(externalProviderCheckEnabled) { 343 allowedExternalProviders.forEach(checkExternalProvider); 344 allowedEmbedsbyCMP.forEach(checkExternalProviderFromCMPConsent); 345 } 346 347 } 348 349 return { 350 setWebelementSwitch: setWebelementSwitch 351 } 352 353 }; 354 355 356 357})(); 358
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.