PageSourceSearch

https://www.rheingau-musik-festival.de/typo3temp/assets/compressed…c6a6e579a8184e6667b6a45a8d467.js?1779359494

js rheingau-musik-festival.de collected 2026-10-02 10:13:30 UTC 23,251 bytes, 444 lines download raw bytes

1
2jQuery.fn.femanagerValidation=function(a){function e(e){d=new g({numRequest:e.find("*[data-validation]").length,element:e}),e.find("*[data-validation]").each(function(){n(a(this),!0)})}function n(e,n){if(e.prop("disabled"))return void(n&&d.addCallbackToQueue(!0));var o=e.closest("form"),c=o.data("femanager-plugin"),v="tx_"+o.data("femanager-plugin-name"),g=o.find("div:first").find('input[name="'+v+'[user][__identity]"]').val(),m=o.find("div:first").find('input[name="'+v+'[__referrer][@action]"]').val(),p=Femanager.getBaseUrl()+"?id="+a("#femanagerPid").val()+"&type=1548935210",h=a("#femanagerStoragePid").val(),b=e.attr("data-validation"),_=s(e),x=e.val();"checkbox"==e.prop("type")&&0==e.prop("checked")&&(x="");var y="";if(l(_,"sameAs")){var C=l(_,"sameAs"),k=f(C),T=a('input[name="'+v+"[user]["+k+']"]');y=T.val(),"checkbox"==T.prop("type")&&0==T.prop("checked")&&(y="")}var P={storagePid:h,L:a("#femanagerLanguage").val(),id:a("#femanagerPid").val()};P["tx_femanager_validation[validation]"]=b,P["tx_femanager_validation[value]"]=x,P["tx_femanager_validation[field]"]=t(e),P["tx_femanager_validation[user]"]=void 0!==g?g:"",P["tx_femanager_validation[additionalValue]"]=y?y:"",P["tx_femanager_validation[plugin]"]=c,P["tx_femanager_validation[pluginName]"]=v,P["tx_femanager_validation[referrerAction]"]=m,a.ajax({url:p,data:P,type:"POST",cache:!1,success:function(a){if(n&&d.addCallbackToQueue(!0),a)try{a.validate?r(e):i(e,a.message)}catch(t){e.before(data)}},error:function(){u()}})}function t(a){var e="",n=a.prop("name").split("[");return e=void 0!==n[2]?n[2].replace("]",""):n[1].replace("]","")}function i(e,n){r(e);var t=a(".femanager_validation_container").html().replace("###messages###",n);e.before(t),e.closest(".form-group").addClass("has-error"),e.addClass("error")}function r(a){a.closest(".form-group").removeClass("has-error"),a.siblings(".alert").remove(),a.removeClass("error")}function o(a){if(0==a.find(".error").length)v=!0,a.trigger("submit");else{const e=a.find(".error:first")[0];if(!e)return;e.scrollIntoView({behavior:"smooth"})}}function l(a,e){for(var n=0;n<a.length;n++)if(a[n].indexOf(e)!==-1)return a[n];return""}function s(a){return a.attr("data-validation").split(",")}function f(a){var e="";if(a.indexOf("(")!==-1){var n=a.split("(");e=n[1].substr(0,n[1].length-1)}return e}function u(){"object"==typeof console&&console.log("Error: The called url is not available - if you use TYPO3 in a subfolder, please use config.baseURL in TypoScript")}var d,c=a(this),v=!1;0==c.find("*[data-validation]").length&&(v=!0);var g=function(){var e,n,t;return function(i){i||(i={}),e=i.numRequest||0,n=i.requestsCompleted||0,c=i.element||0,t=[];var r=function(){a("body").css("cursor","default"),o(c);for(var e=0;e<t.length;e++)t[e]()};i.singleCallback&&t.push(i.singleCallback),this.addCallbackToQueue=function(a,i){a&&n++,i&&t.push(i),n==e&&r()},this.requestComplete=function(a){a&&n++,n==e&&r()},this.setCallback=function(a){t.push(callBack)}}}();a('*[data-validation]:not([type="file"])').on("blur",function(){n(a(this),!1)}),a('*[data-validation][type="file"]').on("change",function(){n(a(this),!1)}),c.on("submit",function(n){a("body").css("cursor","wait"),v||(n.preventDefault(),e(a(this)))})};
3function createUploader(e){if(0!=e("#femanager_field_fine-uploader").length){var a={imageNames:{},getImageNames:function(){return e.map(this.imageNames,function(e){return e}).join(",")},addImageName:function(a,t){this.imageNames[a]=t,e("#femanager_field_image").val(this.getImageNames())},deleteImageName:function(a){delete this.imageNames[a],e("#femanager_field_image").val(this.getImageNames())}};new qq.FineUploader({element:document.getElementById("femanager_field_fine-uploader"),request:{endpoint:Femanager.getBaseUrl()+"index.php?eID=femanagerFileUpload&id="+e("#femanagerPid").val(),customHeaders:{Accept:"application/json"}},multiple:!0,template:e(".image_container_template:first").html(),fileTemplate:'<li><div class="qq-progress-bar"></div><span class="qq-upload-spinner"></span><span class="qq-upload-finished"></span><span class="qq-upload-file"></span><span class="qq-upload-size"></span><a class="qq-upload-cancel" href="#">{cancelButtonText}</a><a class="qq-upload-retry" href="#">{retryButtonText}</a><a class="qq-upload-delete icon-trash" href="#">{deleteButtonText}</a><span class="qq-upload-status-text">{statusText}</span></li>',deleteFile:{enabled:!0,forceConfirm:!0,endpoint:Femanager.getBaseUrl()+"index.php?eID=femanagerFileDelete&id="+e("#femanagerPid").val()},classes:{success:"alert alert-success",fail:"alert alert-error"},validation:{allowedExtensions:getValueFromField("#uploadFileExtension","jpeg, jpg, gif, png, bmp","array"),sizeLimit:getValueFromField("#uploadSize",25e6,"int"),itemLimit:getValueFromField("#uploadAmount",1,"int")},callbacks:{onComplete:function(t,n,i){if(i.success){var l=e("<img />").addClass("fileupload_image").prop("src",e("#uploadFolder").val()+"/"+i.uploadName).prop("alt",i.uploadName);l.appendTo(this.getItemByFileId(t)),a.addImageName(t,i.uploadName)}},onDeleteComplete:function(e,t,n){a.deleteImageName(e)}}});return a}}function getValueFromField(e,a,t){var n=a;return $(e).length&&(n=$(e).val()),void 0!==t&&("int"===t?n=parseInt(n):"array"===t&&(n=n.toString(),n=n.replace(/[\s,]+/g,","),n=n.split(","))),n}jQuery(document).ready(function(e){function a(e){e+="";var a=e.charAt(0).toLowerCase();return a+e.substr(1)}var t;t=null!=document.querySelector(".tx-femanager[data-labels]")?JSON.parse(document.querySelector(".tx-femanager[data-labels]").dataset.labels):[],e(".feManagerValidation").femanagerValidation(e);var n=createUploader(e);e("#femanager_field_image").length>0&&e.each(e("#femanager_field_image").val().split(","),function(e,a){a.trim().length>0&&n.addImageName(a,a)}),e("#femanager_field_preview-image").find(".qq-upload-delete").click(function(a){a.preventDefault();var t=e(a.target).parent();n.deleteImageName(t.find(".qq-upload-file").text()),t.fadeOut("",function(){e(this).remove()})}),e("*[data-confirm]").click(function(a){var t=e(this).attr("data-confirm");confirm(t)||a.preventDefault()}),document.querySelectorAll("[data-data-endpoint]").forEach(function(n){var i=function(i){var l=n.dataset.dataEndpoint,o={"tx_femanager_data[action]":l,"tx_femanager_data[controller]":"Data"};arguments=JSON.parse(JSON.stringify(n.dataset));for(var r in arguments)if(arguments.hasOwnProperty(r)&&r.match("arguments")){var s=document.getElementById(arguments[r]);if(s){var d=a(r.substr(9));o["tx_femanager_data["+d+"]"]=s.value}}var p=Femanager.getBaseUrl()+"index.php?id="+e("#femanagerPid").val()+"&type=1594138042",m=n.dataset.selectedValue;
3e.ajax({url:p,data:o,type:"POST",cache:!1,beforeSend:function(){n.disabled=1,n.options.length=0,n.options[0]=new Option(t.loading_states)},success:function(e){n.disabled=1,n.options.length=0,""===m||e.hasOwnProperty(m)||(n.options[n.options.length]=new Option(t.please_choose));for(var a in e)if(e.hasOwnProperty(a)){var i=a===m;n.options[n.options.length]=new Option(e[a],a,i,i),n.disabled=0}},error:function(){console.log("Error: The called url is not available - if you use TYPO3 in a subfolder, please use config.baseURL in TypoScript")}})},l=n.dataset.triggerFields;void 0!==l?l.split(",").forEach(function(e){var a=document.getElementById(e);void 0!==a&&a.addEventListener("change",i)}):n.addEventListener("change",i),i()})}),window.Femanager={},window.Femanager.getBaseUrl=function(){var e;if(jQuery("base").length>0)e=jQuery("base").prop("href");else if(window.location.hostname.indexOf("localhost")!==-1)e="";else{var a="";window.location.port.length>0&&(a=":"+window.location.port),e="https:"!==window.location.protocol?"http://"+window.location.hostname+a+"/":"https://"+window.location.hostname+a+"/"}return e};
4// Consent class
5const serviceConfigs = JSON.parse(JSON.stringify(allServiceSettings));
6
7// Function to retrieve a cookie by its name
8function getCookie(name) {
9	var nameEQ = name + "=";
10	var ca = document.cookie.split(';');
11	for (var i = 0; i < ca.length; i++) {
12		var c = ca[i];
13		while (c.charAt(0) == ' ') c = c.substring(1);
14		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
15	}
16	return null;
17}
18
19// Function to set a cookie with a specified name, value, and expiration date
20function setCookie(name, value, daysToExpire) {
21	var expires = "";
22	if (daysToExpire) {
23		var date = new Date();
24		date.setTime(date.getTime() + (daysToExpire * 24 * 60 * 60 * 1000));
25		expires = "; expires=" + date.toUTCString();
26	}
27	document.cookie = name + "=" + (value || "") + expires + "; path=/";
28}
29
30// Function to evaluate the final consent value based on service settings
31function evaluateFinalValue(serviceSettings, settingKey) {
32	let hasGranted = false;
33	let hasDenied = false;
34	
35	// Iterate through all services and check their consent settings
36	serviceSettings.forEach(settings => {
37		if (settings[settingKey] === 'granted')
38		if (settings[settingKey] === 'granted') hasGranted = true;
39		else if (settings[settingKey] === 'denied') hasDenied = true;
40	});
41	
42	// If there is at least one "denied" value, return "denied"
43	if (hasDenied)  return 'denied';
44	
45	// If there is only one "granted" value, return "granted"
46	if (hasGranted) return 'granted';
47	
48	// If all values are "not set" or there are no explicit "granted"/"denied" values, return "denied"
49	return 'denied';
50}
51
52// Function to update the cookie with the final consent values
53function updateCookieWithFinalConsent(name, daysToExpire, services) {
54	const cookieValue = getCookie(name);
55	if (cookieValue !== null) {
56		const obj = JSON.parse(decodeURIComponent(cookieValue));
57    
58		// Evaluate and set the final values for each consent setting
59		['ad_storage','analytics_storage','ad_user_data','ad_personalization',
60		 'personalization_storage','functionality_storage','security_storage']
61		  .forEach(key => {
62			obj[key] = evaluateFinalValue(services, key);
63		  });
64		
65		setCookie(name, encodeURIComponent(JSON.stringify(obj)), daysToExpire);
66		pushTriggerAfterConsentChanged(obj);
67	} else {
68		console.log("Cookie name '" + name + "' does not exist.");
69	}
70}
71
72// Function to push the trigger for gtm after consent changed
73function pushTriggerAfterConsentChanged(changes) {
74	window.dataLayer = window.dataLayer || [];
75	window.dataLayer.push({
76		event: 'cmp_we_cookie_consent_changed',   // Custom-Event-Name
77		we_consent_state: {                       // Add all final states 
78			ad_storage             : changes.ad_storage,
79			analytics_storage      : changes.analytics_storage,
80			ad_user_data           : changes.ad_user_data,
81			ad_personalization     : changes.ad_personalization,
82			personalization_storage: changes.personalization_storage,
83			functionality_storage  : changes.functionality_storage,
84			security_storage       : changes.security_storage
85		}
86	});
87}
88
89// Debug function to log all stored service settings
90function getAllServiceSettings() {
91	// Log all service settings to the console
92	console.log(allServiceSettings);
93	// Optionally return allServiceSettings;
94	// return allServiceSettings;
95}
96
97// main controller
98let ConsentApp = new function ConsentController() {
99	// public functions
100	/**
101     * Callback function for GoogleTagManager Script to handle consent state changes and fire the dataLayer trigger
102     * @param bool state
103     * @param object service
104     */
105    this.consentChanged = function(state, service) {
106		// Check if the service is related to Google Tag Manager
107		const isGTM = service.name.indexOf('google-tagmanager-service') !== -1;
108		if (isGTM) {
109			// A) Remap all services - only the service that has just been changed receives either its config values (if state=true) or "denied" all-over.
110			allServiceSettings = allServiceSettings.map(tempSettings => {
111				if (tempSettings.serviceId !== service.name) {
112					// Unmodified copy
113					return { 
114						serviceId:               tempSettings.serviceId,
115						serviceConsent:          tempSettings.serviceConsent,
116						ad_storage:              tempSettings.ad_storage,
117						analytics_storage:       tempSettings.analytics_storage,
118						ad_user_data:            tempSettings.ad_user_data,
119						ad_personalization:      tempSettings.ad_personalization,
120						functionality_storage:   tempSettings.functionality_storage,
121						personalization_storage: tempSettings.personalization_storage,
122						security_storage:        tempSettings.security_storage
123					};
124				}
125				
126				// Get the original config
127				const originalConfig = serviceConfigs.find(original => original.serviceId === tempSettings.serviceId);
128				const updated = { serviceId: tempSettings.serviceId, serviceConsent: state };
129				
130				// For every consent type
131				['ad_storage','analytics_storage','ad_user_data','ad_personalization',
132			     'personalization_storage','functionality_storage','security_storage']
133				  .forEach(key => {
134					// if consent is granted: accept from config
135					// if consent is denied: always 'denied'
136					updated[key] = state ? originalConfig[key] : 'denied';
137				});
138
139				return updated;
140			});
141			
142			// B) Evaluate only the granted services
143			// Filter allServiceSettings to include only services with serviceConsent = true
144			// Update cookie
145			const relevantServices = allServiceSettings.filter(relevant => relevant.serviceConsent);
146			updateCookieWithFinalConsent(storageName, cookieExpiresAfterDays, relevantServices);
147			
148			// C) dataLayer-Push based on the state
149			window.dataLayer = window.dataLayer || [];
150			window.dataLayer.push({
151				event: service.gtm.trigger,
152				[service.gtm.variable]: state
153			});
154		}
155				
156		// D) Check if the own callback function is allready defined
157		if (service.ownCallback) {
158			if (typeof window[service.ownCallback] === 'function') {
159				window[service.ownCallback](state, service);
160            } else {
161				console.error('The Callback function ' + service.ownCallback + ' is not yet defined. Please create it first.');
162            }
163        }
164	};
165
166    // constructor (modal and safari)
167	(function contruct() {
168		document.addEventListener('DOMContentLoaded', function () {
169			// Listener for the button on the privacy page, to edit the consent
170			document.addEventListener('click', function (event) {
171				if (event.target.closest('.js-showConsentModal')) {
172					event.preventDefault();
173					klaro.show();
174				}
175			});
176		});
177	})();
178
179    const isSafari = navigator.vendor && 
180        navigator.vendor.indexOf('Apple') > -1 &&
181        navigator.userAgent &&
182        navigator.userAgent.indexOf('CriOS') == -1 &&
183        navigator.userAgent.indexOf('FxiOS') == -1;
184
185	document.addEventListener('DOMContentLoaded', function() {
186		setTimeout(function() {
187
188			setServiceSuccessVarBtn();
189
190			document.addEventListener('click', function (event) {
191				if (event.target.matches('.cn-decline')) {
192					setServiceSuccessVarBtn();
193				}
194			});
195
196			document.addEventListener('click', function (event) {
197				if (event.target.matches('.cm-btn-accept')) {
198					setServiceSuccessVarBtn();
199				}
200			});
201
202			document.addEventListener('click', function (event) {
203				if (event.target.matches('.cm-btn-decline')) {
204					setServiceSuccessVarBtn();
205				}
206			});
207
208			if (isSafari!==true) {
209				document.getElementById('klaro').classList.remove('safari');
210			} else {
211				document.getElementById('klaro').classList.add('safari');
212			}
213		})
214    });
215};
216// End main controller
217
218var optOutLink = document.getElementById("ga-opt-out");
219
220if(optOutLink) {
221	optOutLink.onclick = function() {
222		document.cookie = 'ga-opt-out=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/';
223		this.innerHTML = "Google Analytics opt-out successful";
224		return false;
225	}
226}
227
228// Functions after window.load():
229window.addEventListener('load', function () {
230	const iframes = document.querySelectorAll('iframe');
231
232	if (iframes.length > 0) {
233		iframes.forEach(function (iframe) {
234			let attrDataSrc = iframe.getAttribute('src');
235			if (!attrDataSrc) {
236				attrDataSrc = iframe.getAttribute('data-src');
237			}
238
239			if (attrDataSrc && (attrDataSrc.includes('youtube') || attrDataSrc.includes('vimeo'))) {
240				// Adjust measures for videoOverlay similar to iframe:
241				const parent = iframe.parentElement;
242				const contextNotice = parent.querySelector('.klaro.cm-as-context-notice');
243
244				if (contextNotice) {
245					iframe.style.display = 'block';
246
247					// Set the width of .klaro.cm-as-context-notice to the iframe's width
248					contextNotice.style.width = iframe.offsetWidth + 'px';
249
250					if (iframe.offsetHeight < contextNotice.offsetHeight) {
251						const cmButtons = contextNotice.querySelector('.cm-buttons');
252						if (cmButtons) {
253							cmButtons.style.marginTop = '1em';
254						}
255					}
256				}
257			}
258		});
259	}
260
261	// Add class for small context-notice box: if video integration within small iframes (width < 300px)
262	document.querySelectorAll('.klaro.we_cookie_consent.cm-as-context-notice').forEach(function(element) {
263		if (element.offsetWidth <= 300) {
264			element.classList.add('notice--minified');
265		}
266	});
267
268	// Add class to avoid Google to crawl consent info text
269	document.querySelectorAll('.klaro.we_cookie_consent .cn-body').forEach(function(element) {
270		element.setAttribute('data-nosnippet', 'data-nosnippet');
271	});
272});
273
274// Workaround: Show "Always" Button for overlay (for example youtube videos) only when the klaro cookie is set
275function setServiceSuccessVarBtn()
276{
277	const klaroCookie = getCookie('klaro');
278
279	if (klaroCookie) {
280		const allServiceSuccessVarBtn = document.querySelectorAll('.cm-btn-success-var');
281		if (allServiceSuccessVarBtn.length > 0) {
282			allServiceSuccessVarBtn.forEach((serviceSuccessVarBtn) => {
283					serviceSuccessVarBtn.style.setProperty('display', 'block', 'important');
284				}
285			)
286		}
287	}
288}
289
290document.addEventListener('DOMContentLoaded', function () {
291
292    if (checkCookieExists('klaro')) {
293        createTooltip();
294    }
295
296    setTimeout(function () {
297        const klaroDiv = document.getElementById('klaro');
298        const buttons = klaroDiv.querySelectorAll('button');
299
300        function handleClick(event) {
301            createTooltip();
302            if (document.querySelector('#klaro .cookie-notice') == null && document.querySelector('#klaro .cookie-modal') == null) {
303            }
304        }
305
306        buttons.forEach(button => {
307            button.addEventListener('click', handleClick);
308        });
309    });
310
311    setTimeout(function () {
312        if (document.querySelector('.cm-link')) {
313            document.querySelector('.cm-link').addEventListener('click', function () {
314                if (document.querySelector('.cm-btn-success')) {
315                    document.querySelector('.cm-btn-success').addEventListener('click', function () {
316                        createTooltip();
317                    });
318                }
319
320                if (document.querySelector('.cn-decline')) {
321                    document.querySelector('.cn-decline').addEventListener('click', function () {
322                        createTooltip();
323                    });
324                }
325
326                if (document.querySelector('.cm-btn-accept-all')) {
327                    document.querySelector('.cm-btn-accept-all').addEventListener('click', function () {
328                        createTooltip();
329                    });
330                }
331            });
332        }
333    }, 1000);
334});
335
336function checkCookieExists(cookieName) {
337    let cookies = document.cookie.split(';');
338
339    for (let i = 0; i < cookies.length; i++) {
340        let cookie = cookies[i];
341        // Remove leading spaces (if any)
342        while (cookie.charAt(0) == ' ') {
343            cookie = cookie.substring(1);
344        }
345        // Check if the cookie name matches
346        if (cookie.indexOf(cookieName + '=') == 0) {
347            return true;
348        }
349    }
350    return false;
351}
352
353function createTooltip() {
354    if (cookieIconPermanentlyAvailable === '1') {
355        let iconTooltip = document.createElement('div');
356        let iconImgTag = document.createElement('img');
357        let iconBtn = document.createElement('button');
358        let iconContainer = document.createElement('div');
359
360        // Button
361        iconBtn.type = 'button';
362        iconBtn.className = 'consent-trigger js-showConsentModal';
363        iconBtn.setAttribute('aria-label', translatedButtonTextCookieSettings);
364        iconBtn.setAttribute('aria-haspopup', 'dialog');
365
366        // Image
367        iconImgTag.src = cookieSettingsImgPathDefault;
368        iconImgTag.alt = '';
369        iconImgTag.setAttribute('aria-hidden', 'true');
370        iconImgTag.width = 85; iconImgTag.height = 85;
371        iconImgTag.style.cssText = 'margin-right:0px;width:85px;height:85px;';
372
373        // Hover/Fokus (Image & Tooltip)
374        function showTip(){ iconTooltip.style.display = 'block'; iconImgTag.src = cookieSettingsImgPathHover; }
375        function hideTip(){ iconTooltip.style.display = 'none';  iconImgTag.src = cookieSettingsImgPathDefault; }
376
377        iconBtn.addEventListener('mouseover', showTip);
378        iconBtn.addEventListener('mouseout',  hideTip);
379        iconBtn.addEventListener('focusin',   showTip);
380        iconBtn.addEventListener('focusout',  hideTip);
381
382        // Tooltip
383        iconTooltip.textContent = translatedButtonTextCookieSettings;
384        iconTooltip.classList.add('consent-cookie-text');
385        iconTooltip.style.cssText = 'display:none;';
386        // (optional ARIA)
387        // tooltip.id = 'consent-tooltip';
388        // tooltip.setAttribute('role', 'tooltip');
389        // btn.setAttribute('aria-describedby', 'consent-tooltip');
390
391        // Container
392        iconContainer.classList.add('consent-cookie');
393        iconContainer.style.cssText = 'display:flex;';
394
395        // DOM
396        iconBtn.appendChild(iconImgTag);
397        iconContainer.appendChild(iconBtn);
398        iconContainer.appendChild(iconTooltip);
399        document.body.appendChild(iconContainer);
400    }
401}
402
403$(document).ready(function () {
404    var settings = {
405        checkbox: '#femanager_field_is_jetticket_user',
406        hiddenClass: '.jetticketHidden',
407        hiddenClassInfo: '.hide-info',
408        email: '#femanager_field_email',
409        password: '#femanager_field_password',
410        jetticketUser: '#femanager_field_jetticketUser',
411        jetticketPassword: '#femanager_field_jetticketPassword',
412        form: '#femanager_form'
413    };
414
415    $(settings.checkbox).click(function (){
416        if ($(this).prop('checked')) {
417            // checked
418            $(settings.hiddenClass).addClass('d-block');
419        } else {
420            // not checked
421            $(settings.hiddenClass).removeClass('d-block');
422        }
423    });
424
425    $(settings.form).submit(function(e) {
426        var emailVal = $(settings.email).val();
427        var passwordVal = $(settings.password).val();
428
429        var jetticketEmailVal = $(settings.jetticketUser).val();
430        var jetticketPasswordVal = $(settings.jetticketPassword).val();
431
432        if (emailVal !== '' && passwordVal !== '') {
433            $(settings.hiddenClassInfo).removeClass('show');
434
435            if (jetticketEmailVal === '' && jetticketPasswordVal === '') {
436                $(settings.jetticketUser).val(emailVal);
437                $(settings.jetticketPassword).val(passwordVal);
438            }
439        } else {
440            $(this).prop('checked', false);
441            $(settings.hiddenClassInfo).addClass('show');
442        }
443    });
444});

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.