{"version":3,"sources":["searchController.js"],"names":["SearchController","_classCallCheck","this","_createClass","key","value","headerSearch","searchButton","contains","openSearch","toggleSearch","classList","closeSearch","setAttribute","headerSearchSubmit","disabled","headerSearchBar","tabIndex","document","removeEventListener","e","offClickCloseSearch","escapeKeyCloseSearch","add","focus","addEventListener","target","which","keyCode","queryString","trim","button","escString","innerWidth","removeAttribute","updateButtonStatus","get","querySelector","exports","module","window","searchButtonContainer","insertAdjacentHTML","searchButtonMarkup","updateAttributes"],"mappings":"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","file":"searchController.min.js","sourcesContent":["class SearchController {\r\n\r\n\t/**\r\n\t * method used to toggle on or off the search bar based on class\r\n\t * @param {Node} headerSearch\r\n\t * @param {Node} searchButton\r\n\t */\r\n\tstatic toggleSearch(headerSearch, searchButton) {\r\n\t\tif (headerSearch.classList.contains('desktop-show')) {\r\n\t\t\tSearchController.closeSearch(headerSearch, searchButton);\r\n\t\t} else {\r\n\t\t\tSearchController.openSearch(headerSearch, searchButton);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Closes the search bar and sets appropriate a11y values\r\n\t * @param {Node} headerSearch\r\n\t * @param {Node} searchButton\r\n\t */\r\n\tstatic closeSearch(headerSearch, searchButton) {\r\n\t\theaderSearch.classList.remove('desktop-show');\r\n\t\theaderSearch.setAttribute('aria-hidden', 'true');\r\n\t\tsearchButton.setAttribute('aria-expanded', 'false');\r\n\t\tSearchController.headerSearchBar.value = \"\";\r\n\t\tSearchController.headerSearchSubmit.disabled = true;\r\n\r\n\t\tSearchController.headerSearchBar.tabIndex = \"-1\";\r\n\r\n\t\tdocument.removeEventListener('click', function(e) {\r\n\t\t\tSearchController.offClickCloseSearch(e, headerSearch, searchButton);\r\n\t\t});\r\n\r\n\t\tdocument.removeEventListener('keydown', function(e) {\r\n\t\t\tSearchController.escapeKeyCloseSearch(e, headerSearch, searchButton);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Opens search bar and sets appropriate a11y values\r\n\t * @param {Node} headerSearch\r\n\t * @param {Node} searchButton\r\n\t */\r\n\tstatic openSearch(headerSearch, searchButton) {\r\n\t\theaderSearch.classList.add('desktop-show');\r\n\t\theaderSearch.removeAttribute('aria-hidden');\r\n\t\tsearchButton.setAttribute('aria-expanded', 'true');\r\n\r\n\t\tSearchController.headerSearchBar.tabIndex = \"0\";\r\n\t\tSearchController.headerSearchBar.focus();\r\n\r\n\t\tdocument.addEventListener('click', function(e) {\r\n\t\t\tSearchController.offClickCloseSearch(e, headerSearch, searchButton);\r\n\t\t});\r\n\r\n\t\tdocument.addEventListener('keydown', function(e) {\r\n\t\t\tSearchController.escapeKeyCloseSearch(e, headerSearch, searchButton);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Handles closing search if mouse clicks on target outside of it.\r\n\t * @param {MouseEvent} e\r\n\t * @param {Node} headerSearch\r\n\t * @param {Node} searchButton\r\n\t */\r\n\tstatic offClickCloseSearch(e, headerSearch, searchButton) {\r\n\t\tif (!e.target.classList.contains('search-toggle') && e.target.closest('.search-ui') === null) {\r\n\t\t\tSearchController.closeSearch(headerSearch, searchButton);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles escape key close event when search bar is open.\r\n\t * @param {KeyEvent} e\r\n\t * @param {Node} headerSearch\r\n\t * @param {Node} searchButton\r\n\t */\r\n\tstatic escapeKeyCloseSearch(e, headerSearch, searchButton) {\r\n\t\tvar key = e.key || e.which || e.keyCode || 0;\r\n\t\tvar escKey = 27;\r\n\t\tvar escString = 'Escape';\r\n\t\tvar ie11EscString = 'Esc';\r\n\r\n\t\tif (key === escString || key === ie11EscString || key === escKey) {\r\n\t\t\tSearchController.closeSearch(headerSearch, searchButton);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates redirect button based on value of the search's input\r\n\t * @param {String} queryString\r\n\t * @param {Node} anchorLink\r\n\t */\r\n\tstatic updateButtonStatus(queryString, button) {\r\n\t\tif (queryString === '' || queryString.trim() === '') {\r\n\t\t\tbutton.disabled = true;\r\n\t\t} else {\r\n\t\t\tbutton.disabled = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Update attributes based on screen width, aria hidden always removed on mobile.\r\n\t * @param {Node} headerSearch\r\n\t */\r\n\tstatic updateAttributes(headerSearch, headerSearchBar) {\r\n\t\tconst largeBreakpoint = 992;\r\n\r\n\t\tif (window.innerWidth < largeBreakpoint || headerSearch.classList.contains('desktop-show')) {\r\n\t\t\theaderSearch.removeAttribute('aria-hidden');\r\n\t\t\theaderSearchBar.tabIndex = \"0\";\r\n\t\t} else {\r\n\t\t\theaderSearch.setAttribute('aria-hidden', 'true');\r\n\t\t\theaderSearchBar.tabIndex = \"-1\";\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return toggle search button\r\n\t */\r\n\tstatic get searchButton() {\r\n\t\treturn document.querySelector('header .search-toggle');\r\n\t}\r\n\r\n\t/**\r\n\t * @return header search container\r\n\t */\r\n\tstatic get headerSearch() {\r\n\t\treturn document.querySelector('header nav .search-ui');\r\n\t}\r\n\r\n\t/**\r\n\t * @return input element within header search container\r\n\t */\r\n\tstatic get headerSearchBar() {\r\n\t\treturn document.querySelector('header nav .search-ui input');\r\n\t}\r\n\r\n\t/**\r\n\t * @return button used to submit the search query\r\n\t */\r\n\tstatic get headerSearchSubmit() {\r\n\t\treturn document.querySelector('header nav .search-ui [type=\"submit\"]');\r\n\t}\r\n\r\n\t/**\r\n\t * @return a string representing the toggle search button markup\r\n\t */\r\n\tstatic get searchButtonMarkup() {\r\n\t\treturn '';\r\n\t}\r\n\r\n\t/**\r\n\t * @return container used to hold search toggle button\r\n\t */\r\n\tstatic get searchButtonContainer() {\r\n\t\treturn document.querySelector('header .search-toggle-container');\r\n\t}\r\n}\r\n\r\n// export as a module for unit testing\r\nif (typeof exports !== 'undefined') {\r\n\tmodule.exports = SearchController;\r\n}\r\n\r\n// Initialize and run in IIFE\r\n(function() {\r\n\twindow.addEventListener('load', function() {\r\n\t\tlet headerSearch = SearchController.headerSearch;\r\n\t\tlet searchButtonContainer = SearchController.searchButtonContainer;\r\n\r\n\t\t// Check to see if the search bar even exists\r\n\t\tif (headerSearch !== null && searchButtonContainer !== null) {\r\n\r\n\t\t\t// Adds search toggle button to nav if search bar exists\r\n\t\t\tsearchButtonContainer.insertAdjacentHTML('afterbegin', SearchController.searchButtonMarkup);\r\n\r\n\t\t\tlet searchButton = SearchController.searchButton;\r\n\t\t\tlet headerSearchBar = SearchController.headerSearchBar;\r\n\t\t\tlet headerSearchSubmit = SearchController.headerSearchSubmit;\r\n\r\n\t\t\t// Run attribute update to see if screen width is mobile\r\n\t\t\tSearchController.updateAttributes(headerSearch, headerSearchBar);\r\n\r\n\t\t\twindow.addEventListener('resize', function() {\r\n\t\t\t\tSearchController.updateAttributes(headerSearch, headerSearchBar);\r\n\t\t\t});\r\n\r\n\t\t\tsearchButton.addEventListener('click', function() {\r\n\t\t\t\tSearchController.toggleSearch(headerSearch, searchButton);\r\n\t\t\t});\r\n\r\n\t\t\tsearchButton.addEventListener('keydown', function(e) {\r\n\t\t\t\tvar key = e.key || e.which || e.keyCode || 0;\r\n\t\t\t\tvar enterKey = 13;\r\n\t\t\t\tvar spaceKey = 32;\r\n\t\t\t\tif (key === enterKey || key === spaceKey) {\r\n\t\t\t\t\tSearchController.toggleSearch(headerSearch, this);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\theaderSearchBar.addEventListener('input', function() {\r\n\t\t\t\tSearchController.updateButtonStatus(headerSearchBar.value, headerSearchSubmit);\r\n\t\t\t});\r\n\r\n\t\t\theaderSearchBar.addEventListener('keydown', function(e) {\r\n\t\t\t\tvar enterKey = 13;\r\n\t\t\t\tif (e.key === 'Enter' || e.keyCode === enterKey || e.which === enterKey) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\theaderSearchSubmit.click();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n}());"]}