PageSourceSearch

https://taz.de/lib/taz-verlag-node/js/steffiOtaz_de.WebelementSwitch.js

js taz.de collected 2026-09-24 06:56:50 UTC 15,802 bytes, 358 lines download raw bytes

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.