PageSourceSearch

https://www.art-system.ru/bitrix/cache/js/s1/art-system/template_c…e8edd3bfb364075dcd507_v1.js?178515699616646

js art-system.ru collected 2026-09-24 10:55:51 UTC 16,646 bytes, 192 lines download raw bytes

1
2; /* Start:"a:4:{s:4:"full";s:97:"/bitrix/templates/art-system/components/bitrix/menu/horizontal_multilevel/script.js?1445350635469";s:6:"source";s:83:"/bitrix/templates/art-system/components/bitrix/menu/horizontal_multilevel/script.js";s:3:"min";s:0:"";s:3:"map";s:0:"";}"*/
3var jshover = function()
4{
5	var menuDiv = document.getElementById("horizontal-multilevel-menu")
6	if (!menuDiv)
7		return;
8
9	var sfEls = menuDiv.getElementsByTagName("li");
10	for (var i=0; i<sfEls.length; i++) 
11	{
12		sfEls[i].onmouseover=function()
13		{
14			this.className+=" jshover";
15		}
16		sfEls[i].onmouseout=function() 
17		{
18			this.className=this.className.replace(new RegExp(" jshover\\b"), "");
19		}
20	}
21}
22
23if (window.attachEvent) 
24	window.attachEvent("onload", jshover);
25/* End */
26;
27; /* Start:"a:4:{s:4:"full";s:67:"/bitrix/components/bitrix/search.title/script.min.js?17803301016573";s:6:"source";s:48:"/bitrix/components/bitrix/search.title/script.js";s:3:"min";s:52:"/bitrix/components/bitrix/search.title/script.min.js";s:3:"map";s:52:"/bitrix/components/bitrix/search.title/script.map.js";}"*/
28function JCTitleSearch(t){var e=this;this.arParams={AJAX_PAGE:BX.util.htmlspecialcharsback(t.AJAX_PAGE),CONTAINER_ID:t.CONTAINER_ID,INPUT_ID:t.INPUT_ID,MIN_QUERY_LEN:parseInt(t.MIN_QUERY_LEN,10)};if(t.WAIT_IMAGE){this.arParams.WAIT_IMAGE=t.WAIT_IMAGE}if(this.arParams.MIN_QUERY_LEN<=0){this.arParams.MIN_QUERY_LEN=1}this.cache=[];this.cache_key=null;this.startText="";this.running=false;this.runningCall=false;this.currentRow=-1;this.RESULT=null;this.CONTAINER=null;this.INPUT=null;this.WAIT=null;this.ShowResult=function(t){if(BX.type.isString(t)){e.RESULT.innerHTML=t}e.RESULT.style.display=e.RESULT.innerHTML===""?"none":"block";var s=e.adjustResultNode();var i=null;var n=null;var l=BX.findChild(e.RESULT,{tag:"table",class:"title-search-result"},true);if(l){n=BX.findChild(l,{tag:"th"},true)}if(n){var r=BX.pos(l);r.width=r.right-r.left;var a=BX.pos(n);a.width=a.right-a.left;n.style.width=a.width+"px";e.RESULT.style.width=s.width+a.width+"px";e.RESULT.style.left=s.left-a.width-1+"px";if(r.width-a.width>s.width){e.RESULT.style.width=s.width+a.width-1+"px"}r=BX.pos(l);i=BX.pos(e.RESULT);if(i.right>r.right){e.RESULT.style.width=r.right-r.left+"px"}}var o=false;if(l){o=BX.findChild(e.RESULT,{class:"title-search-fader"},true)}if(o&&n){i=BX.pos(e.RESULT);o.style.left=i.right-i.left-18+"px";o.style.width=18+"px";o.style.top=0+"px";o.style.height=i.bottom-i.top+"px";o.style.display="block"}};this.onKeyPress=function(t){var s=BX.findChild(e.RESULT,{tag:"table",class:"title-search-result"},true);if(!s){return false}var i=0;var n=s.rows.length;switch(t){case 27:e.RESULT.style.display="none";e.currentRow=-1;e.UnSelectAll();return true;case 40:if(e.RESULT.style.display=="none"){e.RESULT.style.display="block"}var l=-1;for(i=0;i<n;i++){if(!BX.findChild(s.rows[i],{class:"title-search-separator"},true)){if(l==-1){l=i}if(e.currentRow<i){e.currentRow=i;break}else if(s.rows[i].className=="title-search-selected"){s.rows[i].className=""}}}if(i==n&&e.currentRow!=i){e.currentRow=l}s.rows[e.currentRow].className="title-search-selected";return true;case 38:if(e.RESULT.style.display=="none"){e.RESULT.style.display="block"}var r=-1;for(i=n-1;i>=0;i--){if(!BX.findChild(s.rows[i],{class:"title-search-separator"},true)){if(r==-1){r=i}if(e.currentRow>i){e.currentRow=i;break}else if(s.rows[i].className=="title-search-selected"){s.rows[i].className=""}}}if(i<0&&e.currentRow!=i){e.currentRow=r}s.rows[e.currentRow].className="title-search-selected";return true;case 13:if(e.RESULT.style.display=="block"){for(i=0;i<n;i++){if(e.currentRow==i&&!BX.findChild(s.rows[i],{class:"title-search-separator"},true)){var a=BX.findChild(s.rows[i],{tag:"a"},true);if(a){window.location=a.href;return true}}}}return false;default:break}return false};this.onTimeout=function(){e.onChange((function(){setTimeout(e.onTimeout,500)}))};this.onChange=function(t){if(e.running){e.runningCall=true;return}e.running=true;if(e.INPUT.value!=e.oldValue&&e.INPUT.value!=e.startText){e.oldValue=e.INPUT.value;if(e.INPUT.value.length>
28=e.arParams.MIN_QUERY_LEN){e.cache_key=e.arParams.INPUT_ID+"|"+e.INPUT.value;if(e.cache[e.cache_key]==null){if(e.WAIT){var s=BX.pos(e.INPUT);var i=s.bottom-s.top-2;e.WAIT.style.top=s.top+1+"px";e.WAIT.style.height=i+"px";e.WAIT.style.width=i+"px";e.WAIT.style.left=s.right-i+2+"px";e.WAIT.style.display="block"}BX.ajax.post(e.arParams.AJAX_PAGE,{ajax_call:"y",INPUT_ID:e.arParams.INPUT_ID,q:e.INPUT.value,l:e.arParams.MIN_QUERY_LEN},(function(s){e.cache[e.cache_key]=s;e.ShowResult(s);e.currentRow=-1;e.EnableMouseEvents();if(e.WAIT){e.WAIT.style.display="none"}if(!!t){t()}e.running=false;if(e.runningCall){e.runningCall=false;e.onChange()}}));return}e.ShowResult(e.cache[e.cache_key]);e.currentRow=-1;e.EnableMouseEvents()}else{e.RESULT.style.display="none";e.currentRow=-1;e.UnSelectAll()}}if(!!t){t()}e.running=false};this.onScroll=function(){if(BX.type.isElementNode(e.RESULT)&&e.RESULT.style.display!=="none"&&e.RESULT.innerHTML!==""){e.adjustResultNode()}};this.UnSelectAll=function(){var t=BX.findChild(e.RESULT,{tag:"table",class:"title-search-result"},true);if(t){var s=t.rows.length;for(var i=0;i<s;i++){t.rows[i].className=""}}};this.EnableMouseEvents=function(){var t=BX.findChild(e.RESULT,{tag:"table",class:"title-search-result"},true);if(t){var s=t.rows.length;for(var i=0;i<s;i++){if(!BX.findChild(t.rows[i],{class:"title-search-separator"},true)){t.rows[i].id="row_"+i;t.rows[i].onmouseover=function(t){if(e.currentRow!=this.id.substr(4)){e.UnSelectAll();this.className="title-search-selected";e.currentRow=this.id.substr(4)}};t.rows[i].onmouseout=function(t){this.className="";e.currentRow=-1}}}}};this.onFocusLost=function(t){setTimeout((function(){e.RESULT.style.display="none"}),250)};this.onFocusGain=function(){if(e.RESULT.innerHTML.length>0){e.ShowResult()}};this.onKeyDown=function(t){if(!t){t=window.event}if(e.RESULT.style.display=="block"&&e.onKeyPress(t.keyCode)){return BX.PreventDefault(t)}};this.adjustResultNode=function(){if(!(BX.type.isElementNode(e.RESULT)&&BX.type.isElementNode(e.CONTAINER))){return{top:0,right:0,bottom:0,left:0,width:0,height:0}}var t=BX.pos(e.CONTAINER);e.RESULT.style.position="absolute";e.RESULT.style.top=t.bottom+2+"px";e.RESULT.style.left=t.left+"px";e.RESULT.style.width=t.width+"px";return t};this.onContainerLayoutChange=function(){if(BX.type.isElementNode(e.RESULT)&&e.RESULT.style.display!=="none"&&e.RESULT.innerHTML!==""){e.adjustResultNode()}};this.Init=function(){this.CONTAINER=document.getElementById(this.arParams.CONTAINER_ID);BX.addCustomEvent(this.CONTAINER,"OnNodeLayoutChange",this.onContainerLayoutChange);this.RESULT=document.body.appendChild(document.createElement("DIV"));this.RESULT.className="title-search-result";this.INPUT=document.getElementById(this.arParams.INPUT_ID);this.startText=this.INPUT.value;this.oldValue=this.INPUT.value;BX.bind(this.INPUT,"focus",(function(){e.onFocusGain()}));BX.bind(this.INPUT,"blur",(function(){e.onFocusLost()}));this.INPUT.onkeydown=this.onKeyDown;if(this.arParams.WAIT_IMAGE){this.WAIT=document.body.appendChild(document.createElement("DIV"));this.WAIT.style.backgroundImage="url('"+this.arParams.WAIT_IMAGE+"')";if(!BX.browser.IsIE()){this.WAIT.style.backgroundRepeat="none"}this.WAIT.style.display="none";this.WAIT.style.position="absolute";this.WAIT.style.zIndex="1100"}BX.bind(this.INPUT,"bxchange",(function(){e.onChange()}));var t=BX.findParent(this.CONTAINER,BX.is_fixed);if(BX.type.isElementNode(t)){BX.bind(window,"scroll",BX.throttle(this.onScroll,100,this))}};BX.ready((function(){e.Init(t)}))}
29/* End */
30;
31; /* Start:"a:4:{s:4:"full";s:52:"/bitrix/templates/art-system/js/ym.js?17836831618512";s:6:"source";s:37:"/bitrix/templates/art-system/js/ym.js";s:3:"min";s:0:"";s:3:"map";s:0:"";}"*/
32BX.ready(function() {
33    console.log('[Метрика] Скрипт ym.js (AJAX-версия) успешно запущен v3');
34
35    const counterId = 27418934;
36
37    // Функция отправки цели в Метрику
38    function sendGoalToMetric(formId, pageUrl) {
39        let goalId = '';
40        const fId = parseInt(formId);
41        const pWord = pageUrl || '';
42
43        switch(fId) {
44            case 1:
45                goalId = 'knopka';
46                break;
47            case 2:
48                goalId = 'otpravit';
49                break;
50            case 3:
51                goalId = 'one_click_order';
52                break;
53            case 4:
54                goalId = 'turnkey-sentForm';
55                break;
56            case 5:
57                goalId = 'question-sentForm';
58                break;
59            case 8:
60                goalId = 'question';
61                break;
62            case 10:
63                goalId = 'trade-in-sentForm';
64                break;
65        }
66
67        if (goalId) {
68            if (typeof ym !== 'undefined') {
69                ym(counterId, 'reachGoal', goalId);
70                console.log(`%c[Метрика] УСПЕХ! Цель "${goalId}" отправлена в счетчик ${counterId}`, 'color: green; font-weight: bold;');
71            } else {
72                console.error(`[Метрика] Ошибка: Функция ym() не найдена. Цель "${goalId}" не отправлена!`);
73            }
74        } else {
75            console.warn(`[Метрика] Предупреждение: Для формы №${fId} со словом "${pWord}" не найдено соответствие в switch()`);
76        }
77    }
78
79    let lastClickedForm = null;
80
81    // 1. Фиксируем клик по кнопке отправки
82    document.addEventListener('click', function(e) {
83        if (e.target && (e.target.matches('input[type="submit"]') || e.target.matches('button[type="submit"]') || e.target.matches('.btn-submit'))) {
84            let formTag = e.target.closest('form');
85            if (formTag) {
86                let formIdInput = formTag.querySelector('input[name="WEB_FORM_ID"]');
87                let pageUrlInput = formTag.querySelector('input[name="PAGE_URL"]') || formTag.querySelector('[name*="PAGE_URL"]');
88                
89                // Находим родительский AJAX-контейнер Битрикса (обычно у него ID начинается на comp_)
90                let ajaxContainer = formTag.closest('[id^="comp_"]') || formTag.parentElement;
91
92                lastClickedForm = {
93                    id: formIdInput ? parseInt(formIdInput.value) : null,
94                    pageUrl: pageUrlInput ? pageUrlInput.value.trim() : '',
95                    formNode: formTag,
96                    containerNode: ajaxContainer,
97                    containerId: ajaxContainer ? ajaxContainer.id : null
98                };
99                console.log('[Метрика] Клик зафиксирован. Ожидаем ответ сервера...');
100            }
101        }
102    });
103
104    // 2. Ловим завершение AJAX-запроса формы
105    BX.addCustomEvent('onAjaxSuccess', function(responseData, xhrConfig) {
106        if (lastClickedForm && lastClickedForm.id) {
107            
108            // Запоминаем данные, чтобы использовать их внутри setTimeout
109            const savedForm = lastClickedForm;
110            lastClickedForm = null; // Сразу очищаем, чтобы не плодить дубли
111
112            // Даем Битриксу 400мс на то, чтобы перерисовать HTML на странице
113            setTimeout(function() {
114                console.log('[Метрика] Анализируем AJAX-контейнер формы после обновления...');
115                
116                try {
117                    // Ищем контейнер по ID или по сохраненной ссылке на ноду
118                    let targetArea = null;
119                    if (savedForm.containerId) {
120                        targetArea = document.getElementById(savedForm.containerId);
121                    }
122                    if (!targetArea) {
123                        targetArea = savedForm.containerNode;
124                    }
125                    
126                    // Безопасная проверка: существует ли вообще целевая область в DOM
127                    if (!targetArea || !document.body.contains(targetArea)) {
128                        console.log('[Метрика] Контейнер формы исчез из DOM или не найден. Обычно это означает успешную AJAX-замену контента!');
129                        sendGoalToMetric(savedForm.id, savedForm.pageUrl);
130                        return;
131                    }
132
133                    // Извлекаем текстовое содержимое
134                    let htmlContent = targetArea.innerHTML ? targetArea.innerHTML : '';
135                    let textContent = targetArea.innerText ? targetArea.innerText : '';
136
137                    // Проверка 1: Есть ли тег формы внутри контейнера
138                    let hasFormTag = targetArea.getElementsByTagName('form').length > 0;
139                    
140                    // Проверка 2: Ищем маркеры ошибок в тексте (приводим к нижнему регистру для надежности)
141                    let textLower = textContent.toLowerCase();
142                    let hasErrorText = 
143                        textLower.includes('заполните') || 
144                        textLower.includes('ошибка') || 
145                        textLower.includes('неверно') ||
146                        textLower.includes('обязательн') ||
147                        htmlContent.includes('errortext') ||
148                        htmlContent.includes('form-error') ||
149                        targetArea.querySelector('.error, .invalid, [aria-invalid="true"]') !== null;
150
151                    console.log(`[Метрика] Логические маркеры: Наличие формы = ${hasFormTag}, Наличие ошибок = ${hasErrorText}`);
152
153                    // Логика принятия решения
154                    if (!hasFormTag) {
155                        console.log('[Метрика] Форма полностью пропала из контейнера. УСПЕХ.');
156                        sendGoalToMetric(savedForm.id, savedForm.pageUrl);
157                    } 
158                    else if (hasErrorText) {
159                        console.warn('[Метрика] В контейнере формы обнаружены ошибки валидации. Цель заблокирована.');
160                    } 
161                    else {
162                        // Если форма осталась, но явных ошибок нет — ищем слова успеха
163                        let hasSuccessText = 
164                            textLower.includes('спасибо') || 
165                            textLower.includes('принята') || 
166                            textLower.includes('успешно') ||
167                            htmlContent.includes('formresult=addok');
168
169                        if (hasSuccessText) {
170                            console.log('[Метрика] В контейнере найден текст успешной отправки.');
171                            sendGoalToMetric(savedForm.id, savedForm.pageUrl);
172                        } else {
173                            console.warn('[Метрика] Форма на месте, ошибок нет, но и маркеры успеха не найдены. Скорее всего, это сторонний AJAX-запрос.');
174                        }
175                    }
176
177                } catch (error) {
178                    // Если внутри блока try произойдет любая ошибка — мы увидим её здесь, а не пустую консоль
179                    console.error('[Метрика] Критическая ошибка во время анализа контейнера:', error);
180                }
181
182            }, 400);
183        }
184    });
185});
186
187/* End */
188;; /* /bitrix/templates/art-system/components/bitrix/menu/horizontal_multilevel/script.js?1445350635469*/
189; /* /bitrix/components/bitrix/search.title/script.min.js?17803301016573*/
190; /* /bitrix/templates/art-system/js/ym.js?17836831618512*/
191
192//# sourceMappingURL=template_c6727ca8ad6e8edd3bfb364075dcd507.map.js

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.