{"version":3,"file":"./modules/SearchContentPart.xxxxxxxx.js","mappings":"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","sources":["webpack:///./modules/SearchInput.ts","webpack:///./modules/SearchContentPart.ts","webpack:///./modules/SearchAutoSuggestion.ts","webpack:///../../../node_modules/rxjs/_esm5/internal/operators/pluck.js"],"sourcesContent":["import { focusInput } from '../helpers/helperFunctions';\r\n\r\nconst moduleSelector = '[data-module=\"SearchInput\"]';\r\n\r\nexport default class SearchInput {\r\n\r\n private searchClearIcon: HTMLElement;\r\n private searchInput: HTMLInputElement;\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new SearchInput(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement) {\r\n this.searchClearIcon = this.element.querySelector('.nx-search-input-clear__icon');\r\n this.searchInput = this.element.querySelector('.nx-search-input__text');\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.searchInput.addEventListener('input', (event) => {\r\n this.checkEmpty();\r\n });\r\n\r\n this.searchClearIcon.addEventListener('click', (event: Event) => {\r\n this.clearInput();\r\n });\r\n\r\n this.setValueToInput();\r\n\r\n if (this.searchInput.value) {\r\n this.searchClearIcon.classList.add('nx-search-input-clear__icon--show');\r\n }\r\n\r\n if (this.element.closest('.nx-layer')) setTimeout(() => focusInput(this.searchInput), 0);\r\n }\r\n\r\n checkEmpty() {\r\n if (this.searchInput.value) {\r\n this.searchClearIcon.classList.add('nx-search-input-clear__icon--show');\r\n }\r\n else {\r\n this.searchClearIcon.classList.remove('nx-search-input-clear__icon--show');\r\n focusInput(this.searchInput);\r\n }\r\n }\r\n\r\n clearInput() {\r\n this.searchInput.value = '';\r\n this.checkEmpty();\r\n }\r\n\r\n setValueToInput() {\r\n var url = window.location.href;\r\n var name = this.searchInput.getAttribute(\"name\");\r\n this.searchInput.value = this.getParameterByName(name, url);\r\n }\r\n\r\n getParameterByName(name, url) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n\r\n}\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n SearchInput.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n SearchInput.setup(moduleSelector);\r\n });\r\n module.hot.dispose(() => {\r\n nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n });\r\n} else {\r\n SearchInput.setup(moduleSelector);\r\n}","/// \r\nimport { getOptions } from '../helpers/helperFunctions';\r\nimport SearchInput from './SearchInput';\r\nimport SearchAutoSuggestion from './SearchAutoSuggestion';\r\n\r\nconst moduleSelector = '[data-module=\"SearchContentPart\"]';\r\n\r\nexport default class SearchContentPart {\r\n private content: HTMLElement;\r\n\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new SearchContentPart(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement, private options: ISearchOptions = {}) {\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), this.options));\r\n\r\n this.init();\r\n }\r\n\r\n private init(): SearchContentPart {\r\n this.content = this.content || this.getContent();\r\n\r\n return this;\r\n }\r\n\r\n private getContent(): HTMLElement {\r\n const content = document.querySelector(\".nx-header-search-form\");\r\n\r\n new SearchInput(content);\r\n new SearchAutoSuggestion(content);\r\n\r\n return content;\r\n }\r\n\r\n private getDefaultOptions(): ISearchOptions {\r\n return {\r\n inputSelector: '.nx-search__input'\r\n }\r\n }\r\n}\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n SearchContentPart.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n SearchContentPart.setup(moduleSelector);\r\n });\r\n module.hot.dispose(() => {\r\n nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n });\r\n} else {\r\n SearchContentPart.setup(moduleSelector);\r\n}","import { fromEvent, from, merge, Observable } from 'rxjs';\r\nimport { debounceTime, pluck, filter, map, tap } from 'rxjs/operators';\r\nimport { getOptions, cleanString } from '../helpers/helperFunctions';\r\nimport { Optional } from '../typings/mapped-types';\r\nconst moduleSelector = '[data-module=\"SearchAutoSuggestion\"]';\r\n\r\ninterface SearchAutoSuggestionOptions {\r\n inputWrapperSelector: string;\r\n inputSelector: string;\r\n suggestionListSelector: string;\r\n formSelector: string;\r\n deleteBtnSelector: string;\r\n}\r\n\r\ninterface SearchAutoSuggestionResponseCache {\r\n [index: string]: string;\r\n}\r\n\r\nconst keyArrowUp = 38,\r\n keyArrowDown = 40,\r\n keyEnter = 13,\r\n filterTarget = ($mouseEventStream: Observable, targetTag: string) => $mouseEventStream.pipe(\r\n pluck('target'),\r\n map((target: HTMLElement) => target.closest(targetTag)),\r\n filter(suggestionItem => !!suggestionItem));\r\n\r\nexport default class SearchAutoSuggestion {\r\n private inputField: HTMLElement;\r\n private inputFieldText: HTMLInputElement;\r\n private suggestionField: HTMLElement;\r\n private form: HTMLFormElement;\r\n private deleteButton: HTMLElement;\r\n private ajaxResponseCache: SearchAutoSuggestionResponseCache = {};\r\n\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new SearchAutoSuggestion(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement, private options: Optional = {}) {\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), this.options));\r\n this.inputField = this.element.querySelector(this.options.inputWrapperSelector);\r\n this.inputFieldText = this.inputField.querySelector(this.options.inputSelector);\r\n this.suggestionField = this.element.querySelector(this.options.suggestionListSelector);\r\n this.form = this.element.querySelector(this.options.formSelector) || element;\r\n this.deleteButton = this.element.querySelector(this.options.deleteBtnSelector);\r\n\r\n this.setInputEventHandler();\r\n }\r\n\r\n private setInputEventHandler(): SearchAutoSuggestion {\r\n const $input = fromEvent(this.inputFieldText, 'input').pipe(\r\n pluck('target'),\r\n debounceTime(500),\r\n filter(inputNode => (inputNode).value.length >= 3 ? true : this.hideDialog()),\r\n pluck('value'),\r\n map(cleanString)),\r\n\r\n $keyDown = fromEvent(this.inputFieldText, 'keydown').pipe(\r\n filter(({ target }) => (target).value != null)),\r\n\r\n $enterKey = $keyDown.pipe(\r\n filter((event: KeyboardEvent) => event.which === keyEnter),\r\n pluck('target', 'value')),\r\n\r\n $verticalArrowsKey = $keyDown.pipe(\r\n map(({ target, which }: KeyboardEvent) => ({ inputValue: cleanString((target).value), which })),\r\n filter(({ inputValue }) => inputValue.length >= 3),\r\n filter(({ which }) => [keyArrowUp, keyArrowDown].includes(which)),\r\n tap(({ inputValue }) => !this.isDialogVisible() && this.initSuggestion(inputValue))),\r\n\r\n $inputFieldClick = fromEvent(this.inputField, 'click').pipe(\r\n map(() => this.inputFieldText.value),\r\n filter(inputValue => inputValue.length >= 3),\r\n map(cleanString)),\r\n\r\n $deleteBtnClick = fromEvent(this.deleteButton, 'click'),\r\n\r\n $onBodyClick = fromEvent(document.body, 'click').pipe(\r\n pluck('target'),\r\n filter((target: HTMLElement) => target.closest(this.options.inputWrapperSelector) === null)),\r\n\r\n $onSuggestionFieldClick = fromEvent(this.suggestionField, 'click'),\r\n\r\n $onSearchResultHover = fromEvent(this.suggestionField, 'mouseover');\r\n\r\n // Subscriptions\r\n $input.subscribe(inputValue => this.initSuggestion(inputValue));\r\n\r\n $enterKey.subscribe((inputValue: string) => {\r\n let selectedElement = this.getSelectedElement(this.suggestionField),\r\n value = selectedElement ? selectedElement.textContent : inputValue;\r\n\r\n this.setToInputText(cleanString(value));\r\n });\r\n\r\n $verticalArrowsKey.subscribe(({ which }) => {\r\n switch (which) {\r\n case keyArrowDown:\r\n this.moveSelection(true);\r\n break;\r\n case keyArrowUp:\r\n this.moveSelection(false);\r\n break;\r\n }\r\n });\r\n\r\n $inputFieldClick.subscribe(inputValue => this.initSuggestion(inputValue));\r\n\r\n merge($deleteBtnClick, $onBodyClick).subscribe(() => this.hideDialog());\r\n\r\n filterTarget($onSuggestionFieldClick, 'li').subscribe((suggestionItem: HTMLElement) => {\r\n this.setToInputText(cleanString(suggestionItem.textContent))\r\n .submitForm();\r\n });\r\n\r\n filterTarget($onSearchResultHover, 'li').subscribe(\r\n suggestionItem =>\r\n this.removeSelection(Array.from(this.suggestionField.children))\r\n .setSelection(suggestionItem));\r\n\r\n return this;\r\n }\r\n\r\n private initSuggestion(searchTerm: string): SearchAutoSuggestion {\r\n this.clearSuggestion()\r\n .setLoader();\r\n\r\n this.isInCache(searchTerm)\r\n ? this.updateSuggestion(this.getResultsFromCache(searchTerm))\r\n : this.fetchSuggestions(searchTerm);\r\n\r\n return this;\r\n }\r\n\r\n // Cache Logic: START\r\n private isInCache(searchTerm: string): boolean {\r\n return searchTerm in this.ajaxResponseCache;\r\n }\r\n\r\n private setResultsToCache(searchTerm: string, resultsHTML: string): SearchAutoSuggestion {\r\n this.ajaxResponseCache[searchTerm] = resultsHTML;\r\n return this;\r\n }\r\n\r\n private getResultsFromCache(searchTerm: string) {\r\n return this.ajaxResponseCache[searchTerm];\r\n }\r\n // Cache Logic: END\r\n\r\n private updateSuggestion(resultsHTML: string): SearchAutoSuggestion {\r\n this.insertNodes(resultsHTML)\r\n .showDialog();\r\n\r\n return this;\r\n }\r\n\r\n private clearSuggestion(): SearchAutoSuggestion {\r\n this.suggestionField.innerHTML = \"\";\r\n return this;\r\n }\r\n\r\n private fetchSuggestions(searchTerm: string): SearchAutoSuggestion {\r\n //static AJAX usage\r\n // let ajaxUrl = window.location.protocol + \"//\" + window.location.host + \"/NiveaX/StaticPages/SearchSuggestions?q=\" + searchTerm;\r\n let ajaxUrl = window.location.protocol + \"//\" + window.location.host + \"/xajax/searchSuggestion?q=\" + searchTerm;\r\n let response = fetch(ajaxUrl, { credentials: 'include' })\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json();\r\n } else {\r\n throw new Error(`AutoSuggestion for \"${searchTerm}\" was not loaded. Response status: ${response.status}`)\r\n }\r\n });\r\n\r\n from(response)\r\n .pipe(\r\n map((data: string) => JSON.parse(data) || { Results: [] }),\r\n pluck('Results'),\r\n map(results => results.map(r => r.Name)),\r\n tap(results => results.length === 0 && this.hideDialog()),\r\n filter(results => results.length > 0))\r\n .subscribe(\r\n results => {\r\n let resultsHTML = this.createSuggestionHTML(results, searchTerm);\r\n\r\n this.setResultsToCache(searchTerm, resultsHTML)\r\n .updateSuggestion(resultsHTML);\r\n },\r\n err => {\r\n console.warn('Fetch Error', err);\r\n this.hideDialog();\r\n }\r\n );\r\n\r\n return this;\r\n }\r\n\r\n private createSuggestionHTML(results: string[], searchTerm: string): string {\r\n return results\r\n .map(res => `
  • ${res.replace(new RegExp(searchTerm, \"i\"), \"$&\")}
  • `)\r\n .join('');\r\n }\r\n\r\n private insertNodes(resultsHTML: string): SearchAutoSuggestion {\r\n this.suggestionField.innerHTML = resultsHTML;\r\n return this;\r\n }\r\n\r\n private showDialog(): SearchAutoSuggestion {\r\n this.suggestionField.classList.add('active');\r\n return this;\r\n }\r\n\r\n private hideDialog(): boolean {\r\n this.suggestionField.classList.remove('active');\r\n return false;\r\n }\r\n\r\n private isDialogVisible(): boolean {\r\n return this.suggestionField.classList.contains('active');\r\n }\r\n\r\n private setToInputText(value: string): SearchAutoSuggestion {\r\n this.inputFieldText.value = value;\r\n return this;\r\n }\r\n\r\n private setLoader(): SearchAutoSuggestion {\r\n this.suggestionField.innerHTML =\r\n `
    \r\n
    \r\n
    \r\n
    \r\n
    `;\r\n\r\n return this;\r\n }\r\n\r\n private moveSelection(toBottom: boolean): SearchAutoSuggestion {\r\n const suggestionList = this.suggestionField,\r\n suggestions = Array.from((suggestionList.children)),\r\n currentSelected = this.getSelectedElement(suggestionList),\r\n firstElement = suggestionList.firstChild,\r\n lastElement = suggestionList.lastElementChild;\r\n\r\n let nextElementToSelect;\r\n\r\n this.removeSelection(suggestions);\r\n\r\n if (toBottom) {\r\n nextElementToSelect = currentSelected ? currentSelected.nextElementSibling : firstElement;\r\n this.setSelection(nextElementToSelect || firstElement);\r\n } else {\r\n nextElementToSelect = currentSelected ? currentSelected.previousElementSibling : lastElement;\r\n this.setSelection(nextElementToSelect || lastElement);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n private setSelection(element: HTMLElement): SearchAutoSuggestion {\r\n element.classList.add('selected');\r\n return this;\r\n }\r\n\r\n private removeSelection(elements: HTMLElement[]): SearchAutoSuggestion {\r\n elements.forEach(elem => elem.classList.remove('selected'));\r\n return this;\r\n }\r\n\r\n private getSelectedElement(list: HTMLElement): HTMLElement {\r\n return list.querySelector('.selected');\r\n }\r\n\r\n private submitForm(): SearchAutoSuggestion {\r\n this.form.submit();\r\n return this;\r\n }\r\n\r\n private getDefaultOptions(): Optional {\r\n return {\r\n inputWrapperSelector: '.nx-search-input__inner',\r\n inputSelector: '.nx-search-input__text',\r\n suggestionListSelector: '.nx-search__autosuggest',\r\n formSelector: '.nx-header-search-form',\r\n deleteBtnSelector: '.nx-search-input-clear__icon'\r\n };\r\n }\r\n}\r\n\r\n// Hot Module Replacement 2\r\nif (module.hot) {\r\n let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n SearchAutoSuggestion.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n SearchAutoSuggestion.setup(moduleSelector);\r\n });\r\n module.hot.dispose(() => {\r\n nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n });\r\n} else {\r\n SearchAutoSuggestion.setup(moduleSelector);\r\n}","/** PURE_IMPORTS_START _map PURE_IMPORTS_END */\nimport { map } from './map';\nexport function pluck() {\n var properties = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n properties[_i] = arguments[_i];\n }\n var length = properties.length;\n if (length === 0) {\n throw new Error('list of properties cannot be empty.');\n }\n return function (source) { return map(plucker(properties, length))(source); };\n}\nfunction plucker(props, length) {\n var mapper = function (x) {\n var currentProp = x;\n for (var i = 0; i < length; i++) {\n var p = currentProp[props[i]];\n if (typeof p !== 'undefined') {\n currentProp = p;\n }\n else {\n return undefined;\n }\n }\n return currentProp;\n };\n return mapper;\n}\n//# sourceMappingURL=pluck.js.map\n"],"names":["moduleSelector","SearchInput","setup","selector","Array","from","document","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","element","constructor","this","searchClearIcon","querySelector","searchInput","init","addEventListener","event","checkEmpty","clearInput","setValueToInput","value","classList","add","closest","setTimeout","remove","url","window","location","href","name","getAttribute","getParameterByName","replace","results","RegExp","exec","decodeURIComponent","SearchContentPart","options","Object","assign","getDefaultOptions","content","getContent","inputSelector","keyArrowUp","keyArrowDown","filterTarget","$mouseEventStream","targetTag","pipe","target","suggestionItem","SearchAutoSuggestion","ajaxResponseCache","inputField","inputWrapperSelector","inputFieldText","suggestionField","suggestionListSelector","form","formSelector","deleteButton","deleteBtnSelector","setInputEventHandler","$input","inputNode","length","hideDialog","$keyDown","$enterKey","which","$verticalArrowsKey","inputValue","includes","isDialogVisible","initSuggestion","$inputFieldClick","$deleteBtnClick","$onBodyClick","body","$onSuggestionFieldClick","$onSearchResultHover","subscribe","selectedElement","getSelectedElement","textContent","setToInputText","moveSelection","submitForm","removeSelection","children","setSelection","searchTerm","clearSuggestion","setLoader","isInCache","updateSuggestion","getResultsFromCache","fetchSuggestions","setResultsToCache","resultsHTML","insertNodes","showDialog","innerHTML","ajaxUrl","protocol","host","response","fetch","credentials","then","status","json","Error","data","JSON","parse","Results","map","r","Name","createSuggestionHTML","err","console","warn","res","join","contains","toBottom","suggestionList","suggestions","currentSelected","firstElement","firstChild","lastElement","lastElementChild","nextElementToSelect","nextElementSibling","previousElementSibling","elements","elem","list","submit","pluck","properties","_i","arguments","source","props","mapper","x","currentProp","i","p","plucker"],"sourceRoot":""}