1class MgoSearchTitleCustom { 2 selContainer = '.js-search-container' 3 selInput = '.js-search-input' 4 selForm = '.js-search-form' 5 selRemoveBtn = '.js-remove-string' 6 selPopular = '.js-search-popular-queries' 7 selOpenMobile = '.js-open-mobile-search' 8 selFindBtn = '.js-support-search-btn' 9 selTitleResult = '.title-search-result' 10 selTag = '.search-tag' 11 12 constructor(params) { 13 this.bxParams = Object.assign({ 14 AJAX_PAGE: '', 15 CONTAINER_ID: '', 16 INPUT_ID: '', 17 MIN_QUERY_LEN: 1, 18 IS_MOBILE: 'Y', 19 PAGE_ID: 0, 20 IS_SUPPORT_PAGE: 'N' 21 }, params) 22 23 this.init() 24 } 25 26 init() { 27 const self = this 28 29 self.searchForm = document.querySelectorAll(self.selForm) 30 if (!self.searchForm) { 31 return 32 } 33 34 self.bxSearch = new JCTitleSearchCustom(self.bxParams) 35 36 document.addEventListener('click', (e) => { 37 let cont = e.target.closest(self.selOpenMobile + ', ' + self.selContainer) 38 if (!cont) { 39 document.querySelector(self.selOpenMobile).classList.remove('active') 40 document.querySelector('.header .search-form').classList.remove('active') 41 } 42 }) 43 44 let searchOpenMobile = document.querySelector(self.selOpenMobile) 45 if (searchOpenMobile) { 46 searchOpenMobile.addEventListener('click', () => { 47 self.eventSearchOpenMobile() 48 }) 49 50 const eventShowPopular = () => { 51 let element = document.querySelector(self.selPopular) 52 if (element && element.style.display === 'none') { 53 element.style.display = '' 54 } 55 } 56 searchOpenMobile.addEventListener('click', eventShowPopular) 57 58 let headerSearch = document.getElementById('header-search-input') 59 if (headerSearch) { 60 headerSearch.addEventListener('input', () => { 61 [...document.querySelectorAll(self.selPopular)].forEach((item) => { 62 if (item.style.display !== 'none') { 63 item.style.display = 'none' 64 } 65 }) 66 }) 67 68 searchOpenMobile.removeEventListener('click', eventShowPopular) 69 } 70 } 71 72 self.searchForm.forEach((form) => { 73 let searchInput = form.querySelector(self.selInput) 74 if (!searchInput) { 75 return 76 } 77 78 [...form.parentNode.parentNode.querySelectorAll(self.selTag)].forEach((item) => { 79 item.addEventListener('click', () => { 80 searchInput.value = item.innerText 81 }) 82 }); 83 84 [...form.parentNode.parentNode.querySelectorAll(self.selRemoveBtn)].forEach((item) => { 85 item.addEventListener('click', () => { 86 searchInput.value = '' 87 searchInput.focus() 88 self.checkSearchString(searchInput) 89 }) 90 }) 91 92 self.eventInputClick(searchInput) 93 94 searchInput.addEventListener('click', (event) => { 95 self.eventInputClick(event.target) 96 }) 97 searchInput.addEventListener('keyup', (event) => { 98 self.eventInputClick(event.target) 99 }) 100 101 let findBtn = form.querySelector(self.selFindBtn) 102 if (findBtn) { 103 findBtn.addEventListener('click', () => { 104 let targetBlank = findBtn.attributes['data-target'] !== undefined ? findBtn.attributes['data-target'].value : '' 105 if (targetBlank === '_blank') { 106 window.open(findBtn.attributes['data-link'].value, targetBlank) 107 return false 108 } else { 109 findBtn.disabled = true 110 form.submit() 111 } 112 }) 113 } 114 }) 115 } 116 117 eventSearchOpenMobile() { 118 const self = this 119 120 let titleResult = document.querySelector(self.selTitleResult) 121 if (!titleResult) { 122 return 123 } 124 125 titleResult.style.visibility = 'hidden' 126 127 setTimeout(function () {
128 self.bxSearch.adjustResultNode() 129 titleResult.style.visibility = 'visible' 130 }, 200) 131 } 132 133 eventInputClick(item) { 134 const self = this 135 136 let form = item.closest(self.selForm) 137 138 let findBtn = form.querySelector(self.selFindBtn) 139 if (!findBtn) { 140 return 141 } 142 143 let dataSearchIb = findBtn.attributes['data-search-ib'] !== undefined ? findBtn.attributes['data-search-ib'].value : '' 144 let dataSearchUtm = findBtn.attributes['data-search-utm'] !== undefined ? findBtn.attributes['data-search-utm'].value : '' 145 let dataSearchPageId = findBtn.attributes['data-search-page-id'] !== undefined ? findBtn.attributes['data-search-page-id'].value : '' 146 147 findBtn.attributes['data-link'].value = '/search/?q=' + item.value + dataSearchIb + dataSearchUtm + dataSearchPageId 148 149 self.checkSearchString(item) 150 } 151 152 checkSearchString(item) { 153 const self = this 154 155 if (item.value) { 156 item.closest(self.selContainer).classList.add('process') 157 } else { 158 item.closest(self.selContainer).classList.remove('process') 159 } 160 } 161}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.