{"version":3,"sources":["webpack:///./src/_js/main.js","webpack:///./src/_js/partials/HeaderUtil.js","webpack:///./src/_js/partials/ScrollTo.js","webpack:///./src/_js/partials/jquery-accessibleMegaMenu.js","webpack:///external \"jQuery\""],"names":[],"mappings":"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","file":"main.js","sourcesContent":["'use strict';\r\n/**\r\n * Some useful packages (you can install by using npm)\r\n * 1. webfontloader = async font loaders\r\n * 2. slick-carousel = Simple, easy, responsive carousel (buggy centerMode - variableWidth - lazyMode)\r\n * 3. jquery-match-height = Use this to match the height of elements. Either use this or Equalizer from Foundation\r\n * 4. dropkickjs = if you need custom dropdown\r\n *\r\n * IMPORTANT:\r\n * To import async-ly, you need to wrap your codes in require.ensure([], () => { });\r\n * It's best not to async plugins, to leverage browser cache\r\n * Ref: https://webpack.github.io/docs/code-splitting.html\r\n *\r\n * NOTES:\r\n * This boilerplate uses CDN/external for jQuery package. Configured in gulp/webpack.js.\r\n * This to prevent the needs of jQuery from node_modules\r\n */\r\n\r\n///////////////\r\n// Libraries //\r\n///////////////\r\n// import wf from 'webfontloader';\r\nimport ssm from 'simplestatemanager';\r\nimport mh from 'jquery-match-height';\r\nimport jsCookie from 'js-cookie';\r\nimport JSON5 from 'json5';\r\n\r\n////////////////////////\r\n// Components / Utils //\r\n////////////////////////\r\nimport ScrollTo from './partials/ScrollTo';\r\nimport HeaderUtil from './partials/HeaderUtil';\r\n\r\n//////////////////\r\n// Bootstrap JS //\r\n//////////////////\r\n// Tab\r\nrequire('bootstrap-sass/assets/javascripts/bootstrap/tab');\r\n// Collapse\r\nrequire('bootstrap-sass/assets/javascripts/bootstrap/collapse');\r\n// Dropdown\r\nrequire('bootstrap-sass/assets/javascripts/bootstrap/dropdown');\r\n// Transition\r\nrequire('bootstrap-sass/assets/javascripts/bootstrap/transition');\r\n\r\n\r\n/////////////\r\n// Plugins //\r\n/////////////\r\n\r\n// wf.load({\r\n// google: {\r\n// families: ['Open Sans:400,600,800:latin', 'Slabo 27px:400:latin']\r\n// }\r\n// });\r\n\r\n// Setting Webpack public path dynamically so that it loads the partials\r\n// from the folder where the main.js is located\r\nvar bundleSrc = $('[src*=\"/main.js\"]').attr(\"src\");\r\n__webpack_public_path__ = bundleSrc.substr(0, bundleSrc.lastIndexOf(\"/\") + 1);\r\n\r\n$(() => {\r\n\tconst IsIE10Below = $('.lt-ie10').length;\r\n\r\n\t//////////////////\r\n\t// Match Height //\r\n\t//////////////////\r\n\r\n\t/**\r\n\t * data-mh-group is different from data-mh data-mh can be used natively straight from matchHeight\r\n\t * data-mh-group (require data-mh-options if needed) should be used like data-mh-group='groupName' that will be used as a selector\r\n\t * data-mh-options will be used for the options of the match height\r\n\t */\r\n\r\n\tlet $jsMh = $('[data-mh-group]');\r\n\tif ($jsMh.length) {\r\n\t\tlet groupArray = [];\r\n\t\t$jsMh.each(function(i, el) {\r\n\t\t\tlet $el = $(el);\r\n\t\t\tlet mhOptions = $el.attr('data-mh-options');\r\n\t\t\tlet mhGroup = $el.attr('data-mh-group');\r\n\t\t\tlet jsMhOptions = {};\r\n\t\t\tif (mhGroup) {\r\n\t\t\t\tif (mhOptions) {\r\n\t\t\t\t\tjsMhOptions = JSON5.parse(mhOptions);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!(groupArray.filter(item => item.group == mhGroup)).length) {\r\n\t\t\t\t\tgroupArray.push({ group: mhGroup, options: jsMhOptions });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tgroupArray.forEach(function(obj) {\r\n\t\t\tlet proceed = 1;\r\n\r\n\t\t\t// if nonFlexBrowserOnly is enabled, check whether the browser is > ie9 or not\r\n\t\t\t// if it's <= ie9, proceed = 1\r\n\t\t\t// else proceed 0\r\n\t\t\tif(obj.options.nonFlexBrowserOnly && $('.lt-ie10').length == 0){\r\n\t\t\t\tproceed = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif(proceed){\r\n\t\t\t\t$(`[data-mh-group=\"${obj.group}\"]`).matchHeight(obj.options);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//////////////////\r\n\t// Font Resizer //\r\n\t//////////////////\r\n\tlet $jsFontResizer = $('[data-fontresizer]');\r\n\tif($jsFontResizer.length){\r\n\r\n\t\t$jsFontResizer.on('click', function(){\r\n\t\t\tlet $this = $(this);\r\n\t\t\tlet $target = $('html');\r\n\t\t\tlet isIncrease = ($this.attr('data-fontresizer')).toLowerCase() == 'l';\r\n\t\t\tlet newFontSize = parseFloat($target.css('font-size'), 10) * (isIncrease ? 1.2 : (1/1.2));\r\n\t\t\t$target.css('font-size', newFontSize);\r\n\t\t\t// save it to cookie\r\n\t\t\tjsCookie.set('fontsizecookie', newFontSize);\r\n\r\n\t\t\t$('[data-slickjs]').slick('setPosition');\r\n\t\t});\r\n\t}\r\n\r\n\t///////////////\r\n\t// Triggerer //\r\n\t///////////////\r\n\tlet $jsTriggerer = $('[data-triggerer]');\r\n\tif($jsTriggerer.length){\r\n\t\t$jsTriggerer.each(function(){\r\n\t\t\tlet $this = $(this);\r\n\t\t\tlet attr = $this.attr('data-triggerer');\r\n\t\t\tif(attr){\r\n\t\t\t\t// opts\r\n\t\t\t\t// opt.target = target (CSS string selector)\r\n\t\t\t\t// opt.sourceEvents = (str) default(click) - the events that trigger eventTriggers\r\n\t\t\t\t// opt.triggerEvents = (str) the events triggered on the target\r\n\t\t\t\tlet opt = JSON5.parse(attr);\r\n\r\n\t\t\t\t// if on enter\r\n\t\t\t\tlet isOnEnter = opt.sourceEvents == 'enter';\r\n\r\n\t\t\t\tif(isOnEnter){\r\n\t\t\t\t\topt.sourceEvents = 'keypress';\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$this.on(opt.sourceEvents, function(e){\r\n\t\t\t\t\tif(isOnEnter){\r\n\t\t\t\t\t\tif(e.which == 13){\r\n\t\t\t\t\t\t\tif($this.val() != ''){\r\n\t\t\t\t\t\t\t\t$(opt.target).trigger(opt.triggerEvents);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else{\r\n\t\t\t\t\t\t$(opt.target).trigger(opt.triggerEvents);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t///////////////////\r\n\t// Slick Sliders //\r\n\t///////////////////\r\n\tlet $jsSlick = $('[data-slickjs]');\r\n\tif ($jsSlick.length) {\r\n\t\trequire.ensure([], () => {\r\n\t\t\trequire('slick-carousel');\r\n\r\n\t\t\tconst accessiblePagingFn = function(slider, i) {\r\n\t\t\t\treturn $('');\r\n\t\t\t};\r\n\r\n\t\t\tconst jsSlickOptions = {\r\n\t\t\t\t'homeslider': {\r\n\t\t\t\t\tdots: true,\r\n\t\t\t\t\tinfinite: true,\r\n\t\t\t\t\tslidesToShow: 2,\r\n\t\t\t\t\tslidesToScroll: 2,\r\n\t\t\t\t\tprevArrow: '.c-homeslider__arrow--prev',\r\n\t\t\t\t\tnextArrow: '.c-homeslider__arrow--next',\r\n\t\t\t\t\tresponsive: [{\r\n\t\t\t\t\t\tbreakpoint: 992,\r\n\t\t\t\t\t\tsettings: {\r\n\t\t\t\t\t\t\tslidesToShow: 1,\r\n\t\t\t\t\t\t\tslidesToScroll: 1,\r\n\t\t\t\t\t\t\tappendDots: '.c-homeslider__dots'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}],\r\n\t\t\t\t\tonInit: function($slick, opt){\r\n\t\t\t\t\t\t$slick.find('[data-anime-count]').each(function(){\r\n\t\t\t\t\t\t\tconst animedata = $(this).data('anime');\r\n\t\t\t\t\t\t\tif(animedata) animedata.play();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcustomPaging: accessiblePagingFn\r\n\t\t\t\t},\r\n\t\t\t\t'headerslider': {\r\n\t\t\t\t\tautoplay: true,\r\n\t\t\t\t\tdots: true,\r\n\t\t\t\t\tinfinite: true,\r\n\t\t\t\t\tprevArrow: '.c-headerslider__arrow--prev',\r\n\t\t\t\t\tnextArrow: '.c-headerslider__arrow--next',\r\n\t\t\t\t\tappendDots: '.c-headerslider__dots',\r\n\t\t\t\t\tadaptiveHeight: true,\r\n\t\t\t\t\tonInit: function($slick, opt){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t$('.c-headerslider .c-headerslider__dots').prepend('
'); \r\n\t\t\t\t\t\t$('.slick-pause').bind(\"click\", function(e) {\r\n\t\t\t\t\t\t e.preventDefault();\r\n\t\t\t\t if ($(this).attr(\"class\") == \"slick-pause play\"){\r\n\t\t\t\t \t$(this).attr(\"class\", \"slick-pause pause\");\r\n\t\t\t\t \t\t$('[data-slickjs=\"headerslider\"]').slick('slickPause');\r\n\t\t\t\t }else{\r\n\t\t\t\t \t$(this).attr(\"class\", \"slick-pause play\");\r\n\t\t\t\t \t\t$('[data-slickjs=\"headerslider\"]').slick('slickPlay');\r\n\t\t\t\t \t}\r\n\t\t\t\t });\r\n\r\n\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcustomPaging: accessiblePagingFn\r\n\t\t\t\t\t\r\n\t\t\t\t},\r\n\t\t\t\t'contentslider': {\r\n\t\t\t\t\tdots: true,\r\n\t\t\t\t\tinfinite: true,\r\n\t\t\t\t\tcustomPaging: accessiblePagingFn\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t$jsSlick.each(function() {\r\n\t\t\t\tlet $el = $(this);\r\n\t\t\t\tlet key = $el.data('slickjs');\r\n\t\t\t\t$el\r\n\t\t\t\t\t.on('init', function(){\r\n\t\t\t\t\t\tif(jsSlickOptions[key] && (jsSlickOptions[key]).onInit){\r\n\t\t\t\t\t\t\t(jsSlickOptions[key]).onInit($(this), jsSlickOptions[key]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.slick(jsSlickOptions[key] || {});\r\n\t\t\t});\r\n\t\t}, 'sliders');\r\n\t}\r\n\r\n\t/////////////\r\n\t// FocusOn //\r\n\t/////////////\r\n\tlet $focusOn = $('[data-focuson]');\r\n\tif ($focusOn.length) {\r\n\t\trequire.ensure([], () => {\r\n\t\t\tconst FocusOn = require('./partials/FocusOn');\r\n\t\t\tnew FocusOn($focusOn);\r\n\t\t}, 'focuson');\r\n\t}\r\n\r\n\t////////////////////////\r\n\t// Counting Animation //\r\n\t////////////////////////\r\n\r\n\t/**\r\n\t * Usage: [data-anime-count=\"targetNumber\"]\r\n\t * targetNumber is the end value that will be animated\r\n\t */\r\n\r\n\tlet $jsCount = $('[data-anime-count], .js-animecount');\r\n\tif($jsCount.length && !IsIE10Below){\r\n\t\trequire.ensure([], function(){\r\n\t\t\tconst animecount = require('./partials/animecount');\r\n\t\t\tanimecount($jsCount);\r\n\t\t}, 'animecount');\r\n\t}\r\n\r\n\t//////////////////\r\n\t// Init Toggler //\r\n\t//////////////////\r\n\tlet $jsVtoggle = $('[data-vtoggle]');\r\n\t$jsVtoggle.each(function(){\r\n\t\tlet $this = $(this);\r\n\t\tlet { selfClass, class:cls, target, event:ev, hasTransition, transitionProperty, removeClass } = JSON5.parse($this.attr('data-vtoggle'));\r\n\r\n\t\t$this.on(ev || 'click', function() {\r\n\t\t\tlet $this = $(this);\r\n\r\n\t\t\tif(cls){\r\n\t\t\t\tlet $target = $(target)\r\n\t\t\t\t\t.toggleClass(cls)\r\n\t\t\t\t\t.addClass(`${cls}-is-loading`);\r\n\r\n\t\t\t\t\tif(removeClass){\r\n\t\t\t\t\t\t$target.removeClass(removeClass);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(hasTransition){\r\n\t\t\t\t\t\t$target.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(e){\r\n\t\t\t\t\t\t\tif(transitionProperty == e.originalEvent.propertyName){\r\n\t\t\t\t\t\t\t\tlet $this = $(this);\r\n\t\t\t\t\t\t\t\t$this.removeClass(`${cls}-is-loading`);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(selfClass){\r\n\t\t\t\t$this.toggleClass(selfClass);\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n\r\n\t////////////////\r\n\t// Scroll To //\r\n\t////////////////\r\n\tlet $scrollTo = $('[data-scrollto]');\r\n\tif ($scrollTo.length) {\r\n\t\tnew ScrollTo($scrollTo);\r\n\t}\r\n\r\n\t////////////\r\n\t// Sticky //\r\n\t////////////\r\n\tlet $stickies = $('[data-sticky]');\r\n\tconst stickyPromise = new Promise( resolve => {\r\n\t\tif($stickies.length){\r\n\t\t\trequire.ensure([], function(){\r\n\t\t\t\tconst Sticky = require('./partials/Sticky');\r\n\t\t\t\t$stickies.each(function(){\r\n\t\t\t\t\tlet $this = $(this);\r\n\t\t\t\t\t$this.data('sticky-object', new Sticky($this));\r\n\t\t\t\t});\r\n\t\t\t\tresolve();\r\n\t\t\t}, 'sticky');\r\n\t\t}\r\n\t});\r\n\tconst setStickyWidthBasedOnScreen = (isReset) => {\r\n\t\tstickyPromise.then(function(){\r\n\t\t\tconsole.info('sticky resolve');\r\n\t\t\t$stickies.each(function(){\r\n\t\t\t\tlet $this = $(this);\r\n\t\t\t\tlet obj = $this.data('sticky-object');\r\n\t\t\t\tobj.setWidth(isReset);\r\n\t\t\t});\r\n\t\t});\r\n\t};\r\n\r\n\t///////////////\r\n\t// ScrollSpy //\r\n\t///////////////\r\n\tlet $scrollSpies = $('[data-scrollspy]');\r\n\tconst scrollSpyPromise = new Promise ( resolve => {\r\n\t\tif($scrollSpies.length){\r\n\t\t\trequire.ensure([], function(){\r\n\t\t\t\tconst ScrollSpy = require('./partials/ScrollSpy');\r\n\t\t\t\t$scrollSpies.each(function(){\r\n\t\t\t\t\tlet $this = new ScrollSpy($(this));\r\n\t\t\t\t});\r\n\t\t\t\tresolve();\r\n\t\t\t}, 'scrollspy');\r\n\t\t}\r\n\t});\r\n\r\n\t//////////////////////\r\n\t// Bootstrap Select //\r\n\t//////////////////////\r\n\tconst $jsSelect = $('.js-select');\r\n\tlet bsSelectPromise = new Promise(resolve => {\r\n\t\tif ($jsSelect.length) {\r\n\t\t\trequire.ensure([], () => {\r\n\t\t\t\trequire('bootstrap-select');\r\n\r\n\t\t\t\tlet initSelect = ($el) => {\r\n\t\t\t\t\t$el\r\n\t\t\t\t\t.off('rendered.bs.select').on('rendered.bs.select', function(e){\r\n\t\t\t\t\t\t$(this).addClass('is-rendered');\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.selectpicker({\r\n\t\t\t\t\t\tdropupAuto: false,\r\n\t\t\t\t\t\tmobile: true\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\r\n\t\t\t\tinitSelect($jsSelect);\r\n\t\t\t\tresolve(initSelect);\r\n\r\n\t\t\t}, 'bootstrap-select');\r\n\t\t} else {\r\n\t\t\tresolve();\r\n\t\t}\r\n\t});\r\n\r\n\t///////////////////\r\n\t// Images Loaded //\r\n\t///////////////////\r\n\tconst $imagesLoaded = $('[data-imagesloaded]');\r\n\tif($imagesLoaded.length){\r\n\t\trequire.ensure([], function(){\r\n\t\t\trequire('imagesloaded');\r\n\r\n\t\t\tconst options = {\r\n\t\t\t\t\"home\": {\r\n\t\t\t\t\tbackground: true,\r\n\t\t\t\t\tcallback: function(obj){\r\n\t\t\t\t\t\t$(obj.elements).each(function(){\r\n\t\t\t\t\t\t\t$(this).addClass('is-images-loaded');\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t$imagesLoaded.each(function(){\r\n\t\t\t\tlet $this = $(this);\r\n\t\t\t\tlet key = $(this).attr('data-imagesloaded');\r\n\t\t\t\t$this.imagesLoaded(options[key] || {}, options[key] ? (options[key]).callback : null);\r\n\t\t\t});\r\n\t\t}, 'imagesloaded');\r\n\t}\r\n\r\n\t//////////////\r\n\t// Fit Text //\r\n\t//////////////\r\n\tconst $fitTexts = $('[data-fittext]');\r\n\tif($fitTexts.length){\r\n\t\trequire.ensure([], function(){\r\n\t\t\trequire('./partials/jquery.fittext');\r\n\t\t\t// options\r\n\t\t\t// compressor: (default 1)\r\n\t\t\t// min: minFontSize (int or string(px)) (default Number.NEGATIVE_INFINITY,)\r\n\t\t\t// max: maxFontSize (int or string(px)) (default Number.POSITIVE_INFINITY)\r\n\r\n\t\t\t$fitTexts.each(function(){\r\n\t\t\t\tconst $this = $(this);\r\n\t\t\t\tconst attr = $this.attr('data-fittext');\r\n\t\t\t\tlet opts = {};\r\n\t\t\t\topts.compressor = opts.compressor || 1;\r\n\t\t\t\topts.min = opts.min || Number.NEGATIVE_INFINITY;\r\n\t\t\t\topts.max = opts.max || Number.POSITIVE_INFINITY;\r\n\t\t\t\tif(attr){\r\n\t\t\t\t\topts = JSON5.parse(attr);\r\n\t\t\t\t}\r\n\t\t\t\t$this.fitText(opts.compressor, { minFontSize: opts.min, maxFontSize: opts.max });\r\n\t\t\t});\r\n\t\t}, 'fittext');\r\n\t}\r\n\r\n\t//////////\r\n\t// Misc //\r\n\t//////////\r\n\tHeaderUtil.initClearSearch();\r\n\tHeaderUtil.initSearchButtonClick();\r\n\r\n\t////////////////////////////////////////////////\r\n\t// Save / load font size changes from cookies //\r\n\t////////////////////////////////////////////////\r\n\tlet fontsizecookie = jsCookie.get('fontsizecookie');\r\n\tif(fontsizecookie){\r\n\t\t$('html').css('font-size', parseFloat(fontsizecookie));\r\n\t}\r\n\r\n\t///////////////////////////////////////////////////////////////\r\n\t// Disable glossary links that have no reference on the page //\r\n\t///////////////////////////////////////////////////////////////\r\n\t$('.o-sideglossaryindex__col').each(function(){\r\n\t\tlet $this = $(this);\r\n\t\tlet $link = $this.find('[href^=\"#glossary-\"]');\r\n\t\tlet alphabetTargetId = $link.attr('href');\r\n\r\n\t\tif(!$(alphabetTargetId).length){\r\n\t\t\t$link.addClass('o-sideglossaryindex__anchor is-disabled');\r\n\t\t}\r\n\t});\r\n\r\n\t/////////\r\n\t// SSM //\r\n\t/////////\r\n\tssm.addStates([{\r\n\t\tid: 'xs',\r\n\t\tquery: '(max-width: 767px)',\r\n\t\tonEnter: () => {\r\n\t\t\tconsole.info('enter <=767px');\r\n\t\t\tHeaderUtil.initCloseOffCanvas();\r\n\t\t},\r\n\t\tonLeave: () => {\r\n\t\t},\r\n\t}, {\r\n\t\tid: 'sm',\r\n\t\tquery: '(max-width: 991px)',\r\n\t\tonEnter: () => {\r\n\t\t\tconsole.info('enter <=991px');\r\n\t\t\tsetStickyWidthBasedOnScreen(true);\r\n\t\t\tHeaderUtil.initCloseOffCanvas();\r\n\t\t},\r\n\t\tonLeave: () => {\r\n\t\t\tconsole.info('leave <=991px');\r\n\t\t}\r\n\t}, {\r\n\t\tid: 'md',\r\n\t\tquery: '(max-width: 1199px)',\r\n\t\tonEnter: () => {\r\n\t\t\tconsole.info('enter <=1199px');\r\n\t\t\tsetStickyWidthBasedOnScreen();\r\n\t\t},\r\n\t\tonLeave: () => {\r\n\t\t\tconsole.info('leave <= 1199px');\r\n\t\t\tsetStickyWidthBasedOnScreen();\r\n\t\t}\r\n\t}, {\r\n\t\tid: 'desktop',\r\n\t\tquery: '(min-width: 992px)',\r\n\t\tonEnter: () => {\r\n\t\t\tconsole.info('enter >= 992px');\r\n\t\t\tHeaderUtil.initMegamenu();\r\n\t\t\tsetStickyWidthBasedOnScreen();\r\n\t\t},\r\n\t\tonLeave: () => {\r\n\t\t}\r\n\t} ]);\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/_js/main.js","'use strict';\r\nimport './jquery-accessibleMegaMenu';\r\nimport JSON5 from 'json5';\r\nexport default class HeaderUtil {\r\n\r\n static initMegamenu() {\r\n \tconst options = {\r\n \t\t\"mainnav\": {\r\n \t\t\t/* prefix for generated unique id attributes, which are required\r\n to indicate aria-owns, aria-controls and aria-labelledby */\r\n uuidPrefix: \"mainnav-megamenu\",\r\n\r\n /* css class used to define the megamenu styling */\r\n menuClass: \"c-header__mainnav-menu\",\r\n\r\n /* css class for a top-level navigation item in the megamenu */\r\n topNavItemClass: \"c-header__mainnav-item\",\r\n\r\n /* css class for a megamenu panel */\r\n panelClass: \"c-header__mainnav-subnav\",\r\n\r\n /* css class for a group of items within a megamenu panel */\r\n panelGroupClass: \"c-header__mainnav-subnavpanel\",\r\n\r\n /* css class for the hover state */\r\n hoverClass: \"is-hover\",\r\n\r\n /* css class for the focus state */\r\n focusClass: \"is-focus\",\r\n\r\n /* css class for the open state */\r\n openClass: \"is-open\",\r\n\r\n // hover intent\r\n openDelay: 250\r\n \t\t}\r\n \t};\r\n\r\n $('[data-megamenu]').each(function() {\r\n \tlet $this = $(this);\r\n let opt = options[$this.attr('data-megamenu')];\r\n if(opt){\r\n $this.accessibleMegaMenu(opt);\r\n }\r\n });\r\n\r\n console.info('HeaderUtil: initMegamenu');\r\n }\r\n\r\n static initCloseOffCanvas(){\r\n $('.js-closeoffcanvas').off('click').click(function(){\r\n let $wrapper = $('.js-content-wrapper');\r\n if($wrapper.hasClass('is-menu-active')){\r\n $('.js-mobilemenutoggle').trigger('click');\r\n } else if ($wrapper.hasClass('is-search-active')){\r\n $('.js-mobilesearchtoggle').trigger('click');\r\n }\r\n });\r\n }\r\n\r\n static initClearSearch(){\r\n // data-clearsearch=\"[target]\"\r\n $('[data-clearsearch]').off('click').click(function(){\r\n $($(this).data('clearsearch')).val('');\r\n });\r\n }\r\n\r\n static initSearchButtonClick(){\r\n \t$('.js-mainsearchbtn').click(function(){\r\n\t\t\tconst val = $(this).siblings('.js-inputsearch').val();\r\n\t\t\tif(val != ''){\r\n\t\t\t\tdocument.location.href = '/search?term=' + val;\r\n\t\t\t}\r\n \t});\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/_js/partials/HeaderUtil.js","import JSON5 from 'json5';\r\nrequire('jquery.scrollto');\r\n\r\nexport default class ScrollTo{\r\n\tconstructor($el){\r\n let selector = $el.selector;\r\n\r\n const options = {\r\n \tsideglossary:{\r\n \t\tonAfter: function(){\r\n \t\t\t\t$('.o-sideglossaryindex__row').removeClass('is-indicator-disabled');\r\n \t\t}\r\n \t}\r\n }\r\n\r\n let callback = (e) => {\r\n \te.stopPropagation();\r\n let $this = $(e.currentTarget);\r\n if($this.data('scrollto')){\r\n e.preventDefault();\r\n var opt = JSON5.parse($this.data('scrollto'));\r\n\r\n if(opt.key){\r\n \topt.settings = $.extend(true, opt.settings, options[opt.key]);\r\n\r\n \tif(opt.key == 'sideglossary' && $(opt.target).length){\r\n \t\t$('.o-sideglossaryindex__row').addClass('is-indicator-disabled');\r\n \t}\r\n }\r\n\r\n if(opt.delay){\r\n setTimeout(function(){\r\n $.scrollTo(opt.target, opt.duration || 800, opt.settings);\r\n }, opt.delay || 0);\r\n }\r\n $.scrollTo(opt.target, opt.duration || 800, opt.settings);\r\n $(opt.target).focus();\r\n }\r\n };\r\n\r\n if(selector){\r\n $(document).on('click touchstart', selector, callback);\r\n } else{\r\n $el.on('click touchstart', callback);\r\n }\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/_js/partials/ScrollTo.js","/**\r\n * Modified by Vic\r\n *\r\n * Fixed the touchscreen devices\r\n * 1. If the menu has a sub navigation, the menu needs a .has-sub class\r\n * 2. So when there's no subnav, it will directly go to the link\r\n * 3. If there's a subnav, clicking once, will open the subnav. Clickin on the parent menu again, will go to the link\r\n */\r\n\r\n\r\n/*\r\nCopyright © 2013 Adobe Systems Incorporated.\r\n\r\nLicensed under the Apache License, Version 2.0 (the “License”);\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\nhttp://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an “AS IS” BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n*/\r\n\r\n/**\r\n * See http://jquery.com.\r\n * @name jquery\r\n * @class\r\n * See the jQuery Library (http://jquery.com) for full details. This just\r\n * documents the function and classes that are added to jQuery by this plug-in.\r\n */\r\n\r\n/**\r\n * See http://jquery.com\r\n * @name fn\r\n * @class\r\n * See the jQuery Library (http://jquery.com) for full details. This just\r\n * documents the function and classes that are added to jQuery by this plug-in.\r\n * @memberOf jquery\r\n */\r\n\r\n/**\r\n * @fileOverview accessibleMegaMenu plugin\r\n *\r\n *Licensed under the Apache License, Version 2.0 (the “License”)\r\n *
Copyright © 2013 Adobe Systems Incorporated.\r\n *
Project page https://github.com/adobe-accessibility/Accessible-Mega-Menu\r\n * @version 0.1\r\n * @author Michael Jordan\r\n * @requires jquery\r\n */\r\n\r\n/*jslint browser: true, devel: true, plusplus: true, nomen: true */\r\n/*global jQuery */\r\n(function ($, window, document) {\r\n \"use strict\";\r\n var pluginName = \"accessibleMegaMenu\",\r\n defaults = {\r\n uuidPrefix: \"accessible-megamenu\", // unique ID's are required to indicate aria-owns, aria-controls and aria-labelledby\r\n menuClass: \"accessible-megamenu\", // default css class used to define the megamenu styling\r\n topNavItemClass: \"accessible-megamenu-top-nav-item\", // default css class for a top-level navigation item in the megamenu\r\n panelClass: \"accessible-megamenu-panel\", // default css class for a megamenu panel\r\n panelGroupClass: \"accessible-megamenu-panel-group\", // default css class for a group of items within a megamenu panel\r\n hoverClass: \"hover\", // default css class for the hover state\r\n focusClass: \"focus\", // default css class for the focus state\r\n openClass: \"open\", // default css class for the open state\r\n openDelay: 0 // default open delay when opening menu via mouseover\r\n },\r\n Keyboard = {\r\n BACKSPACE: 8,\r\n COMMA: 188,\r\n DELETE: 46,\r\n DOWN: 40,\r\n END: 35,\r\n ENTER: 13,\r\n ESCAPE: 27,\r\n HOME: 36,\r\n LEFT: 37,\r\n PAGE_DOWN: 34,\r\n PAGE_UP: 33,\r\n PERIOD: 190,\r\n RIGHT: 39,\r\n SPACE: 32,\r\n TAB: 9,\r\n UP: 38,\r\n keyMap: {\r\n 48: \"0\",\r\n 49: \"1\",\r\n 50: \"2\",\r\n 51: \"3\",\r\n 52: \"4\",\r\n 53: \"5\",\r\n 54: \"6\",\r\n 55: \"7\",\r\n 56: \"8\",\r\n 57: \"9\",\r\n 59: \";\",\r\n 65: \"a\",\r\n 66: \"b\",\r\n 67: \"c\",\r\n 68: \"d\",\r\n 69: \"e\",\r\n 70: \"f\",\r\n 71: \"g\",\r\n 72: \"h\",\r\n 73: \"i\",\r\n 74: \"j\",\r\n 75: \"k\",\r\n 76: \"l\",\r\n 77: \"m\",\r\n 78: \"n\",\r\n 79: \"o\",\r\n 80: \"p\",\r\n 81: \"q\",\r\n 82: \"r\",\r\n 83: \"s\",\r\n 84: \"t\",\r\n 85: \"u\",\r\n 86: \"v\",\r\n 87: \"w\",\r\n 88: \"x\",\r\n 89: \"y\",\r\n 90: \"z\",\r\n 96: \"0\",\r\n 97: \"1\",\r\n 98: \"2\",\r\n 99: \"3\",\r\n 100: \"4\",\r\n 101: \"5\",\r\n 102: \"6\",\r\n 103: \"7\",\r\n 104: \"8\",\r\n 105: \"9\",\r\n 190: \".\"\r\n }\r\n };\r\n /**\r\n * @desc Creates a new accessible mega menu instance.\r\n * @param {jquery} element\r\n * @param {object} [options] Mega Menu options\r\n * @param {string} [options.uuidPrefix=accessible-megamenu] - Prefix for generated unique id attributes, which are required to indicate aria-owns, aria-controls and aria-labelledby\r\n * @param {string} [options.menuClass=accessible-megamenu] - CSS class used to define the megamenu styling\r\n * @param {string} [options.topNavItemClass=accessible-megamenu-top-nav-item] - CSS class for a top-level navigation item in the megamenu\r\n * @param {string} [options.panelClass=accessible-megamenu-panel] - CSS class for a megamenu panel\r\n * @param {string} [options.panelGroupClass=accessible-megamenu-panel-group] - CSS class for a group of items within a megamenu panel\r\n * @param {string} [options.hoverClass=hover] - CSS class for the hover state\r\n * @param {string} [options.focusClass=focus] - CSS class for the focus state\r\n * @param {string} [options.openClass=open] - CSS class for the open state\r\n * @constructor\r\n */\r\n function AccessibleMegaMenu(element, options) {\r\n this.element = element;\r\n\r\n // merge optional settings and defaults into settings\r\n this.settings = $.extend({}, defaults, options);\r\n\r\n this._defaults = defaults;\r\n this._name = pluginName;\r\n\r\n this.mouseTimeoutID = null;\r\n this.focusTimeoutID = null;\r\n this.mouseFocused = false;\r\n this.justFocused = false;\r\n\r\n this.init();\r\n }\r\n\r\n AccessibleMegaMenu.prototype = (function () {\r\n\r\n /* private attributes and methods ------------------------ */\r\n var uuid = 0,\r\n keydownTimeoutDuration = 1000,\r\n keydownSearchString = \"\",\r\n isTouch = typeof window.hasOwnProperty === \"function\" && !!window.hasOwnProperty(\"ontouchstart\"),\r\n _getPlugin,\r\n _addUniqueId,\r\n _togglePanel,\r\n _clickHandler,\r\n _clickOutsideHandler,\r\n _DOMAttrModifiedHandler,\r\n _focusInHandler,\r\n _focusOutHandler,\r\n _keyDownHandler,\r\n _mouseDownHandler,\r\n _mouseOverHandler,\r\n _mouseOutHandler,\r\n _toggleExpandedEventHandlers;\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_getPlugin\r\n * @desc Returns the parent accessibleMegaMenu instance for a given element\r\n * @param {jQuery} element\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _getPlugin = function (element) {\r\n return $(element).closest(':data(plugin_' + pluginName + ')').data(\"plugin_\" + pluginName);\r\n };\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_addUniqueId\r\n * @desc Adds a unique id and element.\r\n * The id string starts with the\r\n * string defined in settings.uuidPrefix.\r\n * @param {jQuery} element\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _addUniqueId = function (element) {\r\n element = $(element);\r\n var settings = this.settings;\r\n if (!element.attr(\"id\")) {\r\n element.attr(\"id\", settings.uuidPrefix + \"-\" + new Date().getTime() + \"-\" + (++uuid));\r\n }\r\n };\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_togglePanel\r\n * @desc Toggle the display of mega menu panels in response to an event.\r\n * The optional boolean value 'hide' forces all panels to hide.\r\n * @param {event} event\r\n * @param {Boolean} [hide] Hide all mega menu panels when true\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _togglePanel = function (event, hide) {\r\n var target = $(event.target),\r\n that = this,\r\n settings = this.settings,\r\n menu = this.menu,\r\n topli = target.closest('.' + settings.topNavItemClass),\r\n panel = target.hasClass(settings.panelClass) ? target : target.closest('.' + settings.panelClass),\r\n newfocus;\r\n\r\n _toggleExpandedEventHandlers.call(this, true);\r\n\r\n if (hide) {\r\n topli = menu.find('.' + settings.topNavItemClass + ' .' + settings.openClass + ':first').closest('.' + settings.topNavItemClass);\r\n if (!(topli.is(event.relatedTarget) || topli.has(event.relatedTarget).length > 0)) {\r\n if ((event.type === 'mouseout' || event.type === 'focusout') && topli.has(document.activeElement).length > 0) {\r\n return;\r\n }\r\n topli.find('[aria-expanded]')\r\n .attr('aria-expanded', 'false')\r\n .removeClass(settings.openClass)\r\n .filter('.' + settings.panelClass)\r\n .attr('aria-hidden', 'true');\r\n if ((event.type === 'keydown' && event.keyCode === Keyboard.ESCAPE) || event.type === 'DOMAttrModified') {\r\n newfocus = topli.find(':tabbable:first');\r\n setTimeout(function () {\r\n menu.find('[aria-expanded].' + that.settings.panelClass).off('DOMAttrModified.accessible-megamenu');\r\n newfocus.focus();\r\n that.justFocused = false;\r\n }, 99);\r\n }\r\n } else if (topli.length === 0) {\r\n menu.find('[aria-expanded=true]')\r\n .attr('aria-expanded', 'false')\r\n .removeClass(settings.openClass)\r\n .filter('.' + settings.panelClass)\r\n .attr('aria-hidden', 'true');\r\n }\r\n } else {\r\n clearTimeout(that.focusTimeoutID);\r\n topli.siblings()\r\n .find('[aria-expanded]')\r\n .attr('aria-expanded', 'false')\r\n .removeClass(settings.openClass)\r\n .filter('.' + settings.panelClass)\r\n .attr('aria-hidden', 'true');\r\n topli.find('[aria-expanded]')\r\n .attr('aria-expanded', 'true')\r\n .addClass(settings.openClass)\r\n .filter('.' + settings.panelClass)\r\n .attr('aria-hidden', 'false');\r\n if (event.type === 'mouseover' && target.is(':tabbable') && topli.length === 1 && panel.length === 0 && menu.has(document.activeElement).length > 0) {\r\n target.focus();\r\n that.justFocused = false;\r\n }\r\n\r\n _toggleExpandedEventHandlers.call(that);\r\n }\r\n };\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_clickHandler\r\n * @desc Handle click event on mega menu item\r\n * @param {event} Event object\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _clickHandler = function (event) {\r\n var target = $(event.target).closest(':tabbable'),\r\n topli = target.closest('.' + this.settings.topNavItemClass),\r\n panel = target.closest('.' + this.settings.panelClass);\r\n\r\n if (topli.length === 1\r\n && panel.length === 0\r\n && topli.find('.' + this.settings.panelClass).length === 1) {\r\n if (!target.hasClass(this.settings.openClass)) {\r\n if(target.closest('.has-sub').length){\r\n\t event.preventDefault();\r\n \t event.stopPropagation();\r\n \t\t_togglePanel.call(this, event);\r\n \t this.justFocused = false;\r\n }\r\n } else {\r\n if (this.justFocused) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.justFocused = false;\r\n } else if (isTouch) {\r\n // event.preventDefault();\r\n // event.stopPropagation();\r\n // _togglePanel.call(this, event, target.hasClass(this.settings.openClass));\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_clickOutsideHandler\r\n * @desc Handle click event outside of a the megamenu\r\n * @param {event} Event object\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _clickOutsideHandler = function (event) {\r\n if ($(event.target).closest(this.menu).length === 0) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n _togglePanel.call(this, event, true);\r\n }\r\n };\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_DOMAttrModifiedHandler\r\n * @desc Handle DOMAttrModified event on panel to respond to Windows 8 Narrator ExpandCollapse pattern\r\n * @param {event} Event object\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _DOMAttrModifiedHandler = function (event) {\r\n if (event.originalEvent.attrName === 'aria-expanded'\r\n && event.originalEvent.newValue === 'false'\r\n && $(event.target).hasClass(this.settings.openClass)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n _togglePanel.call(this, event, true);\r\n }\r\n };\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_focusInHandler\r\n * @desc Handle focusin event on mega menu item.\r\n * @param {event} Event object\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _focusInHandler = function (event) {\r\n clearTimeout(this.focusTimeoutID);\r\n var target = $(event.target),\r\n panel = target.closest('.' + this.settings.panelClass);\r\n target\r\n .addClass(this.settings.focusClass)\r\n .on('click.accessible-megamenu', $.proxy(_clickHandler, this));\r\n this.justFocused = !this.mouseFocused;\r\n this.mouseFocused = false;\r\n if (this.panels.not(panel).filter('.' + this.settings.openClass).length) {\r\n _togglePanel.call(this, event);\r\n }\r\n };\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_focusOutHandler\r\n * @desc Handle focusout event on mega menu item.\r\n * @param {event} Event object\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _focusOutHandler = function (event) {\r\n this.justFocused = false;\r\n var that = this,\r\n target = $(event.target),\r\n topli = target.closest('.' + this.settings.topNavItemClass),\r\n keepOpen = false;\r\n target\r\n .removeClass(this.settings.focusClass)\r\n .off('click.accessible-megamenu');\r\n\r\n if (window.cvox) {\r\n // If ChromeVox is running...\r\n that.focusTimeoutID = setTimeout(function () {\r\n window.cvox.Api.getCurrentNode(function (node) {\r\n if (topli.has(node).length) {\r\n // and the current node being voiced is in\r\n // the mega menu, clearTimeout,\r\n // so the panel stays open.\r\n clearTimeout(that.focusTimeoutID);\r\n } else {\r\n that.focusTimeoutID = setTimeout(function (scope, event, hide) {\r\n _togglePanel.call(scope, event, hide);\r\n }, 275, that, event, true);\r\n }\r\n });\r\n }, 25);\r\n } else {\r\n that.focusTimeoutID = setTimeout(function () {\r\n _togglePanel.call(that, event, true);\r\n }, 300);\r\n }\r\n };\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_keyDownHandler\r\n * @desc Handle keydown event on mega menu.\r\n * @param {event} Event object\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _keyDownHandler = function (event) {\r\n var that = (this.constructor === AccessibleMegaMenu) ? this : _getPlugin(this), // determine the AccessibleMegaMenu plugin instance\r\n settings = that.settings,\r\n target = $($(this).is('.' + settings.hoverClass + ':tabbable') ? this : event.target), // if the element is hovered the target is this, otherwise, its the focused element\r\n menu = that.menu,\r\n topnavitems = that.topnavitems,\r\n topli = target.closest('.' + settings.topNavItemClass),\r\n tabbables = menu.find(':tabbable'),\r\n panel = target.hasClass(settings.panelClass) ? target : target.closest('.' + settings.panelClass),\r\n panelGroups = panel.find('.' + settings.panelGroupClass),\r\n currentPanelGroup = target.closest('.' + settings.panelGroupClass),\r\n next,\r\n keycode = event.keyCode || event.which,\r\n start,\r\n i,\r\n o,\r\n label,\r\n found = false,\r\n newString = Keyboard.keyMap[event.keyCode] || '',\r\n regex,\r\n isTopNavItem = (topli.length === 1 && panel.length === 0);\r\n\r\n if (target.is(\"input:focus, select:focus, textarea:focus, button:focus\")) {\r\n // if the event target is a form element we should handle keydown normally\r\n return;\r\n }\r\n\r\n if (target.is('.' + settings.hoverClass + ':tabbable')) {\r\n $('html').off('keydown.accessible-megamenu');\r\n }\r\n\r\n switch (keycode) {\r\n case Keyboard.ESCAPE:\r\n _togglePanel.call(that, event, true);\r\n break;\r\n case Keyboard.DOWN:\r\n event.preventDefault();\r\n if (isTopNavItem) {\r\n _togglePanel.call(that, event);\r\n found = (topli.find('.' + settings.panelClass + ' :tabbable:first').focus().length === 1);\r\n } else {\r\n found = (tabbables.filter(':gt(' + tabbables.index(target) + '):first').focus().length === 1);\r\n }\r\n\r\n if (!found && window.opera && opera.toString() === \"[object Opera]\" && (event.ctrlKey || event.metaKey)) {\r\n tabbables = $(':tabbable');\r\n i = tabbables.index(target);\r\n found = ($(':tabbable:gt(' + $(':tabbable').index(target) + '):first').focus().length === 1);\r\n }\r\n break;\r\n case Keyboard.UP:\r\n event.preventDefault();\r\n if (isTopNavItem && target.hasClass(settings.openClass)) {\r\n _togglePanel.call(that, event, true);\r\n next = topnavitems.filter(':lt(' + topnavitems.index(topli) + '):last');\r\n if (next.children('.' + settings.panelClass).length) {\r\n found = (next.children()\r\n .attr('aria-expanded', 'true')\r\n .addClass(settings.openClass)\r\n .filter('.' + settings.panelClass)\r\n .attr('aria-hidden', 'false')\r\n .find(':tabbable:last')\r\n .focus() === 1);\r\n }\r\n } else if (!isTopNavItem) {\r\n found = (tabbables.filter(':lt(' + tabbables.index(target) + '):last').focus().length === 1);\r\n }\r\n\r\n if (!found && window.opera && opera.toString() === \"[object Opera]\" && (event.ctrlKey || event.metaKey)) {\r\n tabbables = $(':tabbable');\r\n i = tabbables.index(target);\r\n found = ($(':tabbable:lt(' + $(':tabbable').index(target) + '):first').focus().length === 1);\r\n }\r\n break;\r\n case Keyboard.RIGHT:\r\n event.preventDefault();\r\n if (isTopNavItem) {\r\n found = (topnavitems.filter(':gt(' + topnavitems.index(topli) + '):first').find(':tabbable:first').focus().length === 1);\r\n } else {\r\n if (panelGroups.length && currentPanelGroup.length) {\r\n // if the current panel contains panel groups, and we are able to focus the first tabbable element of the next panel group\r\n found = (panelGroups.filter(':gt(' + panelGroups.index(currentPanelGroup) + '):first').find(':tabbable:first').focus().length === 1);\r\n }\r\n\r\n if (!found) {\r\n found = (topli.find(':tabbable:first').focus().length === 1);\r\n }\r\n }\r\n break;\r\n case Keyboard.LEFT:\r\n event.preventDefault();\r\n if (isTopNavItem) {\r\n found = (topnavitems.filter(':lt(' + topnavitems.index(topli) + '):last').find(':tabbable:first').focus().length === 1);\r\n } else {\r\n if (panelGroups.length && currentPanelGroup.length) {\r\n // if the current panel contains panel groups, and we are able to focus the first tabbable element of the previous panel group\r\n found = (panelGroups.filter(':lt(' + panelGroups.index(currentPanelGroup) + '):last').find(':tabbable:first').focus().length === 1);\r\n }\r\n\r\n if (!found) {\r\n found = (topli.find(':tabbable:first').focus().length === 1);\r\n }\r\n }\r\n break;\r\n case Keyboard.TAB:\r\n i = tabbables.index(target);\r\n if (event.shiftKey && isTopNavItem && target.hasClass(settings.openClass)) {\r\n _togglePanel.call(that, event, true);\r\n next = topnavitems.filter(':lt(' + topnavitems.index(topli) + '):last');\r\n if (next.children('.' + settings.panelClass).length) {\r\n found = next.children()\r\n .attr('aria-expanded', 'true')\r\n .addClass(settings.openClass)\r\n .filter('.' + settings.panelClass)\r\n .attr('aria-hidden', 'false')\r\n .find(':tabbable:last')\r\n .focus();\r\n }\r\n } else if (event.shiftKey && i > 0) {\r\n found = (tabbables.filter(':lt(' + i + '):last').focus().length === 1);\r\n } else if (!event.shiftKey && i < tabbables.length - 1) {\r\n found = (tabbables.filter(':gt(' + i + '):first').focus().length === 1);\r\n } else if (window.opera && opera.toString() === \"[object Opera]\") {\r\n tabbables = $(':tabbable');\r\n i = tabbables.index(target);\r\n if (event.shiftKey) {\r\n found = ($(':tabbable:lt(' + $(':tabbable').index(target) + '):last').focus().length === 1);\r\n } else {\r\n found = ($(':tabbable:gt(' + $(':tabbable').index(target) + '):first').focus().length === 1);\r\n }\r\n }\r\n\r\n if (found) {\r\n event.preventDefault();\r\n }\r\n break;\r\n case Keyboard.SPACE:\r\n if (isTopNavItem) {\r\n event.preventDefault();\r\n _clickHandler.call(that, event);\r\n } else {\r\n return true;\r\n }\r\n break;\r\n case Keyboard.ENTER:\r\n return true;\r\n break;\r\n default:\r\n // alphanumeric filter\r\n clearTimeout(this.keydownTimeoutID);\r\n\r\n keydownSearchString += newString !== keydownSearchString ? newString : '';\r\n\r\n if (keydownSearchString.length === 0) {\r\n return;\r\n }\r\n\r\n this.keydownTimeoutID = setTimeout(function () {\r\n keydownSearchString = '';\r\n }, keydownTimeoutDuration);\r\n\r\n if (isTopNavItem && !target.hasClass(settings.openClass)) {\r\n tabbables = tabbables.filter(':not(.' + settings.panelClass + ' :tabbable)');\r\n } else {\r\n tabbables = topli.find(':tabbable');\r\n }\r\n\r\n if (event.shiftKey) {\r\n tabbables = $(tabbables.get()\r\n .reverse());\r\n }\r\n\r\n for (i = 0; i < tabbables.length; i++) {\r\n o = tabbables.eq(i);\r\n if (o.is(target)) {\r\n start = (keydownSearchString.length === 1) ? i + 1 : i;\r\n break;\r\n }\r\n }\r\n\r\n regex = new RegExp('^' + keydownSearchString.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&'), 'i');\r\n\r\n for (i = start; i < tabbables.length; i++) {\r\n o = tabbables.eq(i);\r\n label = $.trim(o.text());\r\n if (regex.test(label)) {\r\n found = true;\r\n o.focus();\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n for (i = 0; i < start; i++) {\r\n o = tabbables.eq(i);\r\n label = $.trim(o.text());\r\n if (regex.test(label)) {\r\n o.focus();\r\n break;\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n that.justFocused = false;\r\n };\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_mouseDownHandler\r\n * @desc Handle mousedown event on mega menu.\r\n * @param {event} Event object\r\n * @memberof accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _mouseDownHandler = function (event) {\r\n if ($(event.target).is(this.settings.panelClass) || $(event.target).closest(\":focusable\").length) {\r\n this.mouseFocused = true;\r\n }\r\n clearTimeout(this.mouseTimeoutID);\r\n this.mouseTimeoutID = setTimeout(function () {\r\n clearTimeout(this.focusTimeoutID);\r\n }, 1);\r\n };\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_mouseOverHandler\r\n * @desc Handle mouseover event on mega menu.\r\n * @param {event} Event object\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _mouseOverHandler = function (event) {\r\n clearTimeout(this.mouseTimeoutID);\r\n var that = this;\r\n this.mouseTimeoutID = setTimeout(function () {\r\n $(event.target).addClass(that.settings.hoverClass);\r\n _togglePanel.call(that, event);\r\n if ($(event.target).is(':tabbable')) {\r\n $('html').on('keydown.accessible-megamenu', $.proxy(_keyDownHandler, event.target));\r\n }\r\n }, this.settings.openDelay);\r\n };\r\n\r\n /**\r\n * @name jQuery.fn.accessibleMegaMenu~_mouseOutHandler\r\n * @desc Handle mouseout event on mega menu.\r\n * @param {event} Event object\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @inner\r\n * @private\r\n */\r\n _mouseOutHandler = function (event) {\r\n clearTimeout(this.mouseTimeoutID);\r\n var that = this;\r\n $(event.target)\r\n .removeClass(that.settings.hoverClass);\r\n\r\n that.mouseTimeoutID = setTimeout(function () {\r\n _togglePanel.call(that, event, true);\r\n }, 250);\r\n if ($(event.target).is(':tabbable')) {\r\n $('html').off('keydown.accessible-megamenu');\r\n }\r\n };\r\n\r\n _toggleExpandedEventHandlers = function (hide) {\r\n var menu = this.menu;\r\n if (hide) {\r\n $('html').off('mouseup.outside-accessible-megamenu, touchend.outside-accessible-megamenu, mspointerup.outside-accessible-megamenu, pointerup.outside-accessible-megamenu');\r\n\r\n menu.find('[aria-expanded].' + this.settings.panelClass).off('DOMAttrModified.accessible-megamenu');\r\n } else {\r\n $('html').on('mouseup.outside-accessible-megamenu, touchend.outside-accessible-megamenu, mspointerup.outside-accessible-megamenu, pointerup.outside-accessible-megamenu', $.proxy(_clickOutsideHandler, this));\r\n\r\n /* Narrator in Windows 8 automatically toggles the aria-expanded property on double tap or click.\r\n To respond to the change to collapse the panel, we must add a listener for a DOMAttrModified event. */\r\n menu.find('[aria-expanded=true].' + this.settings.panelClass).on('DOMAttrModified.accessible-megamenu', $.proxy(_DOMAttrModifiedHandler, this));\r\n }\r\n };\r\n\r\n /* public attributes and methods ------------------------- */\r\n return {\r\n constructor: AccessibleMegaMenu,\r\n\r\n /**\r\n * @lends jQuery.fn.accessibleMegaMenu\r\n * @desc Initializes an instance of the accessibleMegaMenu plugins\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @instance\r\n */\r\n init: function () {\r\n var settings = this.settings,\r\n nav = $(this.element),\r\n menu = nav.children().first(),\r\n topnavitems = menu.children();\r\n this.start(settings, nav, menu, topnavitems);\r\n },\r\n\r\n start: function(settings, nav, menu, topnavitems) {\r\n var that = this;\r\n this.settings = settings;\r\n this.menu = menu;\r\n this.topnavitems = topnavitems;\r\n\r\n nav.attr(\"role\", \"navigation\");\r\n menu.addClass(settings.menuClass);\r\n topnavitems.each(function (i, topnavitem) {\r\n var topnavitemlink, topnavitempanel;\r\n topnavitem = $(topnavitem);\r\n topnavitem.addClass(settings.topNavItemClass);\r\n topnavitemlink = topnavitem.find(\":tabbable:first\");\r\n topnavitempanel = topnavitem.children(\":not(:tabbable):last\");\r\n _addUniqueId.call(that, topnavitemlink);\r\n if (topnavitempanel.length) {\r\n _addUniqueId.call(that, topnavitempanel);\r\n topnavitemlink.attr({\r\n // \"aria-haspopup\": true,\r\n \"aria-controls\": topnavitempanel.attr(\"id\"),\r\n \"aria-expanded\": false\r\n });\r\n\r\n topnavitempanel.attr({\r\n \"role\": \"region\",\r\n \"aria-expanded\": false,\r\n \"aria-hidden\": true\r\n })\r\n .addClass(settings.panelClass)\r\n .not(\"[aria-labelledby]\")\r\n .attr(\"aria-labelledby\", topnavitemlink.attr(\"id\"));\r\n }\r\n });\r\n\r\n this.panels = menu.find(\".\" + settings.panelClass);\r\n\r\n menu.on(\"focusin.accessible-megamenu\", \":focusable, .\" + settings.panelClass, $.proxy(_focusInHandler, this))\r\n .on(\"focusout.accessible-megamenu\", \":focusable, .\" + settings.panelClass, $.proxy(_focusOutHandler, this))\r\n .on(\"keydown.accessible-megamenu\", $.proxy(_keyDownHandler, this))\r\n .on(\"mouseover.accessible-megamenu\", $.proxy(_mouseOverHandler, this))\r\n .on(\"mouseout.accessible-megamenu\", $.proxy(_mouseOutHandler, this))\r\n .on(\"mousedown.accessible-megamenu\", $.proxy(_mouseDownHandler, this));\r\n\r\n if (isTouch) {\r\n menu.on(\"touchstart.accessible-megamenu\", $.proxy(_clickHandler, this));\r\n }\r\n\r\n menu.find(\"hr\").attr(\"role\", \"separator\");\r\n\r\n if ($(document.activeElement).closest(menu).length) {\r\n $(document.activeElement).trigger(\"focusin.accessible-megamenu\");\r\n }\r\n },\r\n\r\n /**\r\n * @desc Get default values\r\n * @example $(selector).accessibleMegaMenu(\"getDefaults\");\r\n * @return {object}\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @instance\r\n */\r\n getDefaults: function () {\r\n return this._defaults;\r\n },\r\n\r\n /**\r\n * @desc Get any option set to plugin using its name (as string)\r\n * @example $(selector).accessibleMegaMenu(\"getOption\", some_option);\r\n * @param {string} opt\r\n * @return {string}\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @instance\r\n */\r\n getOption: function (opt) {\r\n return this.settings[opt];\r\n },\r\n\r\n /**\r\n * @desc Get all options\r\n * @example $(selector).accessibleMegaMenu(\"getAllOptions\");\r\n * @return {object}\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @instance\r\n */\r\n getAllOptions: function () {\r\n return this.settings;\r\n },\r\n\r\n /**\r\n * @desc Set option\r\n * @example $(selector).accessibleMegaMenu(\"setOption\", \"option_name\", \"option_value\", reinitialize);\r\n * @param {string} opt - Option name\r\n * @param {string} val - Option value\r\n * @param {boolean} [reinitialize] - boolean to re-initialize the menu.\r\n * @memberof jQuery.fn.accessibleMegaMenu\r\n * @instance\r\n */\r\n setOption: function (opt, value, reinitialize) {\r\n this.settings[opt] = value;\r\n if (reinitialize) {\r\n this.init();\r\n }\r\n }\r\n };\r\n }());\r\n\r\n /* lightweight plugin wrapper around the constructor,\r\n to prevent against multiple instantiations */\r\n\r\n /**\r\n * @class accessibleMegaMenu\r\n * @memberOf jQuery.fn\r\n * @classdesc Implements an accessible mega menu as a jQuery plugin.\r\n *
The mega-menu It is modeled after the mega menu on {@link http://adobe.com|adobe.com} but has been simplified for use by others. A brief description of the interaction design choices can be found in a blog post at {@link http://blogs.adobe.com/accessibility/2013/05/adobe-com.html|Mega menu accessibility on adobe.com}.
\r\n *The accessible mega menu supports keyboard interaction modeled after the behavior described in the {@link http://www.w3.org/TR/wai-aria-practices/#menu|WAI-ARIA Menu or Menu bar (widget) design pattern}, however we also try to respect users' general expectations for the behavior of links in a global navigation. To this end, the accessible mega menu implementation permits tab focus on each of the six top-level menu items. When one of the menu items has focus, pressing the Enter key, Spacebar or Down arrow will open the submenu panel, and pressing the Left or Right arrow key will shift focus to the adjacent menu item. Links within the submenu panels are included in the tab order when the panel is open. They can also be navigated with the arrow keys or by typing the first character in the link name, which speeds up keyboard navigation considerably. Pressing the Escape key closes the submenu and restores focus to the parent menu item.
\r\n *The accessible mega menu models its use of WAI-ARIA Roles, States, and Properties after those described in the {@link http://www.w3.org/TR/wai-aria-practices/#menu|WAI-ARIA Menu or Menu bar (widget) design pattern} with some notable exceptions, so that it behaves better with screen reader user expectations for global navigation. We don't use role=\"menu\"
for the menu container and role=\"menuitem\"
for each of the links therein, because if we do, assistive technology will no longer interpret the links as links, but instead, as menu items, and the links in our global navigation will no longer show up when a screen reader user executes a shortcut command to bring up a list of links in the page.