{"version":3,"sources":["priory.search.js"],"names":["Search","[object Object]","el","this","scope","input","querySelector","page","dropdown","criteriaElement","criteriaLabel","filters","document","hasOverlay","closest","searchUrl","action","value","pageValue","open","resizeFunction","debounce","search","bindTab","e","target","closeDropDown","removeEventListener","bindClick","bindEvents","addEventListener","updateCriteria","length","openDropDown","querySelectorAll","forEach","radio","preventDefault","window","location","href","pagination","select","dataEl","maxPages","parseInt","dataset","max","currentPage","pageSize","category","options","i","push","innerHTML","join","prev","setAttribute","classList","add","removeAttribute","remove","newPage","toString","next","selectedCategory","categoryCount","sanitise","map","&","<",">","\"","'","/","replace","match","parentElement","CustomEvent","detail","searchTerm","dispatchEvent","ControlBinders","register"],"mappings":"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","sourcesContent":["class Search {\r\n constructor(el) {\r\n this.scope = el;\r\n this.input = el.querySelector('input[name=\"searchTerm\"]');\r\n this.page = el.querySelector('input[name=\"page\"]');\r\n this.dropdown = el.querySelector(\"[data-dropdown]\")\r\n this.criteriaElement = el.querySelector(\"[data-criteria]\");\r\n this.criteriaLabel = el.querySelector(\"[data-criteria-label]\");\r\n this.filters = document.querySelector('[data-filters]');\r\n this.hasOverlay = this.input.closest(\"[data-search-overlay]\");\r\n this.searchUrl = el.action;\r\n this.value = \"\";\r\n this.pageValue = \"\";\r\n this.open = false;\r\n this.resizeFunction = debounce(() => this.search(), 500);\r\n this.bindTab = (e) => {\r\n if (!e.target.closest(\"[data-search]\")) {\r\n this.closeDropDown();\r\n document.removeEventListener(\"keyup\", this.bindTab);\r\n }\r\n };\r\n this.bindClick = (e) => {\r\n if (!e.target.closest(\"[data-search]\")) {\r\n this.closeDropDown();\r\n document.removeEventListener(\"keyup\", this.bindClick);\r\n }\r\n };\r\n this.bindEvents();\r\n }\r\n\r\n bindEvents() {\r\n this.input.addEventListener(\"input\", () => this.updateCriteria());\r\n this.input.addEventListener(\"clear\", () => this.updateCriteria());\r\n this.input.addEventListener(\"focus\", () => this.value.length > 3 && this.openDropDown());\r\n\r\n if (this.filters) {\r\n this.filters.querySelectorAll('input').forEach(radio => {\r\n radio.addEventListener('input', e => {\r\n const value = radio.value;\r\n e.preventDefault();\r\n this.value = this.input.value;\r\n window.location.href = this.searchUrl + `?searchTerm=${this.value}&page=1&category=${value}`;\r\n });\r\n });\r\n }\r\n\r\n this.scope.addEventListener(\"submit\", e => {\r\n e.preventDefault();\r\n this.value = this.input.value;\r\n window.location.href = this.searchUrl + `?searchTerm=${this.value}&page=1`;\r\n })\r\n\r\n const pagination = document.querySelector('.pagination');\r\n if (pagination) {\r\n const select = pagination.querySelector('select');\r\n if (select) {\r\n const dataEl = document.querySelector('[data-max]');\r\n if (dataEl) {\r\n const maxPages = parseInt(dataEl.dataset.max);\r\n const currentPage = parseInt(dataEl.dataset.currentPage);\r\n const pageSize = parseInt(dataEl.dataset.pageSize);\r\n const category = dataEl.dataset.category;\r\n\r\n let options = [];\r\n for (let i = 1; i <= maxPages; i++) {\r\n options.push(``)\r\n }\r\n select.innerHTML = options.join('');\r\n\r\n const prev = pagination.querySelector('.button[title=\"Previous Page\"]');\r\n if (prev) {\r\n if (currentPage === 1) {\r\n prev.setAttribute('disabled', '');\r\n prev.classList.add('disabled');\r\n } else {\r\n prev.removeAttribute('disabled');\r\n prev.classList.remove('disabled');\r\n prev.addEventListener(\"click\", e => {\r\n const newPage = currentPage - 1;\r\n e.preventDefault();\r\n this.value = this.input.value;\r\n select.value = newPage.toString();\r\n window.location.href = this.searchUrl + `?searchTerm=${this.value}&page=${newPage}&category=${category}`;\r\n });\r\n }\r\n }\r\n\r\n const next = pagination.querySelector('.button[title=\"Next Page\"]');\r\n if (next) {\r\n if (currentPage === maxPages) {\r\n next.setAttribute('disabled', '');\r\n next.classList.add('disabled');\r\n } else {\r\n next.removeAttribute('disabled');\r\n next.classList.remove('disabled');\r\n next.addEventListener(\"click\", e => {\r\n const newPage = currentPage + 1;\r\n e.preventDefault();\r\n this.value = this.input.value;\r\n select.value = newPage.toString();\r\n window.location.href = this.searchUrl + `?searchTerm=${this.value}&page=${newPage}&category=${category}`;\r\n });\r\n }\r\n }\r\n\r\n select.addEventListener('change', e => {\r\n e.preventDefault();\r\n this.value = this.input.value;\r\n window.location.href = this.searchUrl + `?searchTerm=${this.value}&page=${select.value}&category=${category}`;\r\n });\r\n\r\n const selectedCategory = document.querySelector('input[data-category-count]:checked');\r\n if (selectedCategory) {\r\n const count = parseInt(selectedCategory.dataset.categoryCount);\r\n if (count <= pageSize) {\r\n pagination.classList.add('pagination--hidden');\r\n } else {\r\n pagination.classList.remove('pagination--hidden');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateCriteria() {\r\n this.value = this.sanitise(this.input.value);\r\n this.pageValue = this.page ? this.page.value : \"1\";\r\n if (this.criteriaElement) {\r\n this.criteriaLabel.dataset.criteriaLabel = this.value;\r\n this.criteriaElement.href = this.searchUrl + `?searchTerm=${this.value}&page=${this.pageValue}`;\r\n }\r\n if (this.value.length > 2) {\r\n !this.open && this.openDropDown();\r\n this.resizeFunction();\r\n } else {\r\n this.open && this.closeDropDown();\r\n }\r\n }\r\n\r\n sanitise(value) {\r\n const map = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": ''',\r\n \"/\": '/',\r\n };\r\n const reg = /[&<>\"'/]/ig;\r\n return value.replace(reg, (match) => (map[match]));\r\n }\r\n\r\n openDropDown() {\r\n this.dropdown.classList.add(\"form-group__dropdown--open\");\r\n this.dropdown.parentElement.classList.add(\"form-group--dropdown-open\");\r\n this.open = true;\r\n document.addEventListener(\"keyup\", this.bindTab);\r\n document.addEventListener(\"click\", this.bindClick);\r\n\r\n }\r\n\r\n closeDropDown() {\r\n this.dropdown.classList.remove(\"form-group__dropdown--open\");\r\n this.dropdown.parentElement.classList.remove(\"form-group--dropdown-open\");\r\n\r\n this.open = false;\r\n }\r\n\r\n search() {\r\n const search = new CustomEvent(\"search\", {\r\n detail: {\r\n searchTerm: this.value\r\n },\r\n });\r\n this.scope.dispatchEvent(search);\r\n }\r\n}\r\n\r\nControlBinders.register(`[data-search]`, el => new Search(el));"],"file":"priory.search-min.js"}