{"version":3,"sources":["script-gvl.js","philanthropies/gvl/includes/animate.js","philanthropies/gvl/form.js","philanthropies/gvl/dropdown.js","philanthropies/gvl/menu-bar.js"],"names":["animate","yCoordinates","len","easeFunction","length","progress","p","Math","round","animateHeight","el","settingsObj","opts","start","interrupt","stop","render","s","Object","assign","end","fadeIn","duration","units","ease","style","height","addClass","animation","delta","step","finish","removeClass","removeProperty","Date","window","requestAnimationFrame","getNaturalHeight","wrapper","wrap","document","createElement","appendChild","firstChild","wrapInner","offsetHeight","parent","parentNode","insertBefore","removeChild","unwrap","dropdowns","helpers","doc","dropdownButtons","getElementsByClassName","openClass","i","addEventListener","e","toggleDropdown","preventDefault","button","target","parentElement","panel","visible","hasClass","drops","closeAllDropdowns","hidePanelOnClickOutside","acc","this","classList","toggle","nextElementSibling","maxHeight","scrollHeight","open","querySelector","onclick","transform","forms","togglePasswordButtons","showPasswordClass","togglePassword","inputId","getAttribute","input","getElementById","innterHTML","setAttribute","menuBar","siteMenu","menuItems","menuButton","clickEventString","menuItemClass","menuOpenClass","panelOpenClass","submenuOpenClass","initializeMenu","body","id","innerHTML","toggleMenuButton","toggleMenuItem","className","timer","resizestart","resizestop","onresize","clearTimeout","setTimeout","menuItem","findAncestor","closeAllPanels","outsideClickListener","t","contains","removeClickListener","removeEventListener","hideSubPanelOnClickOutside","panelPos","offsetLeft","panelWidth","offsetWidth","menuPos","menuBarWidth","rightClass","menuOverflows","setPanelPosition","panels","readyState","attachEvent","secondaryMenuBar","innerAcc","innerPanel","setClasses","setClass","els","fnName","siteSearch","searchLabel","searchInput","searchForm","searchOpenClass","toggleSearch","focus","table","scrollRightClass","scrollLeftClass","addWrapper","updateTableDisplay","tableWrap","tableWidth","wrapWidth","scrollLeft","canScrollLeft","canScrollRight","hasScrollRightClass","hasScrollLeftClass","tables","getElementsByTagName","setInterval","event","appealcodes","getQueryParameters","url","paramString","split","params","paramList","name","val","buildQueryParameters","obj","query","keys","key","replaceObjValue","newObj","replace","hasOwnProperty","replaceQuery","href","addParametersToURLs","links","replaceValues","link","internal","substr","match","hrefParams","newHref","location","lazyload","max","documentElement","clientWidth","innerWidth","clientHeight","innerHeight","showImages","forEach","call","querySelectorAll","img","onload","removeAttribute","splitTesting","localStorageSupported","expired","urlParams","force","localData","currentData","expireDate","Storage","isValid","jsonData","localStorage","getItem","JSON","parse","localStorageIsValid","showVariation","Boolean","floor","random","dataObj","variation","expires","test","setItem","stringify","setLocalStorage","bodyClass","cid","removeItem","navigator","serviceWorker","then","registrations"],"mappings":"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","file":"script-gvl.min.js","sourcesContent":["// gvl directory\r\n\r\n//=require static/src/static/js/philanthropies/gvl/includes/animate.js\r\n//=require static/src/static/js/philanthropies/gvl/dropdown.js\r\n//=require static/src/static/js/philanthropies/gvl/form.js\r\n//=require static/src/static/js/philanthropies/gvl/menu-bar.js\r\n//=require static/src/static/js/philanthropies/gvl/mobile-nav.js\r\n//=require static/src/static/js/philanthropies/gvl/search.js\r\n//=require static/src/static/js/philanthropies/gvl/table.js\r\n\r\n// include-gvl directory\r\n//=require static/src/static/js/philanthropies/include-gvl/appeal-codes.js\r\n//=require static/src/static/js/philanthropies/include-gvl/lazyload.js\r\n//=require static/src/static/js/philanthropies/include-gvl/splittesting.js\r\n//=require static/src/static/js/philanthropies/include-gvl/z-register-service-worker.js","/************/\r\n/*! Animate */\r\n\r\nvar animate = (function (){\r\n\r\n\tvar easeFunction = cubicBezierDefined();\r\n\r\n\t// Animation\r\n\r\n\t/*\r\n\t *\tFunc: animateHeight\r\n\t *\tDesc: Animate the height of an item\r\n\t *\tArgs: @el - HTML Element - The HTML element to animate\r\n\t *\t\t @settingsObj - Object - Contains properties to override default settings\r\n\t */\r\n\tfunction animateHeight( el, settingsObj ) {\r\n\r\n\t\t// Set defaults and overwrite with passed object (settingsObj)\r\n\t\tvar s = Object.assign( {\r\n\t\t\t\tstart: 0,\r\n\t\t\t\tend: 100,\r\n\t\t\t\tfadeIn: true,\r\n\t\t\t\tduration: 200,\r\n\t\t\t\tunits: \"px\",\r\n\t\t\t}, settingsObj );\r\n\r\n\t\tvar ease = easeFunction;\r\n\r\n\t\tel.style.height = s.start + s.units;\r\n\t\taddClass(el, \"animating\");\r\n\r\n\t\t// Animate height at input rate\r\n\t\tel.animation = animate({\r\n\t\t\tduration: s.duration,\r\n\t\t\tdelta: ease,\r\n\t\t\tstep: function( delta ) {\r\n\t\t\t\tel.style.height = s.start + ( (s.end - s.start) * delta ) + s.units;\r\n\t\t\t},\r\n\t\t\tfinish: function(){\r\n\t\t\t\tremoveClass(el, 'animating');\r\n\t\t\t\tel.style.removeProperty(\"height\");\r\n\t\t\t\tif( typeof s.finish == \"function\" ) { s.finish(); }\r\n\t\t\t},\r\n\t\t\tinterrupt: function(){\r\n\t\t\t\tremoveClass(el, 'animating');\r\n\t\t\t\tel.style.removeProperty(\"height\");\r\n\t\t\t\tif( typeof s.interrupt == \"function\" ) { s.interrupt(); }\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t} // animateHeight\r\n\r\n\r\n\t/*\r\n\t *\tFunc: animate\r\n\t *\tDesc: Animate function\r\n\t * Src: http://javascript.info/tutorial/animation (main animation functions)\r\n\t *\t\t http://creativejs.com/resources/requestanimationframe/ (requestAnimationFrame)\r\n\t *\tArgs: @opts - Object - The options object\r\n\t *\t\t contains: @duration - Number - Milliseconds for total animation\r\n\t *\t\t\t\t\t@delta - Function - Easing function \r\n\t *\t\t\t\t\t@step - Function - Result function (what should happen on screen each frame)\r\n\t *\t\t\t\t\t@finish - Function - optional- End function (what happens when animation finishes)\r\n\t *\t\t\t\t\t@interrupt - Function - optional- End function (what happens if animation is interrupted)\r\n\t */\r\n\tfunction animate( opts ) {\r\n\t\r\n\t\tvar start = new Date(); // Get the start time\r\n\t\tvar interrupt = false; // If this is true, animation will stop\r\n\t\tvar stop = function(){ interrupt = true; }; // Stops this animation\r\n\r\n\t\t// The render function\r\n\t\tvar render = function() {\r\n\t\t\tvar timePassed = new Date() - start; // The amount of time elapsed since start\r\n\t\t\tvar progress = timePassed / opts.duration; // Percentage of time passed in full expected duration\r\n\r\n\t\t\tif ( progress > 1 ) { progress = 1; } // Cap percentage at 1 (100%)\r\n\t\t\t\r\n\t\t\tvar delta = opts.delta( progress ); // Apply easing function\r\n\t\t\topts.step( delta ); // Apply the step fuction from the options object (renders a change on screen)\r\n\t\t\t\r\n\t\t\t// Interrupt, continue, or finish depending on progress\r\n\t\t\tif( interrupt && opts.interrupt ) {\r\n\t\t\t\topts.interrupt();\r\n\t\t\t}\r\n\t\t\telse if ( progress < 1 ) {\r\n\t\t\t\twindow.requestAnimationFrame( render );\r\n\t\t\t} else if ( opts.finish ) {\r\n\t\t\t\topts.finish();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Start the animation\r\n\t\twindow.requestAnimationFrame( render );\r\n\r\n\t\treturn {stop: stop};\r\n\r\n\t} // animate\r\n\r\n\r\n\t/*\r\n\t *\tFunc: easeInOut\r\n\t *\tDesc: Easing function\r\n\t *\tArgs: @power - Positive Integer - Math power that specifies easing curve (default 3)\r\n\t */\r\n\tfunction easeInOut( power ) { \r\n\t\tpower = power ? power : 3;\r\n\t\tvar delta = function( progress ) {\r\n\t\t\treturn Math.pow(progress, power);\r\n\t\t}\r\n\r\n\t\treturn function( progress ) {\r\n\t\t\tif (progress < .5)\r\n\t\t\t\treturn delta( 2 * progress) / 2\r\n\t\t\telse\r\n\t\t\t\treturn (2 - delta( 2 * (1 - progress) )) / 2\r\n\t\t}\r\n\t} // easeInOut\r\n\r\n\r\n\t/*\r\n\t *\tFunc: cubicBezierDefined\r\n\t *\tDesc: Easing function based on CSS easing: cubic-bezier(0.3, 0, 0.3, 1).\r\n\t\t\t\tyCoordinates generated by running a cubic bezier function (returning X and Y coordinates based on time)\r\n\t \t\t\tand outputting the Y values associated with the X values that fall closest to each hundredth (.01, .02, ...).\r\n\t\t\t\tThis allows a quick lookup based on animation progress. Progress (%) * array length is the index of the Y value.\r\n\t *\tArgs: none\r\n\t */\r\n\tfunction cubicBezierDefined(){\r\n\t\tvar yCoordinates = [0,0.00006,0.00024,0.00054,0.00097,0.00153,0.00221,0.00303,0.00398,0.00506,0.00629,0.00765,0.00916,0.01081,0.0126,0.01455,0.01664,0.01889,0.0213,0.02386,0.02658,0.02946,0.0325,0.03571,0.03908,0.04262,0.04632,0.05019,0.05423,0.05844,0.06283,0.06738,0.0721,0.07699,0.08206,0.0873,0.0927,0.09827,0.104,0.1099,0.11597,0.12219,0.12857,0.1351,0.14179,0.14861,0.15559,0.16271,0.16995,0.17734,0.18484,0.19247,0.20021,0.20805,0.216,0.22405,0.23219,0.24041,0.24871,0.25708,0.26552,0.27401,0.28256,0.29114,0.29978,0.30844,0.31712,0.32583,0.33455,0.34328,0.352,0.36073,0.36945,0.37815,0.38682,0.39548,0.40411,0.41269,0.42126,0.42977,0.43824,0.44666,0.45502,0.46334,0.4716,0.4798,0.48793,0.496,0.50399,0.51192,0.51978,0.52757,0.53528,0.54293,0.55049,0.55796,0.56538,0.5727,0.57996,0.58713,0.59421,0.60122,0.60815,0.615,0.62175,0.62844,0.63504,0.64157,0.648,0.65437,0.66064,0.66684,0.67296,0.679,0.68496,0.69084,0.69665,0.70238,0.70803,0.7136,0.71911,0.72452,0.72988,0.73515,0.74036,0.74549,0.75054,0.75554,0.76045,0.7653,0.77007,0.77479,0.77942,0.784,0.78851,0.79295,0.79733,0.80163,0.80589,0.81007,0.81419,0.81825,0.82225,0.82619,0.83007,0.83388,0.83765,0.84135,0.845,0.84858,0.85211,0.85559,0.85902,0.86239,0.8657,0.86895,0.87217,0.87532,0.87842,0.88149,0.88448,0.88743,0.89034,0.89319,0.896,0.89876,0.90147,0.90414,0.90675,0.90933,0.91185,0.91434,0.91678,0.91917,0.92152,0.92383,0.92609,0.92831,0.93049,0.93264,0.93473,0.9368,0.93881,0.94079,0.94273,0.94463,0.9465,0.94832,0.95011,0.95186,0.95357,0.95525,0.95689,0.95849,0.96006,0.9616,0.96309,0.96455,0.96599,0.96738,0.96874,0.97007,0.97136,0.97263,0.97386,0.97506,0.97623,0.97736,0.97847,0.97954,0.98058,0.98159,0.98258,0.98353,0.98445,0.98535,0.98621,0.98705,0.98786,0.98864,0.98939,0.99011,0.99081,0.99147,0.99212,0.99273,0.99332,0.99388,0.99442,0.99493,0.99541,0.99587,0.9963,0.99671,0.99709,0.99745,0.99779,0.9981,0.99838,0.99865,0.99888,0.9991,0.99929,0.99946,0.9996,0.99972,0.99982,0.9999,0.99996,0.99999,1];\r\n\t\tvar len = yCoordinates.length - 1;\r\n\r\n\t\t// Return the easeing function, which returns an eased value (0–1) based on the progress (0–1, i.e 0%-100%)\r\n\t\treturn function( progress ) {\r\n\t\t\tvar p = Math.round( progress * len );\r\n\t\t\treturn yCoordinates[p];\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/*\r\n\t *\tFunc: getNaturalHeight\r\n\t *\tDesc: Get the height of an element on the page (before visibly rendering it on the page)\r\n\t *\tArgs: @el - HTML Element - The element to measure\r\n\t */\r\n\tfunction getNaturalHeight( el ) {\r\n\t\tvar wrapper, testDiv, height;\r\n\r\n\t\twrapper = wrapInner(el, \"div\");\r\n\t\theight = wrapper.offsetHeight;\r\n\r\n\t\tunwrap(wrapper);\r\n\r\n\t\treturn height;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\t/*\r\n\t *\tFunc: wrapInner\r\n\t *\tDesc: Wrap the contents of an element in a new HTML element\r\n\t *\tArgs: @el - HTMLElement - The element whose contents should be wrapped\r\n\t *\t\t @wrapper - String - The type of HTML element that should wrap the contents\r\n\t */\r\n\tfunction wrapInner( el, wrapper ) {\r\n\t\tvar wrap = document.createElement(wrapper);\r\n\r\n\t\t// Append a wrapper node\r\n\t\tel.appendChild(wrap);\r\n\r\n\t\t// Move all children into the wrapper element\r\n\t\twhile (el.firstChild && el.firstChild !== wrap) wrap.appendChild(el.firstChild);\r\n\r\n\t\treturn wrap;\r\n\t}\r\n\r\n\t/*\r\n\t *\tFunc: unwrap\r\n\t *\tDesc: Unwrap the parent element of the specified DOM element\r\n\t * Src: https://plainjs.com/javascript/manipulation/unwrap-a-dom-element-35/\r\n\t *\tArgs: @el - HTMLElement - The element to destroy\r\n\t */\r\n\tfunction unwrap( el ) {\r\n\t\t// get the element's parent node\r\n\t\tvar parent = el.parentNode;\r\n\r\n\t\t// move all children out of the wrapper element\r\n\t\twhile (el.firstChild) parent.insertBefore(el.firstChild, el);\r\n\r\n\t\t// remove the empty element\r\n\t\tparent.removeChild(el);\r\n\t}\r\n\r\n\r\n\r\n\treturn {\r\n\t\tanimateHeight: animateHeight,\r\n\t\tgetNaturalHeight: getNaturalHeight\r\n\t}\r\n\r\n\r\n})();\r\n","/*************/\r\n/*! Forms */\r\n\r\nvar forms = (function(){\r\n\r\n // Properties\r\n\r\n var doc = document;\r\n var togglePasswordButtons = doc.getElementsByClassName('toggle-password');\r\n var showPasswordClass = 'show-password'; // Define strings once so they don't need to be repeated in minified script\r\n\r\n\r\n // Initialization\r\n\r\n for ( var i = 0; i < togglePasswordButtons.length; i++ ) {\r\n var item = togglePasswordButtons[i];\r\n item.addEventListener(\"click\", function(e) { togglePassword(e); });\r\n }\r\n\r\n\r\n\r\n // Functions\r\n\r\n\r\n /*\r\n * Func: togglePassword\r\n * Desc: Toggle visibility of a password in a password field\r\n * Args: @e - Event Object - Click event object from password toggle button\r\n */\r\n function togglePassword( e ) {\r\n e.preventDefault();\r\n\r\n var button = e.target;\r\n var inputId = button.getAttribute('data-for');\r\n var input = doc.getElementById( inputId );\r\n var visible = input.getAttribute('type') == \"text\";\r\n\r\n if ( !visible ) {\r\n addClass( button, showPasswordClass );\r\n button.innterHTML = \"Hide password\";\r\n\r\n input.setAttribute( 'type', 'text' ); \r\n }\r\n else {\r\n removeClass( button, showPasswordClass );\r\n button.innterHTML = \"Show password\";\r\n\r\n input.setAttribute( 'type', 'password' );\r\n }\r\n\r\n\r\n } // togglePassword\r\n\r\n\r\n\r\n\r\n\r\n // Return public properties and methods\r\n\r\n return {\r\n\r\n };\r\n\r\n})();","/*************/\r\n/*! Dropdown */\r\n\r\nvar dropdowns = (function(){\r\n\r\n // Config\r\n\r\n var closeAllOnOpen = true; // Should other open dropdowns be closed when one is opened?\r\n var helpers = window.helpers; // Connect to the helper script\r\n\r\n\r\n // Properties\r\n\r\n var doc = document;\r\n var dropdownButtons = doc.getElementsByClassName('dropdown-button');\r\n var openClass = \"dropdown-open\";\r\n\r\n\r\n // Initialization\r\n\r\n for ( var i = 0; i < dropdownButtons.length; i++ ) {\r\n var button = dropdownButtons[i];\r\n button.addEventListener(\"click\", function(e) { toggleDropdown(e); });\r\n }\r\n\r\n\r\n\r\n // Functions\r\n\r\n\r\n /*\r\n * Func: toggleDropdown\r\n * Desc: Toggle visibility of dropdown panel\r\n * Args: @e - Event Object - Click event object from dropdown button\r\n */\r\n function toggleDropdown( e ) {\r\n e.preventDefault();\r\n\r\n var button = e.target;\r\n var wrapper = button.parentElement;\r\n var panel = wrapper.getElementsByClassName('dropdown-panel')[0];\r\n var visible = hasClass( wrapper, openClass );\r\n\r\n if ( closeAllOnOpen ) {\r\n closeAllDropdowns();\r\n }\r\n\r\n if ( !visible ) {\r\n addClass( wrapper, openClass );\r\n helpers.hidePanelOnClickOutside( wrapper, button, panel, openClass );\r\n } \r\n else if ( !closeAllOnOpen ) {\r\n removeClass( wrapper, openClass );\r\n }\r\n\r\n } // toggleDropdown\r\n\r\n\r\n\r\n /*\r\n * Func: closeAllDropdowns\r\n * Desc: Close all dropdown panels on page\r\n * Args: none\r\n */\r\n function closeAllDropdowns() {\r\n drops = doc.getElementsByClassName( openClass );\r\n\r\n for ( var i = 0; i < drops.length; i++ ) {\r\n removeClass( drops[i], openClass );\r\n }\r\n } // closeAllDropdowns\r\n\r\n\r\n\r\n\r\n})();\r\n\r\n\r\n/**************************************\r\n**** GVL Sidebar Dropdown Function ****\r\n**************************************/\r\n\r\n// Currently used on newly-styled university pages, starting April, 2020\r\n\r\nvar acc = document.getElementsByClassName(\"sidebar-dropdown-btn\");\r\nvar i;\r\n\r\nfor (i = 0; i < acc.length; i++) {\r\n acc[i].addEventListener(\"click\", function() {\r\n this.classList.toggle(\"active\");\r\n var panel = this.nextElementSibling;\r\n if (panel.style.maxHeight) {\r\n panel.style.maxHeight = null;\r\n } else {\r\n panel.style.maxHeight = panel.scrollHeight + \"px\";\r\n } \r\n });\r\n}\r\n\r\n// (function () {\r\n\r\n// acc.onclick = function () {\r\n\r\n// if (move.style.transform === \"rotate(180deg)\") {\r\n// move.style.transform = \"rotate(0deg)\";\r\n\r\n// } else {\r\n// move.style.transform = \"rotate(180deg)\";\r\n// }\r\n// };\r\n// });\r\n\r\n// Animation for the dropdown arrow/chevron\r\n(function () {\r\n var open = document.querySelector(\"img.sidebar-dropdown-btn\");\r\n\r\n if (open !== null) {\r\n\r\n open.onclick = function () {\r\n\r\n if (open.style.transform === \"rotate(180deg)\") {\r\n open.style.transform = \"rotate(0deg)\";\r\n\r\n } else {\r\n open.style.transform = \"rotate(180deg)\";\r\n }\r\n }\r\n};\r\n})();\r\n\r\n","\r\n/*************/\r\n/*! Menu Bar */\r\n\r\nvar menuBar = (function(){\r\n\r\n\r\n // Properties\r\n\r\n var clickEventString = \"click\";\r\n var menuItemClass = 'menu-item'; // Define strings once so they don't need to be repeated in minified script\r\n var menuOpenClass = 'menu-open';\r\n var panelOpenClass = 'panel-open';\r\n var submenuOpenClass = 'submenu-open';\r\n var doc, siteMenu, menuBar, menuItems, helpers, menuButtonListener, menuButton, body;\r\n\r\n\r\n\r\n\r\n\r\n // Initialization\r\n\r\n /* See https://plainjs.com/javascript/events/running-code-when-the-document-is-ready-15/ */\r\n\r\n // in case the document is already rendered\r\n if (document.readyState!='loading') initializeMenu();\r\n // modern browsers\r\n else if (document.addEventListener) document.addEventListener('DOMContentLoaded', initializeMenu);\r\n // IE <= 8\r\n else document.attachEvent('onreadystatechange', function(){\r\n if (document.readyState=='complete') initializeMenu();\r\n });\r\n\r\n\r\n\r\n\r\n\r\n\r\n // Functions\r\n\r\n /*\r\n * Func: initializeMenu\r\n * Desc: Initialize the javascript-powered menu\r\n * Args: none\r\n */\r\n\r\n function initializeMenu() {\r\n\r\n // Define variables from DOM elements\r\n doc = document;\r\n siteMenu = doc.getElementById('site-menu');\r\n menuBar = siteMenu ? siteMenu.parentElement : null;\r\n menuItems = doc.getElementsByClassName('menu-trigger');\r\n helpers = window.helpers;\r\n\r\n if( menuBar ) {\r\n\r\n // Add initialization class to menu, to show that JS is functioning\r\n addClass(doc.body, \"menu-js\");\r\n\r\n // Add a button to open the menu\r\n menuButton = doc.createElement('a');\r\n menuButton.id = \"site-menu-button\";\r\n menuButton.setAttribute(\"aria-role\", \"button\")\r\n menuButton.setAttribute(\"aria-haspopup\", \"true\")\r\n menuButton.setAttribute(\"aria-controls\", \"site-menu\");\r\n menuButton.innerHTML = \"Site Menu\";\r\n \r\n menuBar.insertBefore( menuButton, menuBar.firstChild );\r\n\r\n // Add click event to menu button\r\n menuButtonListener = menuButton.addEventListener(clickEventString, function(e){ toggleMenuButton(e); });\r\n\r\n // Add click events to main menu items\r\n for ( var i = 0; i < menuItems.length; i++ ) {\r\n var item = menuItems[i];\r\n item.addEventListener(clickEventString, toggleMenuItem);\r\n }\r\n\r\n // Add a class when the window is resizing\r\n markWindowResize( menuBar, \"window-resizing\" );\r\n\r\n } \r\n }\r\n\r\n\r\n\r\n\r\n /*\r\n * Func: toggleMenuButton\r\n * Desc: Respond to a click on the mobile navigation menu button\r\n * Args: none\r\n */\r\n function toggleMenuButton( e ) {\r\n e.preventDefault();\r\n if( hasClass( menuBar, menuOpenClass ) ) {\r\n removeClass( menuBar, menuOpenClass );\r\n } else {\r\n addClass( menuBar, menuOpenClass );\r\n helpers.hidePanelOnClickOutside( menuBar, menuButton, siteMenu, menuOpenClass );\r\n }\r\n return false;\r\n\r\n } // toggleMenuButton\r\n\r\n\r\n\r\n\r\n /*\r\n * Func: toggleMenuItem\r\n * Desc: Respond to a click on a top menu item\r\n * Args: none\r\n */\r\n function toggleMenuItem( e ) {\r\n e.preventDefault();\r\n\r\n var menuItem = findAncestor( e.target, menuItemClass );\r\n var open;\r\n\r\n if( menuItem ) {\r\n open = hasClass( menuItem, panelOpenClass );\r\n closeAllPanels();\r\n\r\n if( !open ) {\r\n addClass( menuItem, panelOpenClass );\r\n addClass( menuBar, submenuOpenClass );\r\n hideSubPanelOnClickOutside( menuItem, panelOpenClass );\r\n setPanelPosition( menuItem );\r\n } else {\r\n removeClass( menuBar, submenuOpenClass );\r\n }\r\n }\r\n\r\n return false;\r\n\r\n } // toggleMenuItem\r\n\r\n\r\n\r\n /*\r\n * Func: setPanelPosition\r\n * Desc: Flag the sub-panel of a menu item that overflows the page so it can be styled with CSS\r\n * Args: @menuItem - HTML Element - The menu item (
  • ) which should have its sub-panel positioned\r\n */\r\n function setPanelPosition( menuItem ) {\r\n var panel = menuItem.getElementsByClassName('panel')[0];\r\n var panelPos = menuItem.offsetLeft;\r\n var panelWidth = panel.offsetWidth;\r\n var menuPos = siteMenu.offsetLeft;\r\n var menuBarWidth = menuBar.offsetWidth;\r\n var rightClass = \"align-right\";\r\n\r\n var menuOverflows = (menuPos + panelPos + panelWidth) > (menuBarWidth - 20);\r\n\r\n removeClass( menuItem, rightClass );\r\n\r\n if ( menuOverflows ) {\r\n if ( !hasClass( menuItem, rightClass ) ) {\r\n addClass( menuItem, rightClass );\r\n }\r\n }\r\n } // setPanelPosition\r\n\r\n\r\n\r\n\r\n /*\r\n * Func: closeAllPanels\r\n * Desc: Close all menu panels\r\n * Args: none\r\n */\r\n function closeAllPanels() {\r\n var panels = doc.getElementsByClassName( menuItemClass );\r\n\r\n for (var i = 0; i < panels.length; i++) {\r\n var panel = panels[i];\r\n removeClass( panel, panelOpenClass );\r\n\r\n // See function 'hideSubPanelOnClickOutside'\r\n if ( typeof(panel.removeClickListener) === \"function\" ) {\r\n panel.removeClickListener();\r\n }\r\n }\r\n\r\n removeClass( menuBar, submenuOpenClass );\r\n } // closeAllPanels\r\n\r\n\r\n\r\n\r\n function hideMenuOnClickOutside() {\r\n\r\n }\r\n\r\n\r\n\r\n /*\r\n * Func: hideSubPanelOnClickOutside\r\n * Desc: Close a panel when mouse is clicked anywhere but in the panel or in its trigger button\r\n * See https://stackoverflow.com/questions/152975/how-do-i-detect-a-click-outside-an-element/3028037#3028037\r\n * Args: @panel - HTML Element - The panel that can be opened or closed\r\n * @openClass - String - The class that should be removed from the wrapper\r\n */\r\n function hideSubPanelOnClickOutside( panel, openClass ) {\r\n var outsideClickListener = function( e ) {\r\n var t = e.target;\r\n if ( t !== panel && !panel.contains(t) ) {\r\n closeAllPanels();\r\n toggleMenuItem( e );\r\n panel.removeClickListener();\r\n }\r\n }\r\n\r\n panel.removeClickListener = function() {\r\n doc.removeEventListener(clickEventString, outsideClickListener);\r\n }\r\n\r\n doc.addEventListener(clickEventString, outsideClickListener)\r\n\r\n } // hideSubPanelOnClickOutside\r\n\r\n\r\n\r\n\r\n /*\r\n * Func: findAncestor\r\n * Desc: Find the closest ancestor with a particular class\r\n * Args: @el - HTML Element - The element whose ancestor should be found\r\n * @className - String - The class to look for on the ancestor\r\n */\r\n function findAncestor (el, className) {\r\n while ( (el = el.parentElement) && !hasClass(el, className) );\r\n return el;\r\n } // findAncestor\r\n\r\n\r\n\r\n\r\n\r\n /* Func: markWindowResize\r\n * Desc: Add a class to an element while the window is being resized\r\n * Adapted from https://stackoverflow.com/questions/10105180/jquery-add-class-during-resize-event-remove-class-after-resize-event\r\n * Args: @el - HTML Element - Element that should receive class\r\n * @className - String - Class to add to the element\r\n */\r\n function markWindowResize( el, className ) {\r\n var timer = 0;\r\n\r\n var resizestart = function () {\r\n if ( !hasClass( el, className ) ) {\r\n addClass( el, className );\r\n }\r\n };\r\n\r\n var resizestop = function() {\r\n removeClass( el, className );\r\n };\r\n\r\n window.onresize = function(){\r\n if ( timer ) {\r\n clearTimeout( timer );\r\n }\r\n timer = setTimeout( resizestop, 200 );\r\n resizestart();\r\n };\r\n\r\n } // markWindowResize\r\n\r\n\r\n\r\n\r\n\r\n // Return public properties and methods\r\n\r\n return {\r\n\r\n };\r\n\r\n})();\r\n\r\n\r\n// -------------- Secondary Nav Bar ---------------- //\r\n\r\nvar secondaryMenuBar = (function(){\r\n\r\n\r\n // Properties\r\n\r\n var clickEventString = \"click\";\r\n var menuItemClass = 'secondary-menu-item'; // Define strings once so they don't need to be repeated in minified script\r\n var menuOpenClass = 'menu-open';\r\n var panelOpenClass = 'panel-open';\r\n var submenuOpenClass = 'submenu-open';\r\n var doc, siteMenu, menuBar, menuItems, helpers, menuButtonListener, menuButton, body;\r\n\r\n\r\n\r\n\r\n\r\n // Initialization\r\n\r\n /* See https://plainjs.com/javascript/events/running-code-when-the-document-is-ready-15/ */\r\n\r\n // in case the document is already rendered\r\n if (document.readyState!='loading') initializeMenu();\r\n // modern browsers\r\n else if (document.addEventListener) document.addEventListener('DOMContentLoaded', initializeMenu);\r\n // IE <= 8\r\n else document.attachEvent('onreadystatechange', function(){\r\n if (document.readyState=='complete') initializeMenu();\r\n });\r\n\r\n\r\n\r\n\r\n\r\n\r\n // Functions\r\n\r\n /*\r\n * Func: initializeMenu\r\n * Desc: Initialize the javascript-powered menu\r\n * Args: none\r\n */\r\n\r\n function initializeMenu() {\r\n\r\n // Define variables from DOM elements\r\n doc = document;\r\n siteMenu = doc.getElementById('site-menu');\r\n menuBar = siteMenu ? siteMenu.parentElement : null;\r\n menuItems = doc.getElementsByClassName('menu-trigger');\r\n helpers = window.helpers;\r\n\r\n if( menuBar ) {\r\n\r\n // Add initialization class to menu, to show that JS is functioning\r\n addClass(doc.body, \"menu-js\");\r\n\r\n // Add a button to open the menu\r\n menuButton = doc.createElement('a');\r\n menuButton.id = \"site-menu-button\";\r\n menuButton.setAttribute(\"aria-role\", \"button\")\r\n menuButton.setAttribute(\"aria-haspopup\", \"true\")\r\n menuButton.setAttribute(\"aria-controls\", \"site-menu\");\r\n menuButton.innerHTML = \"Site Menu\";\r\n \r\n menuBar.insertBefore( menuButton, menuBar.firstChild );\r\n\r\n // Add click event to menu button\r\n menuButtonListener = menuButton.addEventListener(clickEventString, function(e){ toggleMenuButton(e); });\r\n\r\n // Add click events to main menu items\r\n for ( var i = 0; i < menuItems.length; i++ ) {\r\n var item = menuItems[i];\r\n item.addEventListener(clickEventString, toggleMenuItem);\r\n }\r\n\r\n // Add a class when the window is resizing\r\n markWindowResize( menuBar, \"window-resizing\" );\r\n\r\n } \r\n }\r\n\r\n\r\n\r\n\r\n /*\r\n * Func: toggleMenuButton\r\n * Desc: Respond to a click on the mobile navigation menu button\r\n * Args: none\r\n */\r\n function toggleMenuButton( e ) {\r\n e.preventDefault();\r\n if( hasClass( menuBar, menuOpenClass ) ) {\r\n removeClass( menuBar, menuOpenClass );\r\n } else {\r\n addClass( menuBar, menuOpenClass );\r\n helpers.hidePanelOnClickOutside( menuBar, menuButton, siteMenu, menuOpenClass );\r\n }\r\n return false;\r\n\r\n } // toggleMenuButton\r\n\r\n\r\n\r\n\r\n /*\r\n * Func: toggleMenuItem\r\n * Desc: Respond to a click on a top menu item\r\n * Args: none\r\n */\r\n function toggleMenuItem( e ) {\r\n e.preventDefault();\r\n\r\n var menuItem = findAncestor( e.target, menuItemClass );\r\n var open;\r\n\r\n if( menuItem ) {\r\n open = hasClass( menuItem, panelOpenClass );\r\n closeAllPanels();\r\n\r\n if( !open ) {\r\n addClass( menuItem, panelOpenClass );\r\n addClass( menuBar, submenuOpenClass );\r\n hideSubPanelOnClickOutside( menuItem, panelOpenClass );\r\n setPanelPosition( menuItem );\r\n } else {\r\n removeClass( menuBar, submenuOpenClass );\r\n }\r\n }\r\n\r\n return false;\r\n\r\n } // toggleMenuItem\r\n\r\n\r\n\r\n /*\r\n * Func: setPanelPosition\r\n * Desc: Flag the sub-panel of a menu item that overflows the page so it can be styled with CSS\r\n * Args: @menuItem - HTML Element - The menu item (
  • ) which should have its sub-panel positioned\r\n */\r\n function setPanelPosition( menuItem ) {\r\n var panel = menuItem.getElementsByClassName('panel')[0];\r\n var panelPos = menuItem.offsetLeft;\r\n var panelWidth = panel.offsetWidth;\r\n var menuPos = siteMenu.offsetLeft;\r\n var menuBarWidth = menuBar.offsetWidth;\r\n var rightClass = \"align-right\";\r\n\r\n var menuOverflows = (menuPos + panelPos + panelWidth) > (menuBarWidth - 20);\r\n\r\n removeClass( menuItem, rightClass );\r\n\r\n if ( menuOverflows ) {\r\n if ( !hasClass( menuItem, rightClass ) ) {\r\n addClass( menuItem, rightClass );\r\n }\r\n }\r\n } // setPanelPosition\r\n\r\n\r\n\r\n\r\n /*\r\n * Func: closeAllPanels\r\n * Desc: Close all menu panels\r\n * Args: none\r\n */\r\n function closeAllPanels() {\r\n var panels = doc.getElementsByClassName( menuItemClass );\r\n\r\n for (var i = 0; i < panels.length; i++) {\r\n var panel = panels[i];\r\n removeClass( panel, panelOpenClass );\r\n\r\n // See function 'hideSubPanelOnClickOutside'\r\n if ( typeof(panel.removeClickListener) === \"function\" ) {\r\n panel.removeClickListener();\r\n }\r\n }\r\n\r\n removeClass( menuBar, submenuOpenClass );\r\n } // closeAllPanels\r\n\r\n\r\n\r\n\r\n function hideMenuOnClickOutside() {\r\n\r\n }\r\n\r\n\r\n\r\n /*\r\n * Func: hideSubPanelOnClickOutside\r\n * Desc: Close a panel when mouse is clicked anywhere but in the panel or in its trigger button\r\n * See https://stackoverflow.com/questions/152975/how-do-i-detect-a-click-outside-an-element/3028037#3028037\r\n * Args: @panel - HTML Element - The panel that can be opened or closed\r\n * @openClass - String - The class that should be removed from the wrapper\r\n */\r\n function hideSubPanelOnClickOutside( panel, openClass ) {\r\n var outsideClickListener = function( e ) {\r\n var t = e.target;\r\n if ( t !== panel && !panel.contains(t) ) {\r\n closeAllPanels();\r\n toggleMenuItem( e );\r\n panel.removeClickListener();\r\n }\r\n }\r\n\r\n panel.removeClickListener = function() {\r\n doc.removeEventListener(clickEventString, outsideClickListener);\r\n }\r\n\r\n doc.addEventListener(clickEventString, outsideClickListener)\r\n\r\n } // hideSubPanelOnClickOutside\r\n\r\n\r\n\r\n\r\n /*\r\n * Func: findAncestor\r\n * Desc: Find the closest ancestor with a particular class\r\n * Args: @el - HTML Element - The element whose ancestor should be found\r\n * @className - String - The class to look for on the ancestor\r\n */\r\n function findAncestor (el, className) {\r\n while ( (el = el.parentElement) && !hasClass(el, className) );\r\n return el;\r\n } // findAncestor\r\n\r\n\r\n\r\n\r\n\r\n /* Func: markWindowResize\r\n * Desc: Add a class to an element while the window is being resized\r\n * Adapted from https://stackoverflow.com/questions/10105180/jquery-add-class-during-resize-event-remove-class-after-resize-event\r\n * Args: @el - HTML Element - Element that should receive class\r\n * @className - String - Class to add to the element\r\n */\r\n function markWindowResize( el, className ) {\r\n var timer = 0;\r\n\r\n var resizestart = function () {\r\n if ( !hasClass( el, className ) ) {\r\n addClass( el, className );\r\n }\r\n };\r\n\r\n var resizestop = function() {\r\n removeClass( el, className );\r\n };\r\n\r\n window.onresize = function(){\r\n if ( timer ) {\r\n clearTimeout( timer );\r\n }\r\n timer = setTimeout( resizestop, 200 );\r\n resizestart();\r\n };\r\n\r\n } // markWindowResize\r\n\r\n\r\n\r\n\r\n\r\n // Return public properties and methods\r\n\r\n return {\r\n\r\n };\r\n\r\n})();"]}