PageSourceSearch

https://kaliningradkipka.ru/local/components/tichiy/uni.forms/templates/.default/script.min.js?178713846813215

js kaliningradkipka.ru collected 2026-10-08 10:14:48 UTC 13,215 bytes, 316 lines download raw bytes

1/* Собран из script.js 2026-08-19. Прежняя min-версия отстала от исходника:
2 в ней не было обработки чекбокса согласия (pd_consent), из-за чего кнопка
3 «Отправить» оставалась заблокированной там, где подключается .min-версия.
4 Сборщика в проекте нет — файл держим синхронным со script.js. */
5var changeCity = function (text){
6    aHelper().setCookie('GEO_CITY', text, 365, 'new.naparnik.expert')
7
8    const jsCities = [...document.querySelectorAll('.header--loc span')];
9    for (const jsCitY of jsCities) {
10        jsCitY.innerHTML = text
11    }
12
13    AT.POPUP.tools.fadeOut()
14    AT.POPUP.tools.reloadPage(0)
15}
16
17var sendAuth = function (data){
18    AT.POPUP.ajax.send(data)
19        // выполнится, когда промис завершится, независимо от того, успешно или нет
20        //.finally(() => console.log("Промис завершён"))
21        // таким образом, индикатор загрузки всегда останавливается, прежде чем мы продолжим
22        .then(
23            result => {
24                BX.closeWait()
25
26                console.log(result)
27
28                if(result.NUMBER === 1){
29                    let parent = data.form.closest('.d--form')
30
31                    parent.querySelector('.d--title').innerHTML = 'Введите код из смс'
32
33                    data.form.querySelector('.d--auth-phone').innerHTML = data.data.phone
34                    data.form.classList.add('--sended')
35
36                    initCaptcha(data.form, 'sendSMS')
37
38                    //Запуск таймера
39                    let authTimer = data.form.querySelector('.d--auth-timer span')
40                    let seconds = BX.message('SMS_WAIT_TIME')
41
42                    let atimer = setInterval(() => {
43                        if(seconds < 1) {
44                            data.form.querySelector('.d--auth-timer').innerHTML = '<div class="d--auth-phone-new">Отправить новый код</div>'
45                            clearInterval(atimer);
46                        }
47
48                        if(!!authTimer)
49                            authTimer.textContent = seconds;
50
51                        seconds -= 1;
52                    }, 999);
53
54                    //AT.POPUP.tools.load('user-delete-thanks')
55                }else if(result.NUMBER === 3){
56                    AT.POPUP.tools.load('reg')
57                }else if(result.NUMBER === 5){
58                    AT.POPUP.tools.load('auth')
59                }else{
60                    //AT.POPUP.tools.load('user-delete-error')
61                }
62            },
63            err => {
64                BX.closeWait()
65
66                console.log(err)
67
68                AT.POPUP.tools.load('user-delete-error')
69            }
70        )
71        //Ловим ошибки
72        .catch(err => console.log(err));
73}
74
75var Authorize = function (data){
76    AT.POPUP.ajax.send(data)
77        // выполнится, когда промис завершится, независимо от того, успешно или нет
78        //.finally(() => console.log("Промис завершён"))
79        // таким образом, индикатор загрузки всегда останавливается, прежде чем мы продолжим
80        .then(
81            result => {
82                BX.closeWait()
83
84                console.log(result)
85
86                if(result.NUMBER === 1){
87                    AT.POPUP.tools.load('auth-thanks')
88                }else if(result.NUMBER === 3){
89                    AT.POPUP.tools.load('reg')
90                }else if(result.NUMBER === 2){
91                    AT.POPUP.tools.load('auth-error-code')
92                }else if(result.NUMBER === 4){
93                    AT.POPUP.tools.load('auth-error-attamps')
94                }else{
95                    AT.POPUP.tools.load('auth-error')
96                }
97            },
98            err => {
99                BX.closeWait()
100
101                console.log(err)
102
103                AT.POPUP.tools.load('user-delete-error')
104            }
105        )
106        //Ловим ошибки
107        .catch(err => console.log(err));
108}
109
110var sendRegister = function (data){
111    AT.POPUP.ajax.send(data)
112        // выполнится, когда промис завершится, независимо от того, успешно или нет
113        //.finally(() => console.log("Промис завершён"))
114        // таким образом, индикатор загрузки всегда останавливается, прежде чем мы продолжим
115        .then(
116            result => {
117                BX.closeWait()
118
119                console.log(result)
120
121                if(result.NUMBER === 1){
122                    AT.POPUP.tools.load('reg-thanks')
123                }else if(result.NUMBER === 3){
124                    AT.POPUP.tools.load('reg')
125                }else if(result.NUMBER === 2){
126                    AT.POPUP.tools.load('auth-error-code')
127                }else if(result.NUMBER === 4){
128                    AT.POPUP.tools.load('auth-error-attamps')
129                }else{
130                    AT.POPUP.tools.load('reg-error')
131                }
132            },
133            err => {
134                BX.closeWait()
135
136                console.log(err)
137
138                AT.POPUP.tools.load('user-delete-error')
139            }
140        )
141        //Ловим ошибки
142        .catch(err => console.log(err));
143}
144
145document.addEventListener("DOMContentLoaded", function () {
146    const cities = [...document.querySelectorAll('.location--city')];
147    for (const city of cities) {
148        city.addEventListener('click', function (e) {
149            changeCity(city.textContent)
150        })
151    }
152
153    document.addEventListener('input', function (e) {
154        if(e.target.classList.contains('d--SMS')){
155            let parent = e.target.closest('form'),
156                but = parent.querySelector('.d--but')
157
158            if(e.target.value.length === 4){
159                but.removeAttribute('disabled')
160            }else{
161                but.setAttribute('disabled','disabled')
162            }
163        }
164    })
165
166    document.addEventListener('change', function (e) {
167        //Отмечаем соглашение в политикой конфиденциальности
168        if(e.target.classList.contains('d--policy')){
169            let parent = e.target.closest('form'),
170                but = parent.querySelector('.d--but')
171
172            if(e.target.checked && AT.POPUP.check.validate(parent)){
173                but.removeAttribute('disabled')
174            }else{
175                but.setAttribute('disabled','disabled')
176            }
177        }
178
179        let el = e.target.closest('#image-upload-rev');
180        if(!!el) {
181            let parent = el.closest('form')
182
183            if(!!parent){
184                //Ставим ограничение на кол-во файлов
185                let inputError = parent.querySelector('.input__file-error')
186                if (el.files.length > 3) {
187                    el.value = '';
188                    inputError.innerHTML = 'Вы превысыли лимит фотографий. Пожалуйста, добавьте не более 3'
189                    inputError.classList.add('--show')
190                    return
191                }else{
192                    inputError.innerHTML = ''
193                    inputError.classList.remove('--show')
194                }
195
196                //Делаем галерею из добавленных фото
197                const curFiles = parent.querySelector('#image-upload-rev').files;
198                const gallery = parent.querySelector('#gallery');
199                gallery.innerHTML = ''; // очищаем галерею от прежних миниатюр
200
201                for(const file of curFiles) {
202                    const imageObjectUrl = URL.createObjectURL(file);
203
204                    const divElement = document.createElement('div');
205                    divElement.classList.add('review--popup-img')
206
207                    const imgElement = document.createElement('img');
208                    imgElement.src = imageObjectUrl; // каждому изображению свойственно иметь свой URL
209
210                    divElement.appendChild(imgElement);
211
212                    gallery.appendChild(divElement); // галерея пополняется с каждой новой загрузкой 🖼️
213                }
214
215                let label = el.nextElementSibling,
216                    labelVal = label.querySelector('.field__file-fake').innerText;
217
218                let countFiles = '';
219                if (this.files && this.files.length >= 1)
220                    countFiles = this.files.length;
221
222                if (countFiles)
223                    label.querySelector('.field__file-fake').innerText = 'Выбрано файлов: ' + countFiles;
224                else
225                    label.querySelector('.field__file-fake').innerText = labelVal;
226            }
227        }
228    })
229
230    document.addEventListener('click', function (e) {
231        var target = e.target
232
233        //Обратный звонок
234        var el = target.closest('.do--locations .bx-ui-sls-variant')
235        if(!!el){
236            changeCity(el.querySelector('.newFilLCode').getAttribute('data-name'))
237        }
238
239        // region Напишите нам
240        var el = target.closest('.js--message:not(.--disabled)')
241        if(!!el){
242            e.stopPropagation()
243            e.preventDefault()
244
245            let parent      = el.closest('form'),
246                phone       = parent.querySelector('input.d--PHONE'),
247                name        = parent.querySelector('input.d--FIO'),
248                mail        = parent.querySelector('input.d--MAIL'),
249                message     = parent.querySelector('textarea.d--MESSAGE'),
250                consent     = parent.querySelector('#pd_consent')
251
252            // 152-ФЗ: без отдельного согласия отправка невозможна
253            if(consent && !consent.checked){
254                return
255            }
256
257            if(AT.POPUP.check.validate(parent)){
258                el.classList.add('--disabled')
259
260                let data = {
261                    data: {
262                        sessid:         BX.bitrix_sessid(),
263                        phone:          phone.value,
264                        name:           name.value,
265                        mail:           mail.value,
266                        message:        message.value,
267                        ip:             parent.querySelector('[name="ip"]').value,
268                        captcha:        parent.querySelector('#recaptchaResponse').value,
269                        pd_consent:     consent && consent.checked ? '1' : '',
270                        page_url:       window.location.href,
271                    },
272                }
273
274                data.url = '/api/form/message/'
275
276                BX.showWait();
277
278                //new Promise(resolve => aHelper().sendRequest(data));
279
280                AT.POPUP.ajax.send(data)
281                    // выполнится, когда промис завершится, независимо от того, успешно или нет
282                    //.finally(() => console.log("Промис завершён"))
283                    // таким образом, индикатор загрузки всегда останавливается, прежде чем мы продолжим
284                    .then(
285                        result => {
286                            BX.closeWait()
287
288                            AT.POPUP.tools.load('thanks')
289                        },
290                        err => {
291                            BX.closeWait()
292                            console.log(err)
293
294                            AT.POPUP.tools.load('error')
295                        }
296                    )
297                    //Ловим ошибки
298                    .catch(err => console.log(err));
299            }
300        }
301        // endregion
302    })
303
304    // 152-ФЗ: блокировка кнопки отправки формы «Напишите нам» до отметки согласия
305    document.addEventListener('change', function (e) {
306        var cb = e.target
307        if(cb && cb.id === 'pd_consent'){
308            var form = cb.closest('form')
309            if(!form) return
310            var submit = form.querySelector('.js--message')
311            if(!submit) return
312            if(cb.checked) submit.classList.remove('--disabled')
313            else submit.classList.add('--disabled')
314        }
315    })
316})

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.