PageSourceSearch

https://www.mango-office.ru/local/components/bitrix/search.title.c…/templates/visual/script.js?17906266295538

js mango-office.ru collected 2026-10-01 12:08:48 UTC 5,538 bytes, 161 lines download raw bytes

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.