PageSourceSearch

https://pravsemya.ru/wp-content/themes/pravsemya/js/main.js?v=180625&ver=1.0.7

js pravsemya.ru collected 2026-09-25 20:40:32 UTC 6,572 bytes, 212 lines download raw bytes

1//Perfect
2perfect = {
3	//Отправить ajax-запрос
4	ajax: function(url, params, onSuccess, onBefore, onError) {
5		onSuccess = onSuccess || false;
6		onBefore = onBefore || false;
7		onError = onError || false;
8		
9		var form = new FormData();
10		
11		//Сохранение параметров в виде FormData
12		for (var i in params) {
13			if (params[i] instanceof File) form.append(i, params[i]);
14			
15			if (typeof params[i] == 'object')
16				form.append(i, JSON.stringify(params[i]));
17			else {
18				if (params[i] instanceof Array)
19					form.append(i, params[i].join('{#SEP#}'));
20					
21				else form.append(i, params[i]);
22			}
23		}
24		//Вызов Ajax-запроса
25		jQuery.ajax({
26			 url: url,
27			 type: 'POST',
28			 async: true,
29			 processData: false,
30			 contentType: false,
31			 cache: false,
32			 data: form,
33			 beforeSend: function(xhr) {
34			    if (onBefore) onBefore(xhr);
35			 },
36			 error: function(xhr, message) {
37			    if (onError) onError(xhr, message);
38			 },
39			 success: function(data, status, request) {
40				if (onSuccess) onSuccess(data);
41			 }
42		});
43	},
44	
45	//Проверить поля для ввода на наличие ошибок
46	validate: function(element) {
47		function showError(target, text) {
48			text = text || false;
49			if (!jQuery(target).next().hasClass('form_error')) {
50				jQuery(target).addClass('error');
51				if (text) jQuery(target).before('<span class="form_error">' + text + "</span>");
52			}
53		};
54		
55		jQuery(element).find('.form_error').remove();
56		jQuery(element).find('.error').removeClass('error');
57		errors = 0;
58		jQuery(element).find('.required:visible').each(function(i, elem) {
59			if (!(jQuery(elem).val() == null)) {
60				if (!(jQuery(elem).val().trim() == '')) return
61			}
62			showError(elem, 'Поле обязательно для заполнения');
63			errors++;
64		});
65		jQuery(element).find('.email').each(function(i, elem) {
66			var pattern = /^\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b$/i;
67			var str = jQuery(elem).val();
68			if (!pattern.test(str)) {
69				showError(elem, 'Неправильный формат E-mail адреса');
70				errors++;
71			}
72		});
73		jQuery(element).find('.password').each(function(i, elem) {
74			var pattern = /^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X]).*$/i;
75			var str = jQuery(elem).val();
76			if (!pattern.test(str) || str.length < 7) {
77				showError(elem, 'Пароль не соответствует политике безопасности');
78				errors++;
79			}
80		});
81		jQuery(element).find('input[type=checkbox].required').each(function(i, elem) {
82			if (!jQuery(elem).prop('checked')) {
83				showError(elem, 'Поле обязятельно для заполнения');
84				errors++;
85			}
86		});
87		return errors == 0;
88	},
89
90	//Проверка мобильного разрешения экрана
91	isMobile: function(width) {
92		if (jQuery(window).width() < width)
93			return true
94		else
95			return false;
96    },
97    randomString: function(count) {
98		return Math.random().toString(36).substring(2, 2 + count);
99	},
100
101	//Получить запись coockie
102	getCookie: function(name, def) {
103		let matches = document.cookie.match(new RegExp(
104			"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
105		));
106		return matches ? decodeURIComponent(matches[1]) : def;
107	},
108
109	//Прокрутить страницу к элементу
110	scrollTo(elem, offset) {
111		offset = offset || 120;
112		if (!elem.length) return;
113		jQuery('html, body').stop().animate({
114			scrollTop: elem.offset().top - offset
115		}, 500);
116	}
117}
118
119jQuery(document).ready(function() {
120	//Спойлеры
121	jQuery('.spoiler .body').toggle();//Свернуть все спойлеры при старте страницы
122	jQuery('.spoiler .header').click(function() {
123		var header = jQuery(this);
124		header.toggleClass('open');
125		header.parent().find('.body').animate({height: 'toggle'}, 200);
126	});  
127
128	//Сохранение разметки окна записи
129	var orderFormContent = jQuery('#fw_order_form').html();
130	jQuery('#fw_order_form').remove();
131	var donateFormContent = jQuery('#fw_donate_form').html();
132	jQuery('#fw_donate_form').remove();
133
134    //Открытие окна записи
135    jQuery('.show_order_window').click(function() {
136		let expert = jQuery(this).attr('data-expert');
137		let wnd = plFW.showHtml(orderFormContent);
138		jQuery('#order_default_expert').val(expert);
139		wnd.caption.text('Записаться на консультацию');
140
141		//Отправка заявки
142		jQuery('.submit_order').click(function() {
143			let form = jQuery(this).closest('.form_wrapper');
144			if (perfect.validate(form)) {
145				let order_data = {
146					name: form.find('.name').val(),
147					phone: form.find('.phone').val(),
148					expert: form.find('.expert').val()
149				};
150				jQuery.post(
151					ajaxData.url,
152					{
153						action: 'make_order',
154						order_data,
155					},
156					function(response) {
157						response = jQuery.parseJSON(response);
158						form.html('<div class="message ' + response.status + '">' + response.message + '</div>');
159						ym(95843261,'reachGoal','orderForm');
160					}
161				);
162			};
163		});
164	});
165
166	//Открытие окна пожертвования
167	jQuery('.show_donate_window').click(function() {
168		let wnd = plFW.showHtml(donateFormContent);
169		wnd.caption.text('Пожертвование');
170	});
171	
172	//Инициализация галереи
173	/*
174	jQuery('.wp-block-gallery').addClass('plFW_gallery_group');
175	jQuery('.blocks-gallery-item a').each(function(i, elem) {
176		jQuery(elem).addClass('plFW_gallery');
177		jQuery(elem).attr('data-fullimage', jQuery(elem).attr('href'));
178		jQuery(elem).attr('href', 'javascript:void(0);');
179	});
180	plFWGallery.init();
181	*/
182
183	//Нажатие на кнопку мобильного меню
184	jQuery('.button_menu').click(function() {
185		jQuery('.site-header .mobile').toggleClass('opened');
186		jQuery('.main-navigation').toggle();
187	})
188
189	//Загрузка слайдеров
190	jQuery('.ajax_slider').each(function(i, elem) {
191		jQuery.post(
192			ajaxData.url,
193			{
194				action: 'get_slider',
195				slider_data: {
196					id: jQuery(elem).attr('data-id'),
197					mobile: perfect.isMobile(540)
198				}
199			},
200			function(response) {
201				if (!!response) {
202					jQuery(elem).html(response);
203					
204					plSlider.init();
205					plSlider.onSlideLoad = function() {
206						jQuery(elem).addClass('loaded');
207					};
208				}
209			}
210		);
211	});
212});

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.