1$(function(){ 2 // Set touch class if applicable 3 if(is_touch_device() == true){ 4 $(".body").addClass("body--touch"); 5 } 6 7 // Menutrigger 8 bStatusMenutrigger = true; 9 $(document).on("click", ".menutrigger, .navbg, .header__navbg", function(e){ 10 e.preventDefault(); 11 12 if (bStatusMenutrigger) { 13 bStatusMenutrigger = false; 14 15 let $nav = $('.nav'), 16 $navbg = $('.header__navbg'), 17 $menutrigger = $('.menutrigger'); 18 19 if ($nav.hasClass('nav--hidenav') || !$nav.hasClass('nav--shownav')) { 20 // show nav animation 21 $menutrigger.addClass('menutrigger--shownav'); 22 $nav.addClass('nav--shownav').removeClass('nav--hidenav'); 23 $navbg.addClass('header__navbg--shownav'); 24 setTimeout(() => { 25 bStatusMenutrigger = true; 26 },700); 27 } else if ($nav.hasClass('nav--shownav')) { 28 // hide nav animation 29 $menutrigger.removeClass('menutrigger--shownav'); 30 $nav.addClass('nav--hidenav').removeClass('nav--shownav'); 31 $navbg.removeClass('header__navbg--shownav'); 32 setTimeout(() => { 33 bStatusMenutrigger = true; 34 $nav.removeClass('nav--hidenav'); // prevent resize animation 35 },700); 36 } 37 } 38 }); 39 40 /*Menus ein-/ausblenden*/ 41 let toMenuClose; 42 $(document).on('click', '.nav__li', function (enterEvent) { 43 enterEvent.stopPropagation(); 44 45 let $this = $(this); 46 47 clearTimeout(toMenuClose); 48 49 /*if (!$.isEmptyObject($this.siblings('.nav__li--running')[0]) && !$menutrigger.is(':visible')) { 50 // toMenuClose = setTimeout(function(){ 51 $this.siblings('.nav__li--running').removeClass('nav__li--running').find('.nav__list').removeClass('nav__list--show'); 52 $this.find('.nav__li--running').removeClass('nav__li--running'); 53 // }, 100); 54 }*/ 55 56 if ($this.hasClass('nav__li--isparent')) { 57 enterEvent.preventDefault(); 58 59 // Submenu toggle 60 if (!$this.hasClass('nav__li--running')) { 61 $this.addClass('nav__li--running').find('> .nav__list').addClass('nav__list--show'); 62 } else { 63 closeNavi($this); 64 } 65 } 66 67 /*$this.one('mouseleave', function (leaveEvent) { 68 if (!$menutrigger.is(':visible')) { 69 clearTimeout(toMenuClose); 70 toMenuClose = setTimeout(function () { 71 closeNavi($this); 72 }, 300); 73 } 74 });*/ 75 76 function closeNavi($self) { 77 $self.removeClass('nav__li--running').find('.nav__list').removeClass('nav__list--show'); 78 if (!$menutrigger.is(':visible')) { 79 $('.nav__li--running').removeClass('nav__li--running'); 80 } 81 } 82 }); 83 84 // sessionStorage leeren, wenn Navigation betätigt wird. 85 $(document).on("click", ".nav__link", function (_e) { 86 let $this = $(this); 87 88 if (typeof (sessionStorage["searchfilter"]) !== "undefined" && !$.isEmptyObject($this.attr("data-pageid")[0])) { 89 let data = JSON.parse(sessionStorage["searchfilter"]), 90 sPage = "page_" + $this.attr("data-pageid"); 91 92 if (data.hasOwnProperty(sPage)) { 93 delete data[sPage]; 94 95 sessionStorage["searchfilter"] = JSON.stringify(data); 96 } 97 } 98 }); 99 100 // E-Mail senden 101 $(document).on("click", "a[href^='#msg=']", function(event){ 102 event.preventDefault(); 103 104 let string = $(this).attr("href"), 105 code = string.substring(string.indexOf("=") + 1); 106 107 msg(code); 108 }); 109 110 // Modal öffnen 111 $(document).on('click', 'a.modal', function(event){ 112 event.preventDefault(); 113 114 let sHref = $(this).attr('data-url'); 115 116 loadModal(sHref); 117 }); 118 119 // Modal ausblenden 120 $(document).on('click', '.modal, .modal__close', function(e){ 121 e.preventDefault(); 122 closeModal(); 123 }); 124 125 // Video in Modal öffnen 126 $(document).on('click', 'a[href*="youtu"]', function(event){ 127 event.preventDefault(); 128 129 let sHref = $(this).attr('href'), 130 aRegGroups = sHref.match(/https:\/\/(www.)?youtu(\.)?be(\.com)?\/(watch\?v\=)?(.+)/), 131 code = aRegGroups[aRegGroups.length-1], 132 payload = {'code':code}; 133 134 loadModal(siterelpath+'apps/services/youtube.cfm', 'modal__popup--video', payload); 135 }); 136 137 // Scrolltop 138 $(document).on("click", ".scrolltop", function(event){ 139 $("body,html").animate({ scrollTop:0 },800); 140 }); 141 142 let scroll = 0; 143 144 // Add scroll class if applicable 145 $(window).scroll(function(){ 146 let scrolled = $(this).scrollTop(); 147 148 if(scrolled > 30) { 149 $(".body").addClass("body--scrolled"); 150 } else { 151 $(".body").removeClass("body--scrolled"); 152 } 153 154 // Scroll-Effekt in Galerie 155 if (scrolled >= 0 && !$.isEmptyObject($('.cslides__gallery')[0])) { 156 let $gallery = $('.cslides__gallery'); 157 158 if (scrolled > 0) { 159 // Wenn Galerie hinter Siteheader läuft 160 $gallery.find('.carousel-cell').css({ 'transform': 'translateY('+(Math.round(scrolled / 2))+'px)' }); 161 } else { 162 $gallery.find('.carousel-cell').css({ 'transform': 'translateY('+0+'px)' }); 163 } 164 } 165 }); 166 167 // Contactform Label functionality 168 let toSelectFocusout = null; 169 170 // On load (timeout necessary so URL parameter can be written into input first) 171 setTimeout(() => { 172 $("[class*='--label-inside']:not(.label), .cis-select--label-inside > select").each((_i,el) => { 173 checkLabels(el,undefined); 174 }); 175 },200);
176 177 // On event trigger 178 $("[class*='--label-inside']:not(.label), .cis-select--label-inside > select").on("focus change focusout", e => { 179 checkLabels(e.target, e.type); 180 }); 181 182 function checkLabels(_target, _eventtype) { 183 if (_target.type === "select-one") { 184 // Select 185 clearTimeout(toSelectFocusout); 186 if (_eventtype === "focus" || (_eventtype !== "focusout" && _target.value !== undefined && _target.value.length)) { 187 labelinside($(_target).parent(), "add", _eventtype); 188 } else if (_eventtype === "focusout") { 189 // Set timeout as we have to wait for the value to get updated by creanetSelect.js 190 toSelectFocusout = setTimeout(() => { 191 if (_target.value !== undefined && _target.value.length) { 192 labelinside($(_target).parent(), "add", _eventtype); 193 } else { 194 labelinside($(_target).parent(), "remove", _eventtype); 195 } 196 },150); 197 } 198 } else { 199 if (_eventtype === "focus" || (_target.value !== undefined && _target.value.length)) { 200 labelinside(_target, "add", _eventtype); 201 } else if (_eventtype === "focusout" && !_target.value.length) { 202 labelinside(_target, "remove", _eventtype); 203 } 204 } 205 } 206 207 function labelinside(_target, _action, _eventtype) { 208 let $targetParent = $(_target).parent(), 209 aParentClass = (typeof $targetParent.attr('class') !== 'undefined') ? $targetParent.attr('class').split(' ') : []; 210 211 if (aParentClass.length > 0) { 212 if (_action === "add" && _eventtype !== "focusout") { 213 $targetParent.addClass(aParentClass[0] + "--focus"); 214 } else { 215 $targetParent.removeClass(aParentClass[0] + "--focus"); 216 } 217 } 218 219 $targetParent.find('[class*="--label-inside"]').each((_i, element) => { 220 let aModifier = [...element.classList].filter(sClass => sClass.includes("--label-inside")); 221 if (aModifier.length > 0) { 222 let sBlock = aModifier[0].substring(aModifier[0].indexOf("--label-inside"), 0); 223 224 if (_action === "add") { 225 $(element).addClass(sBlock + "--label-inside--up"); 226 } else { 227 $(element).removeClass(sBlock + "--label-inside--up"); 228 } 229 } 230 }); 231 } 232 233 // Mark active menus 234 if (!$.isEmptyObject($(`a[data-pageid="${active_pageid}"]`)[0])) { 235 setActiveMenus(active_pageid); 236 } else { 237 let aPages = active_pagelist.split(","); 238 239 aPages.shift(); // remove first "home"-entry 240 aPages.reverse(); // reverse order 241 242 for (page_id of aPages) { 243 if (!$.isEmptyObject($(`a[data-pageid="${page_id}"]`)[0])) { 244 setActiveMenus(page_id); 245 246 break; // break loop if menu is found 247 } 248 } 249 } 250 251}); 252 253// Extend jQuery by shuffle function 254$.fn.shuffle = function(callback) { 255 var allElems = this.get(), 256 getRandom = function(max) { 257 return Math.floor(Math.random() * max); 258 }, 259 shuffled = $.map(allElems, function(){ 260 var random = getRandom(allElems.length), 261 randEl = $(allElems[random]).clone(true)[0]; 262 allElems.splice(random, 1); 263 return randEl; 264 }); 265 266 this.each(function(i){ 267 $(this).replaceWith($(shuffled[i])); 268 }); 269 270 if(typeof callback !== "undefined") callback(); 271}; 272 273function loadModal(dataURL, dataClass, dataPOST){ 274 let sInitClass = 'modal__popup', 275 $popup = $('.' + sInitClass); 276 277 $popup.attr('class', sInitClass); 278 279 if(typeof dataClass !== 'undefined') $popup.addClass(dataClass); 280 dataPOST = dataPOST || {}; 281 282 if(dataURL.indexOf(window.location.host) !== -1 || dataURL.indexOf('youtube.cfm') !== -1){ 283 $.ajax({ 284 type:'POST', 285 data:dataPOST, 286 url:dataURL, 287 success:function(response){ 288 $popup.html($.trim(response)).show(); 289 $('.modal').show(); 290 } 291 }); 292 }else{ 293 dataPOST.url = dataURL; 294 295 $.ajax({ 296 type:'POST', 297 data:dataPOST, 298 url:siterelpath+'apps/services/iframe.cfm', 299 success:function(response){ 300 $popup.html($.trim(response)).show(); 301 $('.modal').show(); 302 } 303 }); 304 } 305 306} 307 308function closeModal(){ 309 // iFrame Inhalt neu laden (allfällige Videos werden gestoppt.) 310 $('.modal__popup iframe').each(function(i,frame){ 311 let $frame = $(frame); 312 if(typeof $frame.attr('src') !== 'undefined'){ 313 let iframeLink = $frame.attr('src'); 314 // Autoplay auf false setzen, sonst beginnt das Video von vorne! 315 iframeLink = iframeLink.replace('autoplay=1','autoplay=0');
316 iframeLink = iframeLink.replace('autoplay=true','autoplay=false'); 317 $frame.attr('src',''); 318 $frame.attr('src',iframeLink); 319 } 320 }); 321 322 $('.modal__popup').hide().empty(); 323 $('.modal').hide(); 324} 325 326function setActiveMenus(_pageid) { 327 $(`a[data-pageid="${_pageid}"]`).each((_i, elLink) => { 328 $(elLink).removeClass("nav__link--inactive").addClass("nav__link--active"); 329 330 $(elLink).parents(".nav__li").each((_i, elListItem) => { 331 $(elListItem).removeClass("nav__li--inactive").addClass("nav__li--active"); 332 $(elListItem).find("> .nav__link").removeClass("nav__link--inactive").addClass("nav__link--active"); 333 }); 334 }); 335} 336 337function is_touch_device(){ 338 try { 339 document.createEvent("TouchEvent"); 340 return true; 341 } catch (e) { 342 return false; 343 } 344} 345 346function msg(encoded_email){ 347 var decoded_email = window.atob(encoded_email); 348 window.location.href="mailto:"+decoded_email; 349}
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.