1/* 2//////////////////////////////////////////////////////////////// 3// 4// JavaScript Funktionen für die Navigation 5// 6// Weblication CMS BASE 7// erstellt durch Scholl Communications AG, 77694 Kehl, www.scholl.de 8// erstellt mit Weblication Content Management Server, www.weblication.de 9// 10///////////////////////////////////////////////////////////////f/ 11*/ 12 13wAllowMinimize = true; 14 15var megadropdownTimerOpen; 16var megadropdownTimerClose; 17var maxSizeNavigationmenu = 0; 18var delayOpen = 0; 19var delayClose = 0; 20var navigationlayeropentype = ''; 21 22//////////////////////////////////////////////////////////////// 23// 24// Beim Initialisieren der Seite 25// 26//////////////////////////////////////////////////////////////// 27 28jQuery(document).ready(function(){ 29 30 if(typeof(wEditor) == 'object'){ 31 return false; 32 } 33 var windowWidth = jQuery(window).width(); 34 navigationlayeropentype = jQuery('html').data('navigationlayeropentype') ? jQuery('html').data('navigationlayeropentype') : 'mouseenter'; 35 maxSizeNavigationmenu = jQuery('html').data('widthnavigationmainmenumax') ? jQuery('html').data('widthnavigationmainmenumax').replace(/px/, '') : 992; 36 jQuery('nav a').each(function(){ 37 38 if(!jQuery('html').hasClass('navlayer-open')){ 39 jQuery('#navigationMain navpointToggler.open').each(function(){jQuery(this).removeClass('open');}); 40 } 41 /*Megadropdowns*/ 42 if(jQuery(this).attr('data-previewlink') !== undefined){ 43 jQuery(this).parent().addClass('hasMegaDropdown'); 44 var id = jQuery(this).attr('id').replace(/navpoint_/, ''); 45 var megaDropdownEmbedMode = jQuery(this).closest('ul[data-embedmode]').attr('data-embedmode'); 46 var megaDropdownAddNavId = jQuery(this).closest('ul[data-addnavid]').attr('data-addnavid'); 47 var openMegaDropdownType = jQuery(this).closest('ul[data-type]').attr('data-type') ? jQuery(this).closest('ul[data-type]').attr('data-type') : (jQuery('html').data('megadropdownopentype') ? jQuery('html').data('megadropdownopentype') : 'mouseenter'); 48 var closeMegaDropdownType = jQuery(this).closest('ul[data-type]').attr('data-type') ? jQuery(this).closest('ul[data-type]').attr('data-type') : (jQuery('html').data('megadropdownclosetype') ? jQuery('html').data('megadropdownclosetype') : 'mouseenter'); 49 var megaDropdownPreload = jQuery(this).closest('ul[data-preload]').attr('data-preload') ? jQuery(this).closest('ul[data-preload]').attr('data-preload') : (jQuery('html').data('megadropdownpreload') ? jQuery('html').data('megadropdownpreload') : 'yes'); 50 51 /*opentype click*/ 52 if(openMegaDropdownType == 'click'){ 53 var windowWidth = jQuery(window).width(); 54 if(windowWidth >= maxSizeNavigationmenu){ 55 /*Klick-event auf a-tag oder keydown == 13*/ 56 jQuery(this).on('click touchstart', function(event){ 57 if(event.target.className.indexOf('navpointEmbedToggler') != -1){ 58 if(jQuery(event.target).attr('aria-pressed') == 'true'){ 59 jQuery(event.target).attr('aria-pressed', 'false'); 60 closeMegaDropdown(); 61 return; 62 } 63 else{ 64 jQuery(event.target).attr('aria-pressed', 'true'); 65 } 66 } 67 event.preventDefault(); 68 /*Wenn Megadropdown noch nicht geöffnet*/ 69 if(!jQuery('html').hasClass('megadropdown-open')){ 70 jQuery(this).parent().siblings().removeClass('hover'); 71 openMegaDropdown(id, jQuery(this).attr('data-previewlink'), {'mode' : megaDropdownEmbedMode, 'addNavId' : megaDropdownAddNavId}); 72 73 } 74 /*Wenn Megadropdown bereits geöffnet*/ 75 else{ 76 closeMegaDropdown(id, true); 77 if(id != wUiTmp['openMegaDropdownid']){ 78 openMegaDropdown(id, jQuery(this).attr('data-previewlink'), {'mode' : megaDropdownEmbedMode, 'addNavId' : megaDropdownAddNavId}); 79 } 80 } 81 /*SchlieÃen bestehender Navigationspunkte*/ 82 if(jQuery(wUiTmp['currentNavpoint']).closest('li').hasClass('clicked')){ 83 navpoint_onclick(wUiTmp['currentNavpoint'], null, event); 84 wUiTmp['currentNavpoint'] = null; 85 } 86 return false;
87 }); 88 jQuery(this).get(0).addEventListener("MSHoldVisual", function(e){e.preventDefault()}, false); 89 jQuery(this).get(0).addEventListener("contextmenu", function(e){if(e.which != 3) e.preventDefault()}, false); 90 } 91 } 92 /*opentype mousenter*/ 93 else{ 94 jQuery(this).parent().on('mouseenter click', function(event){ 95 if(event.target.className.indexOf('navpointEmbedToggler') != -1){ 96 if(jQuery(event.target).attr('aria-pressed') == 'true'){ 97 jQuery(event.target).attr('aria-pressed', 'false'); 98 closeMegaDropdown(); 99 return; 100 } 101 else{ 102 jQuery(event.target).attr('aria-pressed', 'true'); 103 } 104 } 105 openMegaDropdown(id, jQuery(this).attr('data-previewlink'), {'mode' : megaDropdownEmbedMode, 'addNavId' : megaDropdownAddNavId}); 106 }); 107 /*SchlieÃe geöffnete Navpoints*/ 108 jQuery(this).on('keyup', function(e){ 109 if(e.key === 'Tab'){ 110 accessibility_navPoint_mouseenter(jQuery(this), e, {'close':true}); 111 jQuery(this).parent().trigger('click'); 112 } 113 }); 114 115 jQuery(this).on('mousemove', function(event){ 116 if(jQuery(this).parent().hasClass('selected') && !jQuery('html').hasClass('megadropdown-open')){ 117 jQuery(this).parent().trigger('click'); 118 } 119 }); 120 } 121 122 if(megaDropdownPreload != 'no'){ 123 if(jQuery(window).width() >= maxSizeNavigationmenu){ 124 loadMegaDropdown(id, jQuery(this).attr('data-previewlink'), {'mode' : megaDropdownEmbedMode, 'addNavId' : megaDropdownAddNavId, 'initToPreload' : true}); 125 } 126 } 127 } 128 /*Navpoint*/ 129 else if(jQuery(this).attr('data-previewlink') === undefined){ 130 jQuery(this).on('keyup', function(event){ 131 if(navigationlayeropentype != 'click' && event.key == 'Tab'){ 132 accessibility_navPoint_mouseenter(jQuery(this), event); 133 event.stopPropagation(); 134 event.stopImmediatePropagation(); 135 } 136 }); 137 } 138 }); 139 140 jQuery('#navigationMain ul, #navigationMain > nav > div > ul > li > div ul').each(function(){ 141 142 if(jQuery(this).attr('data-addtitle') == '1' && jQuery(this).data('hasAddTitle') != '1'){ 143 var elementTitle = jQuery('<li class="navlayerTitle"><span>' + (jQuery(this).parent().find(' > a').html() ? jQuery(this).parent().find(' > a').html() : '') + '</span></li>'); 144 jQuery(this).prepend(elementTitle); 145 jQuery(this).data('hasAddTitle', '1'); 146 } 147 148 if(jQuery(this).attr('data-addbacktitle') == '1' && jQuery(this).data('hasAddBacktitle') != '1'){ 149 var elementBackTitle = jQuery('<li class="navlayerBackTitle"></span><span class="navlayerBackTitleText">' + (jQuery(this).parent().find(' > a').text() ? jQuery(this).parent().find(' > a').text() : '') + '</span><span class="navlayerBackTitleCloser"></li>'); 150 jQuery(this).prepend(elementBackTitle); 151 elementBackTitle.on('click', function(){jQuery(this).parent().parent().find('> span.navpointToggler').trigger('click')}); 152 jQuery(this).data('hasAddBacktitle', '1'); 153 } 154 155 if(jQuery(this).attr('data-addbackparenttitle') == '1' && jQuery(this).data('hasAddBackparenttitle') != '1'){ 156 var elementBackParentTitle = jQuery('<li class="navlayerBackParentTitle"><span>' + (jQuery(this).parent().parent().parent().find(' > a').html() ? jQuery(this).parent().parent().parent().find(' > a').html() : '') + '</span></li>'); 157 jQuery(this).prepend(elementBackParentTitle); 158 elementBackParentTitle.on('click', function(){jQuery(this).parent().parent().find('> span.navpointToggler').trigger('click')}); 159 jQuery(this).data('hasAddBackparenttitle', '1'); 160 } 161 162 if(jQuery(this).attr('data-addcloser') == '1' && jQuery(this).data('hasAddCloser') != '1'){ 163 var elementCloser = jQuery('<li class="navlayerCloser"></li>'); 164 jQuery(this).prepend(elementCloser); 165 elementCloser.on('click', function(){jQuery(this).parent().parent().find('> span.navpointToggler').trigger('click')}); 166 jQuery(this).data('hasAddCloser', '1'); 167 } 168 }); 169 170 jQuery('#navigationMain li > a').each(function(){ 171 jQuery(this).get(0).addEventListener("MSHoldVisual", function(e){e.preventDefault()}, false); 172 jQuery(this).get(0).addEventListener("contextmenu", function(e){if(e.which != 3) e.preventDefault()}, false); 173 174 if(jQuery(this).siblings('ul, div').length > 0){ 175 jQuery(this).attr('aria-haspopup', 'true'); 176 } 177 }); 178 179 180 wToggleOnClickNavpointInMenu = jQuery('#navigationMain > nav > div > ul').data('toggleonclicknavpointinmenu') == '1' ? true : false;
181 wToggleOnClickNavpointMainInMenu = jQuery('#navigationMain > nav > div > ul').data('toggleonclicknavpointmaininmenu') == '1' ? true : false; 182 183 if(maxSizeNavigationmenu > 0 && windowWidth <= maxSizeNavigationmenu && typeof(wToggleOnClickNavpointInMenu) != 'undefined' && wToggleOnClickNavpointInMenu){ 184 jQuery('.navpointToggler').each(function(){ 185 if(jQuery(this).siblings('a').length > 0){ 186 jQuery(this).siblings('a').on('click', function(){ 187 var attHref = jQuery(this).attr('href'); 188 if(!jQuery(this).next().hasClass('open') || attHref == '' || attHref == '#'){ 189 jQuery(this).attr('data-donotclose', 1); 190 event.stopPropagation(); 191 jQuery(this).next().trigger('click'); 192 return false; 193 } 194 }); 195 } 196 }); 197 } 198 else if(maxSizeNavigationmenu > 0 && windowWidth <= maxSizeNavigationmenu && typeof(wToggleOnClickNavpointMainInMenu) != 'undefined' && wToggleOnClickNavpointMainInMenu){ 199 jQuery('ul[data-navlevel="1"] > li > .navpointToggler').each(function(){ 200 if(jQuery(this).siblings('a').length > 0){ 201 jQuery(this).siblings('a').on('click', function(){ 202 var attHref = jQuery(this).attr('href'); 203 if(!jQuery(this).next().hasClass('open') || attHref == '' || attHref == '#'){ 204 jQuery(this).attr('data-donotclose', 1); 205 event.stopPropagation(); 206 jQuery(this).next().trigger('click'); 207 return false; 208 } 209 }); 210 } 211 }); 212 } 213 else{ 214 jQuery('.navpointToggler').each(function(){ 215 var navToggler = jQuery(this); 216 if(jQuery(this).siblings('a').length > 0){ 217 if(jQuery(this).siblings('a').width()*(-1) > parseInt(navToggler.css('left'))) navToggler.attr('tabindex', '-1'); 218 jQuery(this).siblings('a').on('click', function(event){ 219 var attHref = jQuery(this).attr('href'); 220 if(attHref == '' || attHref == '#'){ 221 jQuery(this).attr('data-donotclose', 1); 222 event.stopPropagation(); 223 if(jQuery(this).siblings('div.submenu').length != 1 && jQuery(this).siblings().attr('data-wrapifnavigationfull') !== '1'){ 224 event.stopImmediatePropagation(); 225 } 226 if(navigationlayeropentype === 'click'){ 227 var toggler = jQuery(this).next(); 228 var ontoggle = toggler.attr('data-ontoggle'); 229 if(jQuery(window).width() > maxSizeNavigationmenu && (jQuery(this).attr['data-previewlink'] !== undefined && jQuery(this).attr['data-previewlink'] != '')) toggler.attr('data-ontoggle', 'none'); 230 toggler.trigger('click'); 231 toggler.attr('data-ontoggle', ontoggle); 232 } 233 return false; 234 } 235 }); 236 } 237 }); 238 } 239 240 var windowWidth = jQuery(window).width(); maxSizeNavigationmenu 241 242 jQuery('#navigationMainToggler, .navigationMainToggler').on('click', function(){ 243 navigationToggler_onclick(this); 244 }); 245 246 jQuery('.navpointToggler').on('click', function(){ 247 navpointToggler_onclick(this); 248 }); 249 250 jQuery('.navpointToggler').on('keyup', function(e){ 251 if(e.originalEvent.key === 'Enter'){ 252 navpointToggler_onclick(this); 253 e.preventDefault(); 254 } 255 }); 256 257 jQuery('#navigationMain li > a').on('click', function(event){ 258 navpoint_onclick(this, jQuery(this).parent().parent().data('navlevel'), event); 259 }); 260 261 jQuery('#navigationMain li > a').each(function(){ 262 var el = this; 263 el.addEventListener('touchstart', function(){ 264 navpoint_onclick(el, jQuery(el).parent().parent().data('navlevel'), event); 265 el}, {passive: true}); 266 }); 267 268 jQuery('#navigationMain li').on('mouseenter', function(event){ 269 if(!(jQuery(this).children('div.submenu').length > 0 || jQuery(this).closest('div.submenu').length > 0)){ 270 navpoint_onmouseenter(this, jQuery(this).parent().data('navlevel'), event); 271 } 272 else{ 273 accessibility_navPoint_open(jQuery(this), event); 274 } 275 }); 276 277 jQuery('#navigationMain li').on('mouseleave', function(event){ 278 if(!(jQuery(this).children('div.submenu').length > 0 || jQuery(this).closest('div.submenu').length > 0)){ 279 navpoint_onmouseleave(this, jQuery(this).parent().data('navlevel'), event); 280 } 281 else{ 282 accessibility_navPoint_close(jQuery(this), event); 283 } 284 }); 285 286 jQuery('body').on('click touchstart', function(event){ 287 if(window['wglTouchStartedNavlayers']){ 288 var timeTouchstartBody = new Date().getTime(); 289 var timeDiffTouch = timeTouchstartBody - window['wglTouchStartedNavlayers']; 290 if(timeDiffTouch > 100){ 291 jQuery('a[data-has-already-touched="1"]').attr('data-has-already-touched', ''); 292 } 293 } 294 }); 295 296 /*Barrierefreiheit*/ 297 var nMTE = jQuery('#navigationMainToggler'); 298 var nMTEInit = function(){ 299 jQuery("nav .navpointToggler:not(.open)").attr('aria-expanded', "false"); 300 jQuery("nav .navpointToggler.open").attr('aria-expanded', jQuery('nav .navpointToggler.open').siblings('ul').is(':hidden') ? 'true' : 'false'); 301 if(nMTE.length > 0 && nMTE.is(':visible')){ 302 //nMTE.siblings('nav').find('ul li a, .navpointToggler').attr('tabindex', nMTE.attr('aria-expanded') === 'false' ? '-1' : ''); 303 nMTE.on('keyup',function(e){ 304 if(e.originalEvent.key === 'Enter'){ 305 nMTE.trigger('click'); 306 if(nMTE.hasClass('open')){ 307 jQuery(document).off('keydown.closeNavigationToggler').on('keydown.closeNavigationToggler', function(e){ 308 if(e.key === 'Escape'){ 309 nMTE.trigger('click'); 310 jQuery(document).off('keydown.closeNavigationToggler'); 311 } 312 }); 313 } 314 e.preventDefault(); 315 e.stopImmediatePropagation(); 316 } 317 nMTE.siblings('nav').find('ul li a, .navpointToggler').attr('tabindex', nMTE.attr('aria-expanded') !== "fal
317se" ? '0' : '-1'); 318 }); 319 } 320 }; 321 nMTEInit(); 322 jQuery(window).on('resize', function(){ 323 nMTEInit(); 324 }); 325 326 jQuery('html #blockPageInner').on('keyup', function(e){ 327 if((jQuery('html').hasClass('navlayer-open') || jQuery('html').hasClass('megadropdown-open')) && e.originalEvent.key === 'Tab'){ 328 var cE = jQuery(e.originalEvent.target); 329 var navigation = cE.closest('#navigationMain'); 330 var nP = jQuery('#navpoint_' + wUiTmp['openMegaDropdownid']).closest('li'); 331 nP.css({'outline': 'none'}); 332 //auÃerhalb der navigation 333 if(navigation.length == 0 && navigation.find('#navigationMainToggler.open').length == 0){ 334 var nPNext = nP.next(); 335 if(nP.length > 0 && nP.siblings().length > 0 && nPNext.length > 0){ 336 var e = new KeyboardEvent("keyup", {key : 9, 'code' : 'focusonnextnavpoint', bubbles : false, cancelable : true}); 337 if(nPNext.length > 0){ 338 nPNext.find('a').focus(); 339 accessibility_navPoint_open(nPNext, e); 340 } 341 closeMegaDropdown(undefined, true); 342 } 343 else{ 344 closeMegaDropdown(undefined, true); 345 var li = jQuery('#navigationMain').find(navigationlayeropentype != 'click' ? 'li' : 'li.clicked'); 346 li.each(function(){ 347 if(e.originalEvent.key === 'Tab' && wUiTmp['currentNavpoint'] !== undefined){ 348 navpoint_onclick(wUiTmp['currentNavpoint'], null, e); 349 } 350 accessibility_navPoint_close(jQuery(this)); 351 }); 352 } 353 } 354 else if(navigation.length > 0 && jQuery('html').hasClass('megadropdown-open') && cE.closest('.navLevelEmbed').length === 0 && 'navpoint_'+ wUiTmp['openMegaDropdownid'] != cE.attr('id')){ 355 closeMegaDropdown(wUiTmp['openMegaDropdownid'], true); 356 } 357 else if(navigation.length > 0 && wUiTmp['currentNavpoint'] != undefined){ 358 //wenn CE kein UnterKnoten von currentNavPoint dann -- CLose 359 var isdesc = cE.parents().is(jQuery(wUiTmp['currentNavpoint']).closest('li')); 360 if(!isdesc){ 361 navpoint_onclick(wUiTmp['currentNavpoint'], null, e); 362 } 363 } 364 else{ 365 e.stopPropagation(); 366 e.stopImmediatePropagation(); 367 } 368 } 369 else if(jQuery('html').hasClass('navlayer-open') && e.originalEvent.key == 'Escape'){ 370 } 371 else{ 372 if(jQuery(e.originalEvent.target).closest('#navigationMain').length === 0){ 373 if(nMTE.hasClass('open')) nMTE.focus(); 374 } 375 } 376 }); 377 378 accessibility_navPoint_mouseenter = function(element, event, options){ 379 380 if(nMTE.length > 0 && nMTE.is(':visible') && !nMTE.hasClass('open')){ 381 var event = jQuery.Event('keyup', event); 382 nMTE.trigger(event); 383 return true; 384 } 385 var a = jQuery(element); 386 var li = a.parent(); 387 var isdesc = a.parents('li').is(jQuery(wUiTmp['currentNavpointME'])); 388 var close = options != undefined && options['close'] === true ? true : false; 389 var curNPME = jQuery(wUiTmp['currentNavpointME']); 390 if(close){ 391 if(curNPME.length > 0 && curNPME.closest('li').hasClass('clicked')){ 392 accessibility_navPoint_close(curNPME); 393 wUiTmp['currentNavpointME'] = undefined; 394 return false; 395 } 396 } 397 if(wUiTmp['currentNavpointME'] != undefined && !isdesc){ 398 accessibility_navPoint_close(curNPME); 399 } 400 if(a.attr('data-previewlink') != undefined && windowWidth > maxSizeNavigationmenu) return false; 401 402 if(li.parent().attr('data-navlevel') == '1'){ 403 wUiTmp['currentNavpointME'] = li; 404 } 405 406 var liS = li.siblings(); 407 var navpointToggler = nT = a.next('.navpointToggler'); 408 409 if(typeof(wAccessibility) !== 'undefined' && wAccessibility.navigationTogglerDynamic && wAccessibility.navigationTogglerDynamic.active){ 410 if(navpointToggler.length > 0){ 411 nT.attr('tabindex', '0'); 412 if(wAccessibility.navigationTogglerDynamic.class){ 413 var nTClass = wAccessibility.navigationTogglerDynamic.class; 414 if(nTClass != ''){ 415 nT.on('focus', function(e) {jQuery(this).addClass(nTClass)}) 416 .on('blur', function(e) {jQuery(this).removeClass(nTClass)}); 417 } 418 } 419 } 420 else{ 421 jQuery("nav .navpointToggler:not(.open)").attr('aria-expanded', "false"); 422 jQuery("nav .navpointToggler.open").attr('aria-expanded', jQuery('nav .navpointToggler.open').siblings('ul').is(':hidden') ? 'true' : 'false'); 423 } 424 } 425 else if(navpointToggler.length > 0){ 426 navpointToggler.attr('tabindex', '-1'); 427 /*Korrigieren wenn ausgewählter navpoint*/ 428 if(!jQuery('html').hasClass('navlayer-open') && navpointToggler.hasClass('open'))navpointToggler.removeClass('open'); 429 accessibility_navPoint_open(li); 430 } 431 else{ 432 liS.each(function(){
433 var cE = jQuery(this).css({'outline': 'none'}); 434 var avoidToggle = cE.hasClass('selected') && !jQuery('html').hasClass('navlayer-open'); 435 if(!avoidToggle && cE.children('.navpointToggler.open').length > 0){ 436 accessibility_navPoint_close(cE); 437 } 438 }); 439 } 440 }; 441 442 accessibility_navPoint_close = function(nP){ 443 navpoint_onmouseleave(nP, nP.parent().data('navlevel'), event); 444 nP.children('.navpointToggler.open').each(function(){ 445 navpointToggler_onclick(jQuery(this), {'status':'close'}); 446 }); 447 }; 448 449 accessibility_navPoint_open = function(nP, event){ 450 navpoint_onmouseenter(nP, nP.parent().data('navlevel'), event); 451 nP.children('.navpointToggler').each(function(){ 452 navpointToggler_onclick(jQuery(this), {'status':'open'}); 453 }); 454 jQuery(document).on('keydown.closeNavpoint', function(e){ 455 if(e.key === 'Escape'){ 456 e.preventDefault(); 457 if(nMTE.length > 0 && nMTE.is(':visible')){ 458 closeNavigationMenu(); 459 } 460 else{ 461 accessibility_navPoint_close(nP); 462 nP.focus(); 463 } 464 jQuery(document).off('keydown.closeNavpoint'); 465 } 466 }); 467 }; 468 469 jQuery(window).on('resize', adaptSizeNavigation); 470 adaptSizeNavigation(); 471 472 jQuery('body').append('<div id="navlayer-background"/>'); 473}); 474 475//////////////////////////////////////////////////////////////// 476// 477// @method void showMegadropdown(id, url, mode) 478// 479// @desc Ãffnet einen eingebetteten Navigationspunkt als Mega Dropdown 480// 481// @return void 482// 483//////////////////////////////////////////////////////////////// 484 485loadMegaDropdown = function(id, url, options){ 486 //console.log('mageDropdownLoad(' + id + ', ' + url + ')'); 487 488 options = options || {}; 489 490 var windowWidth = jQuery(window).width(); 491 492 var mode = options['mode']; 493 var addNavId = options['addNavId']; 494 var initToPreload = options['initToPreload']; 495 496 var navPoint = jQuery('#navpoint_' + id); 497 498 var navigationTogglerOnClick = jQuery('html').data('navigationtoggleronclick') ? jQuery('html').data('navigationtoggleronclick') : ''; 499 500 if(navigationTogglerOnClick == 'toggleFirstMegaDropdownIfFullWidth' && windowWidth >= maxSizeNavigationmenu){ 501 navPoint = jQuery('#navigationMainToggler'); 502 } 503 504 if(navPoint.data('hasLoaded') == '1'){ 505 } 506 else if(navPoint.data('loading') == '1'){ 507 } 508 else if(mode != 'iframe'){ 509 510 var navLevelEmbed = jQuery('<div class="navLevelEmbed" id="navEmbed_' + id + '"><div></div></div>'); 511 512 var wMegadropdownInsertPos = ''; 513 try{wMegadropdownInsertPos = jQuery('#navigationMain').css('--wMegadropdownInsertPos');}catch(e){} 514 //console.log(wMegadropdownInsertPos); 515 516 if(/append-(\w+)/.test(wMegadropdownInsertPos)){ 517 var elementToAppend = jQuery('#' + RegExp.$1); 518 elementToAppend.append(navLevelEmbed); 519 elementToAppend.addClass('hasMegaDropdown'); 520 } 521 else if(/insertBefore-(\w+)/.test(wMegadropdownInsertPos)){ 522 var elementToAppend = jQuery('#' + RegExp.$1); 523 elementToAppend.before(navLevelEmbed); 524 elementToAppend.addClass('hasMegaDropdown'); 525 } 526 else{ 527 var elementToAppend = navPoint.parent(); 528 //var elementToAppend = jQuery('#blockHeader'); 529 elementToAppend.append(navLevelEmbed); 530 elementToAppend.addClass('hasMegaDropdown'); 531 } 532 533 url += (typeof url === 'string' && url.indexOf('?') == -1 ? '?' : '&') + 'viewmode=embed'; 534 535 if(addNavId != 'no'){ 536 if(typeof(wNavidStandard) != 'undefined' && wNavidStandard != ''){ 537 url += '&navid=' + wNavidStandard; 538 } 539 } 540 url = url.replace('[URL]', location.pathname + location.search); 541 542 navPoint.data('loading', '1'); 543 544 jQuery.ajax({ 545 type: "GET", 546 url: url, 547 async: true, 548 success: function(result){ 549 result = result.replace(/\n/g, '_wNL-'); 550 result = result.replace(/(\s+id=")([^"]+)(")/gi, function(matches, p1, p2, p3){ 551 if(!document.getElementById(p2)){ 552 return ' data-replacedid="' + p2 + '"' + p1 + p2 + p3; 553 } 554 return ' data-replacedid="' + p2 + '"'; 555 });
556 result = result.replace(/^.*<!--\s*CONTENT:START\s*-->/im, ''); 557 result = result.replace(/<!--\s*CONTENT:STOP\s*-->.*$/im, ''); 558 result = result.replace(/_wNL-/g, "\n"); 559 560 navLevelEmbed.find('> div').html(result); 561 562 navLevelEmbed.find('> div').on('mouseenter', function(event){ 563 openMegaDropdown(id); 564 }); 565 566 var closeMegaDropdownType = jQuery(this).closest('ul[data-type]').attr('data-type') ? jQuery(this).closest('ul[data-type]').attr('data-type') : (jQuery('html').data('megadropdownclosetype') ? jQuery('html').data('megadropdownclosetype') : 'mouseleave'); 567 568 if(closeMegaDropdownType == 'click'){ 569 } 570 else{ 571 navLevelEmbed.find('> div').on('mouseleave', function(event){ 572 wUiTmp['donotcloseMegadropdown'] = false; 573 closeMegaDropdown(id, false, 300); 574 }).on('mouseenter', function(event){ 575 wUiTmp['donotcloseMegadropdown'] = true; 576 }); 577 } 578 579 navPoint.data('hasLoaded', '1'); 580 navPoint.data('loading', ''); 581 if(wUiTmp['megaDropdownShowAfterLoading'] ||Â options['openAfterLoad']){ 582 openMegaDropdown(id); 583 wUiTmp['megaDropdownShowAfterLoading'] = false; 584 } 585 } 586 }); 587 } 588 else{ 589 590 var elementToAppend = navPoint.parent(); 591 elementToAppend.append('<div class="navLevelEmbed" id="navEmbed_' + id + '"></div>'); 592 elementToAppend.addClass('hasMegaDropdown'); 593 594 url = url.indexOf('?') == -1 ? url + '?parentIframeId=navEmbedIframe_'+id : url + '&parentIframeId=navEmbedIframe_'+id; 595 url = url.indexOf('dropdown') == -1 ? url + '&viewmode=blank' : url; 596 url = url.replace('[URL]', location.pathname + location.search); 597 598 navPoint.data('hasLoaded', '1'); 599 600 var iframeEmbed = document.createElement('iframe'); 601 602 iframeEmbed.id = 'navEmbedIframe_' + id; 603 iframeEmbed.className = 'navLevel1Embed'; 604 iframeEmbed.frameBorder = '0'; 605 iframeEmbed.scrolling = 'no'; 606 iframeEmbed.src = url; 607 608 elementToAppend.find('.navLevelEmbed').append(iframeEmbed); 609 navPoint.data('hasLoaded', '1'); 610 } 611}; 612 613 614//////////////////////////////////////////////////////////////// 615// 616// @method void showMegadropdown(id, url, mode) 617// 618// @desc Ãffnet einen eingebetteten Navigationspunkt als Mega Dropdown 619// 620// @return void 621// 622//////////////////////////////////////////////////////////////// 623 624openMegaDropdown = function(id, url, options){ 625 //console.log('openMegaDropdown(' + id + ' ' + url + ')'); 626 627 wUiTmp['openMegaDropdownTime'] = typeof wUiTmp['openMegaDropdownTime'] !== 'undefined' ? wUiTmp['openMegaDropdownTime'] : {}; 628 wUiTmp['openMegaDropdownTime'][id] = Date.now(); 629 630 jQuery(document).off('keydown.closeMegadropdown').on('keydown.closeMegadropdown', function(e){ 631 if(e.key === 'Escape' || e.key == 'Tab' && e.shiftKey){ 632 closeMegaDropdown(id, true, options); 633 jQuery('#navpoint_' + id).focus(); 634 jQuery(document).off('keydown.closeMegadropdown'); 635 } 636 }); 637 638 var navPoint = jQuery('#navpoint_' + id); 639 640 if(jQuery('html').hasClass('navmenu-open') && navPoint.parent().attr('data-allownavlevelembed') != '1'){ 641 return false; 642 } 643 644 options = options || {}; 645 646 var windowWidth = jQuery(window).width(); 647 648 if(windowWidth < maxSizeNavigationmenu){ 649 return false; 650 } 651 652 var mode = options['mode']; 653 var addNavId = options['addNavId']; 654 var initToPreload = options['initToPreload']; 655 656 var navPoint = jQuery('#navpoint_' + id); 657 658 var navigationTogglerOnClick = jQuery('html').data('navigationtoggleronclick') ? jQuery('html').data('navigationtoggleronclick') : ''; 659 660 if(navigationTogglerOnClick == 'toggleFirstMegaDropdownIfFullWidth' && windowWidth >= maxSizeNavigationmenu){ 661 navPoint = jQuery('#navigationMainToggler'); 662 } 663 664 if(navPoint.data('loading') == '1'){ 665 wUiTmp['megaDropdownShowAfterLoading'] = true; 666 return; 667 } 668 else if(navPoint.data('hasLoaded') != '1'){ 669 options['openAfterLoad'] = true; 670 loadMegaDropdown(id, url, options); 671 return; 672 } 673 674 if(wUiTmp['openMegaDropdownid'] != null && id != wUiTmp['openMegaDropdownid']){ 675 closeMegaDropdown(wUiTmp['openMegaDropdownid'], true); 676 } 677 if(id === wUiTmp['openMegaDropdownid']) wUiTmp['donotcloseMegadropdown'] = true; 678 679 wUiTmp['openMegaDropdownid'] = id; 680 681 jQuery('.navLevelEmbed').hide({'duration' : 0, 'queue' : false}); 682 683 var navPoint = jQuery('#navpoint_' + id); 684 jQuery('#navEmbed_' + id).fadeIn({'duration' : 0, 'queue' : false}); 685 686 if(jQuery('#navlayer-background').length == 0){ 687 jQuery('body').append('<div id="navlayer-background"/>'); 688 } 689 690 jQuery('html').addClass('megadropdown-open'); 691 692 if(navPoint.data('haspreparedmagadropdown') != '1'){ 693 var openMegaDropdownType = jQuery('html').data('megadropdownopentype') ? jQuery('html').data('megadropdownopentype')
693: 'mouseenter'; 694 var closeMegaDropdownType = jQuery('html').data('megadropdownclosetype') ? jQuery('html').data('megadropdownclosetype') : 'mouseenter'; 695 var navigationTogglerOnClick = jQuery('html').data('navigationtoggleronclick') ? jQuery('html').data('navigationtoggleronclick') : ''; 696 if(openMegaDropdownType == 'click' || navigationTogglerOnClick == 'toggleFirstMegaDropdownIfFullWidth'){ 697 if(jQuery('body').data('hasAddCloseEventMegadropdown') != '1'){ 698 jQuery('body').on('click', function(event){ 699 var isTrusted = event.originalEvent && event.originalEvent.isTrusted || event.isTrusted; 700 if(isTrusted && jQuery(event.target).closest('.navLevelEmbed > div').length == 0 && jQuery('body').data('canCloseMegadropdown') == '1'){ 701 closeMegaDropdown(undefined, true); 702 } 703 }); 704 jQuery('body').data('hasAddCloseEventMegadropdown', '1'); 705 } 706 } 707 else{ 708 if(jQuery('body').data('hasAddCloseEventMegadropdown' + id) != '1'){ 709 jQuery('#navEmbed_' + id).parent().on('mouseleave', function(event){ 710 if(jQuery('body').data('canCloseMegadropdown') == '1'){ 711 closeMegaDropdown(); 712 } 713 }); 714 jQuery('body').data('hasAddCloseEventMegadropdown' + id, '1'); 715 } 716 } 717 var navEmbedE = jQuery('#navEmbed_' + id).children().first().attr('tabindex', 0); 718 /*Anmelden Keydownhandler*/ 719 jQuery(document).off('keydown.onceKeyHandler').on('keydown.onceKeyHandler', function(e){ 720 if(jQuery('html').hasClass('megadropdown-open') && e.key == 'Tab'){ 721 navEmbedE.focus(); 722 jQuery(document).off('keydown.onceKeyHandler'); 723 } 724 }); 725 726 jQuery('body').data('canCloseMegadropdown', '1'); 727 jQuery('#navEmbed_' + id).find('.wglBannerSlider').wBannerSlider(); 728 jQuery('#navEmbed_' + id).find('.wglPictureGallery').wPictureGallery(); 729 jQuery('#navEmbed_' + id).find('.wglTabcontainer').wTabcontainer(); 730 jQuery('#navEmbed_' + id).find('.wglAccordion').wAccordion(); 731 732 navPoint.data('haspreparedmagadropdown', '1'); 733 } 734 else{ 735 window.setTimeout(function(){ 736 jQuery('body').data('canCloseMegadropdown', '1'); 737 }, 100); 738 } 739 740 jQuery(window).trigger('resize'); 741}; 742 743//////////////////////////////////////////////////////////////// 744// 745// @method void showMegadropdown(id, url, mode) 746// 747// @desc Ãffnet einen eingebetteten Navigationspunkt als Mega Dropdown 748// 749// @return void 750// 751//////////////////////////////////////////////////////////////// 752 753closeMegaDropdown = function(id, force, delayClose){ 754 //console.log('closeMegaDropdown(' + id + ', ' + force + ')'); 755 756 id = id || wUiTmp['openMegaDropdownid']; 757 jQuery(document).off('keydown.closeMegadropdown'); 758 759 if(typeof id === 'undefined' || typeof wUiTmp['openMegaDropdownTime'] === 'undefined'){ 760 return; 761 } 762 763 if(force){ 764 jQuery('#navEmbed_' + id).hide({'duration' : 0, 'queue' : false}); 765 jQuery('html').removeClass('megadropdown-open'); 766 } 767 768 window.setTimeout(function(){ 769 if(wUiTmp['donotcloseMegadropdown'] || Date.now() - wUiTmp['openMegaDropdownTime'][id] < 10 + 16){ 770 wUiTmp['openMegaDropdownTime'][id] = 0; 771 return; 772 } 773 774 jQuery('#navEmbed_' + id).hide({'duration' : 0, 'queue' : false}); 775 776 megadropdownTimerClose = null; 777 var removeClass = true; 778 if(jQuery('#navigationMain div[id^=navEmbed]').is(':visible') && jQuery('#navigationMain div[id^=navEmbed]').css('display') != 'block') removeClass = false; 779 if(removeClass){ 780 jQuery('html').removeClass('megadropdown-open'); 781 wUiTmp['openMegaDropdownid'] = undefined; 782 } 783 if(id == wUiTmp['openMegaDropdownid']) jQuery('body').data('canCloseMegadropdown', '0'); 784 }, (delayClose !== undefined ? delayClose : 16)); 785 786}; 787 788//////////////////////////////////////////////////////////////// 789// 790// @method void toggleFirstMegaDropdown() 791// 792// @desc Ãffnet bzw. schlieÃt das erste Mega Dropdown 793// 794// @return void 795// 796//////////////////////////////////////////////////////////////// 797 798megaDropdownToggleFirst = function(){ 799 800 return; 801 /* 802 if(!jQuery('html').hasClass('megadropdown-open')){ 803 if(jQuery('nav a[data-previewlink]').length != 0){ 804 var previewlink = jQuery('nav a[data-previewlink]'); 805 var firstNavLevelEmbedID = previewlink.attr('id').replace('navpoint_', ''); 806 var url = previewlink.attr('data-previewlink'); 807 megaDrodownOpen(firstNavLevelEmbedID, url, {}); 808 } 809 } 810 else{ 811 closeMegaDropdown(); 812 } 813 */ 814}; 815 816//////////////////////////////////////////////////////////////// 817// 818// @method void closeNavigationMenu() 819// 820// @desc SchlieÃt die Menünavigation 821// 822// @return void 823// 824//////////////////////////////////////////////////////////////// 825 826closeNavigationMenu = function(){ 827 828 jQuery('html').removeClass('navmenu-open'); 829 jQuery('#navigationMain').removeClass('open'); 830 jQuery(wUiTmp['elementNavigationToggler']).removeClass('open'); 831}; 832 833//////////////////////////////////////////////////////////////// 834// 835// Beim Klicken auf den Toggler, um die mobile Navigation ein- und auszublenden 836// 837//////////////////////////////////////////////////////////////// 838 839navigationToggler_onclick = function(element){ 840 //console.log('navigationToggler_onclick'); 841 842 var windowWidth = jQuery(window).width(); 843 844 var navigationTogglerOnClick = jQuery('html').data('navigationtoggleronclick') ? jQuery('html').data('navigationtoggleronclick') : ''; 845 var besideNavigationOnClick = jQuery('#navigationMain').data('onlickbesidenavigation') ? jQuery('#navigationMain').data('onlickbesidenavigation') : ''; 846 var keepSubmenuesOpenOnClose = jQuery('#navigationMainToggler').data('keepsubmenuesopenonclose') ? jQuery('#navigationMainToggler').data('keepsubmenuesopenonclose') : ''; 847 848 if(navigationTogglerOnClick == 'toggleFirstMegaDropdownIfFullWidth' && windowWidth >= maxSizeNavigationmenu){ 849 toggleFirstMegaDropdown(); 850 return; 851 } 852 853 wUiTmp['elementNavigationToggler'] = element; 854 jQuery(element).toggleClass('open'); 855 856 if(jQuery('#navlayer-background').length == 0){ 857 jQuery('body').append('<div id="navlayer-background"/>'); 858 } 859 860 if(jQuery('#navigationMenuCloser').length == 0){ 861 jQuery('#navigationMain > nav > div').prepend('<div id="navigationMenuCloser" class="open"><div/></div>'); 862 jQuery('#navigationMenuCloser').on('click', function(){navigationToggler_onclick(jQuery(this))}); 863 } 864 865 if(jQuery('#navigationMenuPre').length != 0 && jQuery('#navigationMain > nav > div > #navigationMenuPre').length == 0){ 866 jQuery('#navigationMain > nav > div').prepend(jQuery('#navigationMenuPre')); 867 if(jQuery('#navigationMain > nav > div').attr('data-preventclickchildren') === '1'){ 868 jQuery('#navigationMenuPre').on('click', function(){event.stopPropagation()}); 869 } 870 jQuery('#navigationMenuPre').append(jQuery('*[data-appendnavigationmenupre="1"]').show()); 871 } 872 873 if(jQuery('#navigationMenuPost').length != 0 && jQuery('#navigationMain > nav > div > #navigationMenuPost').length == 0){ 874 jQuery('#navigationMain > nav > div').append(jQuery('#navigationMenuPost')); 875 if(jQuery('#navigationMain > nav > div').attr('data-preventclickchildren') === '1'){ 876 jQuery('#navigationMenuPost').on('click', function(){event.stopPropagation()}); 877 } 878 if(jQuery('*[data-appendnavigationmenupost="1"]').is(':visible')){ 879 jQuery('#navigationMenuPost').append(jQuery('*[data-appendnavigationmenupost="1"]').clone().show()); 880 } 881 } 882 883 if(!jQuery('html').hasClass('navmenu-open')){ 884 wCloseWaiMenu(); 885 jQuery('html').addClass('navmenu-open'); 886 jQuery('#navigationMain').addClass('open'); 887 jQuery(element).attr('aria-expanded', 'true'); 888 } 889 else{ 890 jQuery('html').removeClass('navmenu-open'); 891 jQuery('#navigationMain').removeClass('open'); 892 jQuery(element).attr('aria-expanded', 'false'); 893 if(keepSubmenuesOpenOnClose != '1'){ 894 jQuery('nav li.displaySub').removeClass('displaySub'); 895 } 896 } 897 898 if(!wUiTmp['hasAddEventToRestoreNavigationToggler']){ 899 jQuery(window).on('resize', function(event){ 900 if(event.isTrigger && jQuery('html').hasClass('navmenu-open')){ 901 var windowWidth = jQuery(window).width(); 902 try{ 903 if(windowWidth >= maxSizeNavigationmenu && wDocument.element('#navigationMainToggler') && window.getComputedStyle(wDocument.element('#navigationMainToggler')).getPropertyValue('display') == 'none'){ 904 closeNavigationMenu(); 905 } 906 } 907 catch(e){} 908 } 909 }); 910 911 if(besideNavigationOnClick == 'closeNavigation'){ 912 jQuery('#navigationMain').on('click', function(event){event.stopPropagation();}); 913 914 jQuery(window).on('click', function(event){ 915 if(!event.isTrigger && jQuery('html').hasClass('navmenu-open') && jQuery(event.originalEvent.target).closest('.navigationMainToggler').length != 1){ 916 closeNavigationMenu(); 917 } 918 }); 919 } 920 921 wUiTmp['hasAddEventToRestoreNavigationToggler'] = true; 922 } 923 jQuery(element).siblings('nav').find('ul li a, .navpointToggler').attr('tabindex', jQuery(element).attr('aria-expanded') !== "fal
923se" ? '0' : '-1'); 924 925}; 926 927//////////////////////////////////////////////////////////////// 928// 929// Beim Ãffnen von Unterpunkte per Klick, wie es z.B. in der mobilen Navigation der Fall ist 930// 931//////////////////////////////////////////////////////////////// 932 933navpointToggler_onclick = function(element, options = []){ 934 //console.log('navpointToggler_onclick(' + element + ')'); 935 936 var windowWidth = jQuery(window).width(); 937 var onToggle = jQuery(element).attr('data-ontoggle') ? jQuery(element).attr('data-ontoggle') : (options['ontoggle'] ? options['ontoggle'] : ''); 938 var animation = jQuery(element).next('ul').attr('data-animation') ? jQuery(element).next('ul').attr('data-animation') : (options['animation'] ? options['animation'] : 'height'); 939 940 if(options['status'] && options['status'] == 'open'){ 941 jQuery(element).addClass('open').attr('aria-expanded', true); 942 animation = options['animation'] !== undefined ? options['animation'] : 'open'; 943 } 944 else if(options['status'] && options['status'] == 'close'){ 945 jQuery(element).removeClass('open').attr('aria-expanded', false); 946 animation = options['animation'] !== undefined ? options['animation'] : 'close'; 947 } 948 else{ 949 jQuery(element).toggleClass('open').attr('aria-expanded', jQuery(element).attr('aria-expanded') == 'true' ? 'false' : 'true'); 950 } 951 952 if(onToggle.indexOf('|') != -1){ 953 var onToggles = onToggle.split('|'); 954 onToggle = onToggles[0]; 955 if(/(\w+)\(min(\d+)px\)/.test(onToggles[1]) && windowWidth >= parseInt(RegExp.$2)){ 956 onToggle = RegExp.$1; 957 } 958 } 959 960 if(animation.indexOf('|') != -1){ 961 var animations = animation.split('|'); 962 animation = animations[0]; 963 if(/(\w+)\(min(\d+)px\)/.test(animations[1]) && windowWidth >= parseInt(RegExp.$2)){ 964 animation = RegExp.$1; 965 } 966 } 967 var cEParent = jQuery(element).parent(); 968 var cEParentSiblings = cEParent.siblings(); 969 970 if(onToggle == 'toggleClassNavpoint'){ 971 cEParent.toggleClass('displaySub'); 972 } 973 else if(onToggle == 'toggleClassNavpointCloseSiblings'){ 974 cEParentSiblings.children('.navpointToggler').removeClass('open'); 975 cEParent.find('ul .navpointToggler').removeClass('open'); 976 cEParentSiblings.removeClass('displaySub').addClass('hideSub'); 977 cEParent.find('li').removeClass('displaySub').addClass('hideSub'); 978 cEParent.toggleClass('displaySub'); 979 } 980 else if(onToggle == 'showOnlyCurrent'){ 981 cEParentSiblings.children('.navpointToggler').removeClass('open'); 982 cEParentSiblings.removeClass('displaySub').addClass('hideSub'); 983 984 window.setTimeout(function(){ 985 cEParent.removeClass('hideSub').addClass('displaySub'); 986 }, 120); 987 } 988 else if(onToggle == 'closeSiblings'){ 989 cEParentSiblings.children('.navpointToggler').removeClass('open').removeClass('displaySub').addClass('hideSub'); 990 991 if(animation == 'display'){ 992 cEParentSiblings.children('ul').hide({'duration' : 0}); 993 } 994 else if(animation == 'fadeInOut'){ 995 cEParentSiblings.children('ul').fadeOut(); 996 } 997 else if(animation == 'toggle'){ 998 cEParentSiblings.children('ul').animate({animation : 'hide'}); 999 } 1000 else if(animation == 'toggleClass'){ 1001 cEParentSiblings.children('ul').animate({animation : 'hide'}); 1002 } 1003 else{ 1004 cEParentSiblings.children('ul').animate({height : 'hide'}); 1005 } 1006 1007 window.setTimeout(function(){ 1008 1009 if(animation == 'display'){ 1010 jQuery(element).next('ul').toggle({'duration' : 0}); 1011 } 1012 else if(animation == 'fadeInOut'){ 1013 jQuery(element).next('ul').fadeToggle(); 1014 } 1015 else if(animation == 'toggle'){ 1016 jQuery(element).next('ul').toggle(); 1017 } 1018 else if(animation == 'toggleClass'){ 1019 jQuery(element).next('ul').toggle(); 1020 window.setTimeout(function(){ 1021 jQuery(element).parent().toggleClass('displaySub'); 1022 }, 32); 1023 } 1024 else if(animation == 'open'){ 1025 jQuery(element).next('ul').stop(true,true).animate({height: 'show'}, 0); 1026 } 1027 else if(animation == 'close'){ 1028 jQuery(element).next('ul').stop(true,true).animate({height : 'hide'}, 0); 1029 } 1030 else{ 1031 jQuery(element).next('ul').animate({height : 'toggle'}); 1032 } 1033 }, animation == 'display' ? 0 : 120); 1034 } 1035 else if(onToggle == 'none'){ 1036 } 1037 else{ 1038 if(animation == 'open'){ 1039 jQuery(element).next('ul').stop(true,true).animate({height: 'show'}, 0); 1040 } 1041 else if(animation == 'close'){ 1042 jQuery(element).next('ul').stop(true,true).animate({height : 'hide'}, 0); 1043 } 1044 else{ 1045 jQuery(element).next('ul').animate({height : 'toggle'}); 1046 } 1047 } 1048}; 1049 1050//////////////////////////////////////////////////////////////// 1051// 1052// Beim Klick eines Navigationspunktes, um dabei z.B. die Menünavigation zu schlieÃen 1053// 1054//////////////////////////////////////////////////////////////// 1055 1056navpoint_onclick = function(element, level, event){ 1057 //console.log('navpoint_onclick '); 1058 1059 wUiTmp['currentNavpoint'] = element; 1060 var openMegaDropdownType = jQuery('html').data('megadropdownopentype') ? jQuery('html').data('megadropdownopentype')
1060: 'mouseenter'; 1061 1062 if(openMegaDropdownType == 'click' && !jQuery(element).attr('data-previewLink')){ 1063 closeMegaDropdown(); 1064 } 1065 1066 var navPoint = jQuery(element).parent(); 1067 1068 adjustNavlayer(navPoint); 1069 1070 var windowWidth = jQuery(window).width(); 1071 var preventedClick = false; 1072 var doNotClose = jQuery(element).attr('data-donotclose') == '1'; 1073 var preventCloseNavmenuIfHasChilds = jQuery(element).attr('data-preventclosenavmenuifhaschilds') == '1'; 1074 1075 jQuery(element).attr('data-donotclose', 0); 1076 1077 //Wurde für das A-Tag ein HREF # angegeben, so wird die GröÃenangabe ingoriert 1078 //wNavigationIgnoreHash = false; // globaler Schalter zum berücksichtigen über design.js 1079 var ignoreHash = (typeof wNavigationIgnoreHash == 'undefined' || !wNavigationIgnoreHash) ? true : false; 1080 var isHash = !ignoreHash && jQuery(element).attr('href') == '#'; 1081 var hasHash = jQuery(element).attr('href').indexOf('#') != -1; 1082 //Ausschalten der Prüfung auf 1. Ebene der Navigation. Macht Sinn in Verbindung mit ignoreHash 1083 //wNavigationIgnoreNavLevel = true; 1084 var ignoreNavLevel = (typeof wNavigationIgnoreNavLevel == 'undefined' || !wNavigationIgnoreNavLevel) ? false : true; 1085 1086 if(typeof wAddSelectedOnClickNavpoint != 'undefined' && wAddSelectedOnClickNavpoint){ 1087 navPoint.parent().find('.selected').removeClass('selected'); 1088 navPoint.addClass('selected'); 1089 } 1090 if(windowWidth >= maxSizeNavigationmenu || !ignoreHash){ 1091 if(jQuery(element).parent('.open, .openSelected, .openDescendantSelected').find('> ul, > div').length > 0){ 1092 1093 if(jQuery(element).siblings('div.submenu').length > 0){ 1094 //jQuery(element).parent('.open, .openSelected, .openDescendantSelected').find('> div').on('click', function(){ 1095 jQuery(element).siblings('div.submenu').addClass('tmp'); 1096 jQuery(element).parent().parent().find('> li > div.submenu.open:not(.tmp)').removeClass('open'); 1097 jQuery(element).siblings('div.submenu').toggleClass('open').removeClass('tmp'); 1098 //}); 1099 } 1100 if(event != undefined && event.type == 'touchstart'){ 1101 window['wglTouchStartedNavlayers'] = new Date().getTime(); 1102 if(jQuery(element).attr('data-has-already-touched') != '1'){ 1103 jQuery(element).attr('data-has-just-touched', '1'); 1104 window.setTimeout(function(){jQuery(element).attr('data-has-just-touched', '0');}, 300); 1105 1106 jQuery(element).parent().parent().find('> li > a').attr('data-has-already-touched', ''); 1107 jQuery(element).attr('data-has-already-touched', '1'); 1108 preventedClick = true; 1109 } 1110 } 1111 else{ 1112 //var navigationLayerOpenType = jQuery('html').data('navigationlayeropentype') ? jQuery('html').data('navigationlayeropentype') : 'mouseenter'; 1113 //Ergänzt durch Prüfung auf attr href des a-Tags 1114 if(navigationlayeropentype == 'click' && (jQuery(element).parent().parent().data('navlevel') == '1' || ignoreNavLevel) && (ignoreHash || isHash)){ 1115 event.preventDefault(); 1116 1117 jQuery(element).parent().siblings().removeClass('clicked'); 1118 if(!jQuery(element).parent().hasClass('clicked')){ 1119 jQuery(element).parent().addClass('clicked'); 1120 jQuery('html').addClass('navlayer-open'); 1121 } 1122 else{ 1123 jQuery(element).parent().removeClass('clicked') ; 1124 jQuery('html').removeClass('navlayer-open'); 1125 } 1126 1127 //Ergänzt Aufurf des navpointToggler_onclick wenn span-Tag als Sibling existiert 1128 //if(jQuery(element).siblings('span.navpointToggler').length == '1' && jQuery(element).siblings('span.navpointToggler').css('display') != 'none'){ 1129 //navpointToggler_onclick(jQuery(element).siblings('span.navpointToggler')); 1130 //} 1131 if(jQuery('body').data('hasAddCloserNavigationOnClick') != '1'){ 1132 jQuery('body').on('click', function(event){ 1133 if(event.originalEvent && event.target.parentNode.className.indexOf('clicked') == -1){ 1134 jQuery('nav li.clicked').removeClass('clicked'); 1135 jQuery('html').removeClass('navlayer-open'); 1136 } 1137 }); 1138 } 1139 jQuery('body').data('hasAddCloserNavigationOnClick', '1'); 1140 } 1141 else if(jQuery(element).attr('data-has-already-touched') == '1'){ 1142 if(jQuery(element).attr('data-has-just-touched') == '1'){ 1143 event.preventDefault(); 1144 return false;
1145 } 1146 } 1147 return false; 1148 } 1149 } 1150 } 1151 1152 if(!preventedClick && jQuery('html').hasClass('navmenu-open')){ 1153 if(event.type != 'touchstart'){ 1154 window.setTimeout(function(){ 1155 if(!doNotClose && !preventCloseNavmenuIfHasChilds){ 1156 closeNavigationMenu(); 1157 } 1158 }, 320); 1159 } 1160 } 1161}; 1162 1163//////////////////////////////////////////////////////////////// 1164// 1165// Beim Ãberfahren eines Navigationspunktes, um dabei z.B. Untermenüs auszurichten 1166// 1167//////////////////////////////////////////////////////////////// 1168 1169navpoint_onmouseenter = function(element, level){ 1170 //console.log('navpoint_onmouseenter(' + element + ', ' + level + ')'); 1171 1172 var navPoint = jQuery(element); 1173 var id = (navPoint.find('a').attr('id') || '').replace('navpoint_', ''); 1174 if(wUiTmp['openMegaDropdownid'] !== undefined && wUiTmp['openMegaDropdownid'] !== null && id != wUiTmp['openMegaDropdownid']){ 1175 closeMegaDropdown(wUiTmp['openMegaDropdownid'], false); 1176 } 1177 else if(navPoint.hasClass('hasMegaDropdown')) wUiTmp['donotcloseMegadropdown'] = true; 1178 1179 if(jQuery('html').data('megadropdownopentype') == 'click'){ 1180 return; 1181 } 1182 1183 adjustNavlayer(navPoint); 1184 1185 if(!jQuery('html').hasClass('navmenu-open')){ 1186 1187 var layersSub = navPoint.find('> ul'); 1188 // Falls Unterpunkte bestehen 1189 if(layersSub.length != 0 && level == 1){ 1190 jQuery('html').addClass('navlayer-open'); 1191 } 1192 } 1193 1194}; 1195 1196//////////////////////////////////////////////////////////////// 1197// 1198// Beim Ãberfahren eines Navigationspunktes, dabei z.B. Untermenüs auszurichten 1199// 1200//////////////////////////////////////////////////////////////// 1201 1202navpoint_onmouseleave = function(element, level, event){ 1203 //console.log('navpoint_onmouseleave(' + element + ', ' + level + ')'); 1204 1205 var closeMegaDropdownType = jQuery(this).closest('ul[data-type]').attr('data-type') ? jQuery(this).closest('ul[data-type]').attr('data-type') : (jQuery('html').data('megadropdownclosetype') ? jQuery('html').data('megadropdownclosetype') : 'mouseleave'); 1206 1207 if(closeMegaDropdownType == 'click'){ 1208 return; 1209 } 1210 1211 var navPoint = jQuery(element); 1212 var layersSub = navPoint.find('> ul'); 1213 var id = (navPoint.find('a').attr('id') || '').replace('navpoint_', ''); 1214 1215 if(level == 1){ 1216 jQuery('html').removeClass('navlayer-open'); 1217 } 1218 1219 if(closeMegaDropdownType == 'mouseleave'){ 1220 var delay = undefined; 1221 if(id === wUiTmp['openMegaDropdownid']){ 1222 wUiTmp['donotcloseMegadropdown'] = false; 1223 delay = 300; 1224 } 1225 if(navPoint.hasClass('hasMegaDropdown')){ 1226 closeMegaDropdown(id, false, delay); 1227 event.stopPropagation(); 1228 } 1229 } 1230 1231 if(typeof wNavpointOnMouseLeave == 'function'){ 1232 wNavpointOnMouseLeave(element, level); 1233 } 1234}; 1235 1236//////////////////////////////////////////////////////////////// 1237// 1238// Beim Ãndern der BildschirmgröÃe 1239// 1240//////////////////////////////////////////////////////////////// 1241 1242adaptSizeNavigation = function(){ 1243 1244 var windowWidth = jQuery(window).width(); 1245 1246 if(windowWidth >= maxSizeNavigationmenu){ 1247 jQuery('nav').find('li > ul[data-wrapifnavigationfull="1"]').wrap('<div class="submenu"></div>'); 1248 } 1249 else{ 1250 jQuery('nav').find('div > ul[data-wrapifnavigationfull="1"]').unwrap(); 1251 } 1252}; 1253 1254//////////////////////////////////////////////////////////////// 1255// 1256// Passt den Navigations-Layer an 1257// 1258//////////////////////////////////////////////////////////////// 1259 1260adjustNavlayer = function(navPoint){ 1261 1262 1263 var windowWidth = jQuery(window).width(); 1264 1265 if(windowWidth >= maxSizeNavigationmenu){ 1266 1267 var offsetRightParent = null; 1268 navPoint.find('ul[data-addisrightcol="1"] > li').each(function(){ 1269 offsetRightParent = offsetRightParent != null ? offsetRightParent : jQuery(this).parent().offset().left + jQuery(this).parent().width(); 1270 if(offsetRightParent - (jQuery(this).offset().left + jQuery(this).width()) < 32){ 1271 jQuery(this).attr('data-isrightcol', '1'); 1272 } 1273 else{ 1274 jQuery(this).removeAttr('data-isrightcol'); 1275 } 1276 }); 1277 1278 if(navPoint.closest('ul[data-adaptlayer="1"]').length != 0){ 1279 if(navPoint.find('> ul').length > 0){ 1280 1281 var limitNavigationArea = jQuery(window).width(); 1282 1283 if(navPoint.closest('.wglNavigationLayerLimitArea').length > 0){ 1284 limitNavigationArea = navPoint.closest('.wglNavigationLayerLimitArea').offset().left + navPoint.closest('.wglNavigationLayerLimitArea').width(); 1285 }
1286 var diffWidthLayer = limitNavigationArea - navPoint.find('ul').offset().left - navPoint.find('ul').outerWidth(); 1287 var diffWidthLayerSub = navPoint.find('ul').outerWidth(); 1288 1289 if(navPoint.parent().data('navlevel') == '1'){ 1290 1291 // Breite der Unterpunkte anpassen 1292 widthMain = Math.round(navPoint[0].getBoundingClientRect().width * 2) / 2; 1293 widthSub = navPoint.find('ul').width(); 1294 1295 if(widthSub <= widthMain){ 1296 navPoint.find('> ul').css({'width' : String(widthMain) + 'px'}); 1297 } 1298 1299 //if(jQuery(window).height() - navPoint.offset().top - navPoint.height() + jQuery(window).scrollTop() - navPoint.find('ul').height() < 20){ 1300 // navPoint.find('ul').css({'max-height' : String(jQuery(window).height() - navPoint.offset().top - navPoint.height() + jQuery(window).scrollTop() - 20) + 'px'}); 1301 //} 1302 1303 if(diffWidthLayer < 0){ 1304 navPoint.find('> ul').css({'margin-left' : diffWidthLayer}); 1305 navPoint.find('> ul').addClass('subleftside'); 1306 } 1307 else if(diffWidthLayer < diffWidthLayerSub){ 1308 navPoint.find('> ul').addClass('subleftside'); 1309 } 1310 else{ 1311 navPoint.find('> ul').addClass('subrightside'); 1312 } 1313 } 1314 else{ 1315 var hasSubLeftSide = navPoint.closest('ul').hasClass('subleftside') ; 1316 if(typeof(wTryToKeepDirectionOfNavlayers) != 'undefined' && wTryToKeepDirectionOfNavlayers && hasSubLeftSide){ 1317 var navPointCheckWidth = navPoint.find('> ul > li'); 1318 if(navPointCheckWidth.length == 0 || navPointCheckWidth.width() == 0){ 1319 navPointCheckWidth = navPoint; 1320 } 1321 var leftAfterOpen = parseInt(navPoint.offset().left - navPointCheckWidth.width() * 2); 1322 if(leftAfterOpen > 32){ 1323 navPoint.find('> ul').css({'margin-left' : diffWidthLayer}); 1324 navPoint.find('> ul').addClass('subleftside'); 1325 } 1326 else{ 1327 navPoint.find('> ul').addClass('subrightside'); 1328 } 1329 } 1330 else{ 1331 var leftAfterOpen = hasSubLeftSide ? parseInt(navPoint.offset().left + navPoint.width() * 1 - 4) : parseInt(navPoint.offset().left + navPoint.width() * 3 - 4); 1332 if(leftAfterOpen > parseInt(jQuery(window).width())){ 1333 navPoint.find('> ul').css({'margin-left' : diffWidthLayer}); 1334 navPoint.find('> ul').addClass('subleftside'); 1335 } 1336 else{ 1337 navPoint.find('> ul').addClass('subrightside'); 1338 } 1339 } 1340 var diffTop = navPoint.offset().top - jQuery(window).scrollTop(); 1341 1342 var diffBottom = jQuery(window).height() + jQuery(window).scrollTop() - navPoint.offset().top - navPoint.find('ul').height(); 1343 if(diffBottom < 20){ 1344 var diffMargin = (-diffBottom > diffTop ? -diffTop + 20: diffBottom - 20); 1345 navPoint.find('> ul').css({'margin-top' : String(diffMargin) + 'px'}); 1346 } 1347 } 1348 } 1349 } 1350 } 1351};
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.