PageSourceSearch

https://oncokdc.ru/bitrix/templates/beauty_modern_s1/js/main.js?173729386912358

js oncokdc.ru collected 2026-10-04 00:06:56 UTC 12,358 bytes, 389 lines download raw bytes

1// Определяем переменную для экономии памяти.
2var $doc = $(document);
3
4$doc
5	.on('input keyup', '.jq-selectbox__search input', function(e) {
6		// Обработка клика и тача по родительским пунктам меню
7		if (e.type == 'input') {
8			// $(this).off('keyup');
9		}
10		$(this).closest('ul').perfectScrollbar('update');
11
12	})
13	.on('click', '.services-list-header', function(event) {
14		// Обработка клика по заголовку в списках услуг
15		event.preventDefault();
16		$(this).toggleClass('active');
17	})
18
19	.on('click', '.tabs-switcher:not(.active):not(.disabled)', function(e) {
20		// Табы с генерацией события
21		var $thisTab = $(this),
22			$tabContent = $thisTab.closest('.tabs').find('.tabs-item'),
23			$thisTabContent = $tabContent.eq($thisTab.index());
24
25		$thisTab
26			.addClass('active')
27			.siblings().removeClass('active');
28
29		$tabContent.removeClass('active');
30		$thisTabContent.addClass('active');
31		
32		$thisTab.trigger('tabClick', $thisTabContent);
33	})
34	.on('tabClick', function(e, data) {
35		/**
36		 * Отлавливаем событие клика по табу
37		 * Может пригодиться для обработки контента открытого таба
38		 */
39		// console.log(e, data);
40	})
41	.on('click', '.show-collapsed-days', function(event) {
42		event.preventDefault();
43		var $this = $(this),
44			$data = $this.data(),
45			$week = $('[data-week-id="' + $data.expandId + '"]');
46
47		if ($this.hasClass('expanded')) {
48			$week.addClass('collapsed');
49			$this.text($data.collapsedText).removeClass('expanded');
50		} else {
51			$week.removeClass('collapsed');
52			$this.text($data.expandedText).addClass('expanded');
53		}
54		$.fn.matchHeight._update();
55	})
56	.on('change', '.styler-steps', function() {
57		var url = $(this).find(":selected").data('url');
58		if (url) {
59			location = url;
60		}
61		return false;
62	})
63	.on('click', '.main-expand-btn', function(e) {
64		e.preventDefault();
65		var $this = $(this);
66
67		$this.parent().hide().parent().find('.main-expand-wrapper').addClass('expanded');
68	})
69	.on('change', '[data-checkbox-toggle-block]', function() {
70		var $this = $(this),
71			$target = $($this.data('checkboxToggleBlock'));
72		if ($this.prop('checked')) {
73			$target.removeClass('hide');
74		} else {
75			$target.addClass('hide');
76		}
77	})
78	.on('click', '.btn-schedule, .link-schedule', function (e) {
79		// Переменная вынесена сюда для удобства поддержки, 
80		// на скорость работы это влияет меньше, чем на удобство поддержки.
81		var template = document.getElementById('schedule-template').innerHTML || '';
82
83		if (template) {
84			e.preventDefault();
85
86			var $this = $(this),
87				$thisData = $this.data(),
88				time = $this.text();
89			if ($this.hasClass('link-schedule')) {
90				time = $this.parent().prev('.timeTop').text() + ' - ' + $this.parent().next('.timeBottom').text();
91			}
92
93			var show = (cnJsTemplater(template, {
94				link: $this.prop('href'),
95				time: time,
96				data: $thisData
97			}));
98
99			$.magnificPopup.open({
100				items: {
101					src: show
102				},
103				type: 'inline'
104			});
105		}
106
107	})
108	.on('focusin touchend', 'ul.root > li > a', function(e) {
109		// Обработка выпадающего меню в шапке
110		var $this = $(this),
111			$parent = $this.closest('li'),
112			$second = $this.next('ul');
113		if (e.type == 'focusin') {
114			// Убираем у внутренних ссылок в меню tabindex
115			$('li.parent ul a').prop('tabindex', false);
116	
117			// Добавляем tabindex для внутренних ссылок в текущем пункте меню
118			$second.find('a').prop('tabindex', 1);
119
120			if ($parent.hasClass('tabbed')) {
121				$parent.removeClass('tabbed');
122			} else {
123				$parent.addClass('tabbed').siblings().removeClass('tabbed');
124			}
125		};
126	})
127	.on('focusin mouseenter', 'ul.root > li > a', function(e) {
128		var $this = $(this),
129			$ul = $this.next('ul'),
130			thisPos = $this.position().top + 37;
131
132		$ul.css('top', thisPos);
133	})
134	.on('input keyup', '.search-in-page-input', function () {
135		var $this = $(this);
136
137		if ($this.val() != '' && !$this.hasClass('not-empty')) {
138			$this.addClass('not-empty');
139		} 
140		if($this.val() == '') {
141			$this.removeClass('not-empty');
142		}
143	})
144	.on('click', '.search-in-page-reset', function() {
145		$('.search-in-page-input').removeClass('not-empty').focus();
146	})
147
148	;
149
150
151
152if (window.frameCacheVars !== undefined) {
153	// РљРѕРјРїРѕР·РёС‚
154	BX.addCustomEvent('onFrameDataReceived', function (json) {
155		mainJsFile();
156	});
157}
158else {
159	// Обычный режим
160	jQuery(document).ready(function ($) {
161		mainJsFile();
162	});
163}
164
165// Основной js-код, выполняемый при загрузке страницы
166function mainJsFile() {
167	
168	// Стилизация селектов
169	$('.styler').styler({
170		selectSearch: true,
171		selectSearchLimit: 20,
172		singleSelectzIndex: 1000,
173		onSelectOpened: function() {
174			// к открытому применяем плагин стилизации скроллбара
175			$(this).find('ul').perfectScrollbar();
176			// console.log('onSelectOpened', $(this).find('ul').html());
177		},
178		onFormStyled: function () {
179			$('.jq-selectbox').addClass('opacity-one');
180		}
181	});
182
183	// Одинаковая высота блоков
184	$('.equal').matchHeight();
185
186	// Слайдер на главной странице
187	$('.big-slider')
188		.owlCarousel({
189			items: 1,
190			dotsContainer: '.big-slider-nav',
191			nav: false,
192			dots: true,
193			autoplay: true,
194			loop: true,
195			autoplaySpeed: 1000
196		})
197		.on('changed.owl.carousel', function (e) {
198			// т.к. точки слайдера добавляются только к первому контейнеру
199			// а по дизайну они должны быть во всех.
200			// Добавим их в остальные при смене слайдов
201			var $slider = $(e.target),
202				dotsHtml = $slider.find('.big-slider-nav:first').html();
203
204			$.each($slider.find('.big-slider-nav'), function(index, val) {
205				$(this).html(dotsHtml);
206			});
207		});
208		
209
210		
211		
212		
213		
214		$('.sidebar-slider')
215		.owlCarousel({
216			items: 1,
217			dotsContainer: '.sidebar-slider-nav',
218			nav: false,
219			dots: true,
220			autoplay: true,
221			loop: false,
222			autoplaySpeed: 1000
223		})
224		.on('changed.owl.carousel', function (e) {
225			// т.к. точки слайдера добавляются только к первому контейнеру
226			// а по дизайну они должны быть во всех.
227			// Добавим их в остальные при смене слайдов
228			var $slider = $(e.target),
229				dotsHtml = $slider.find('.sidebar-slider-nav:first').html();
230
231			$.each($slider.find('.sidebar-slider-nav'), function(index, val) {
232				$(this).html(dotsHtml);
233			});
234		});
235		
236		
237		
238
239	// Карусель в футере
240	var $footerCarousel = $('.footer-carousel'),
241		navEnable = ($footerCarousel.find('.carousel-item').length <= 3) ? false : true;
242
243	$footerCarousel.owlCarousel({
244		items: 3,
245		nav: navEnable,
246		dots: false,
247		margin: 20
248	});
249
250	// Fallback для ie9 в списке врачей
251	$('.bx-ie9 .tree-column').autocolumnlist({
252		columns: 3,
253		classname: 'col col-4',
254	});
255
256	// Липкий блок
257	$('.sticky').stick_in_parent();
258
259	// Тултипы
260	$('.tooltip').tooltipster();
261
262	// Галерея картинок
263	$('.image-gallery-item').magnificPopup({
264		type: 'image',
265		gallery: {
266			enabled: 'true'
267		}
268	})
269}
270
271
272/**
273 * Простой js-шаблонизатор
274 * 
275 * Установка шаблона:
276 *  <template id="tpl">
277 *  	<ul>
278 *  		{% for(var i in this.items) { %}
279 *  			<li>
280 *  				<b>{% this.items[i].name %}</b>
281 *  			</li>
282 *  		{% } %}
283 *  	</ul>
284 *  </template>
285 * Р?спользование: 
286 * var template = document.getElementById('tpl').innerHTML;
287 * var $items = {0:{'name': 'one'}, 1: {'name': 'two'}};
288 * var show = (cnJsTemplater(template, {
289				items: $items
290			}));
291 * console.log(show);
292 */
293
294function cnJsTemplater(html, options) {
295	'use strict';
296	var re = /\{%(.+?)%\}/g,
297		reExp = /(^( )?(var|if|for|else|switch|case|break|{|}|;))(.*)?/g,
298		code = 'with(obj) { var r=[];\n',
299		cursor = 0,
300		result,
301		match;
302	var add = function (line, js) {
303		js ? (code += line.match(reExp) ? line + '\n' : 'r.push(' + line + ');\n') :
304			(code += line !== '' ? 'r.push("' + line.replace(/"/g, '\\"') + '");\n' : '');
305		return add;
306	};
307	while (match = re.exec(html)) {
308		add(html.slice(cursor, match.index))(match[1], true);
309		cursor = match.index + match[0].length;
310	}
311	add(html.substr(cursor, html.length - cursor));
312	code = (code + 'return r.join(""); }').replace(/[\r\t\n]/g, '');
313	try {
314		result = new Function('obj', code).apply(options, [options]);
315	}
316	catch (err) {
317		console.error("'" + err.message + "'", " in \n\nCode:\n", code, "\n");
318	}
319	return result;
320}
321
322
323function setEqualHeight(columns)
324{
325	var tallestcolumn = 0;
326	columns.each(
327		function()
328		{
329			currentHeight = $(this).height();
330				if(currentHeight > tallestcolumn)
331			{
332				tallestcolumn = currentHeight;
333			}
334		}
335	);
336	columns.height(tallestcolumn);
337}
338$(document).ready(function() {
339	
340	$('.work_hours').click(function(){
341		$('.work_hours_content').slideToggle();
342	});
343	
344	$('form[name="SIMPLE_FORM_1"]').submit(function(e){
345
346			if($(this).find('input[name="form_checkbox_SIMPLE_QUESTION_106[]"]').length > 0){
347				if($(this).find('input[name="form_checkbox_SIMPLE_QUESTION_106[]"]').prop('checked') == true){
348				
349				$(this).find('.icr-item.type_checkbox').parent().removeClass('not_check');
350					
351					return true;
352				 
353				} else{
354						
355					$(this).find('.icr-item.type_checkbox').parent().addClass('not_check');
356					return false;
357				}
358			}
359		});
360		
361
362		
363		
364	setEqualHeight($(".napravlenie-content  .naprav_service_block .ns"));
365	
366	$('.show_menu').click(function(){
367		$('.container-top-navigation').slideToggle();
368		
369	})
370	
371
372$('.popup-gallery').magnificPopup({
373		delegate: 'a',
374		type: 'image',
375		tLoading: 'Загрузка изображения #%curr%...',
376		mainClass: 'mfp-img-mobile',
377		gallery: {
378			enabled: true,
379			navigateByImgClick: true,
380			preload: [0,1] // Will preload 0 - before current, and 1 after the current image
381		},
382		image: {
383			tError: '<a href="%url%">Фото #%curr%</a> не может быть загружено.',
384			
385		}
386	});
387	
388	
389});

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.