PageSourceSearch

https://ritual.ru/local/templates/ritual/js/calc-pd.js?178159625614003

js ritual.ru collected 2026-10-01 12:29:18 UTC 14,003 bytes, 403 lines download raw bytes

1$(function(){
2	
3	//создание шаблона для каждого множественного поля
4	$(".jsCalcPd__input_multi").each(function(){
5		var _this = $(this);
6		_this.clone().addClass(_this.attr('data-class-pattern')).insertBefore(_this);
7	});
8	
9	//клик по пустой области для закрытия выпадающего списка
10    $(document).click(function (e) {
11        if (!$(e.target).hasClass('jsCalcPd__select-option')) {
12			var inputValue = $('.jsCalcPd__input-value').eq(0);			
13            $('.jsCalcPd__select-value').css('display','none');
14			$('.jsCalcPd__input-value').removeClass(inputValue.attr('data-class-open'));
15        }
16    });
17	
18	//открыть\скрыть выпадающий список
19	$(document).on('click','.jsCalcPd__select',function(e){
20		e.preventDefault();
21		var _this = $(this);
22		var parent = _this.parents(e.handleObj.selector.split('__')[0]).eq(0);
23		var inputValue = _this.parents('.jsCalcPd__input-value').eq(0);
24		var selectValue = $('.jsCalcPd__select-value',inputValue).eq(0);
25		
26		$('.jsCalcPd__select-value').not(selectValue).css('display','none');
27		$('.jsCalcPd__input-value').not(inputValue).removeClass(inputValue.attr('data-class-open'));
28		selectValue.slideToggle();
29		inputValue.toggleClass(inputValue.attr('data-class-open'));
30		
31		return false;
32	});
33	
34	//выбрать элемент в выпадающем списке
35	$(document).on('click','.jsCalcPd__select-option',function(e){
36		e.preventDefault();
37		var _this = $(this);
38		
39		var parent = _this.parents(e.handleObj.selector.split('__')[0]).eq(0);
40		var input = _this.parents('.jsCalcPd__input').eq(0);
41		var inputValue = _this.parents('.jsCalcPd__input-value').eq(0);
42		var select = $('.jsCalcPd__select',inputValue).eq(0);
43		var selectText = $('.jsCalcPd__select-text',_this).text();
44
45		var disableIfSelect;
46		try {
47			disableIfSelect = JSON.parse(input.attr('data-disable-if-select'));
48		} catch(e){
49			disableIfSelect = false;
50		}
51		
52		var hideIfSelect;
53		try {
54			hideIfSelect = JSON.parse(input.attr('data-hide-if-select'));
55		} catch(e){
56			hideIfSelect = false;
57		}
58		
59		var showIfSelect;
60		try {
61			showIfSelect = JSON.parse(input.attr('data-show-if-select'));
62		} catch(e){
63			showIfSelect = false;
64		}
65	//	console.log(showIfSelect);
66		$('.jsCalcPd__select-value').css('display','none');
67		$('.jsCalcPd__input-value').removeClass(inputValue.attr('data-class-open'));
68		
69		var price = _this.attr('data-price') || 0;
70		var value = _this.attr('data-value') || 0;
71		
72 		if(disableIfSelect.length){
73			if(value != 0) {
74				for(var i=0;i<disableIfSelect.length;i++){
75					field = $("[data-name='info["+disableIfSelect[i]+"][]']",parent);
76					var section = field.parents('.jsCalcPd__section').eq(0);
77					section.addClass(section.attr('data-class-disabled'));
78					$(".jsCalcPd__select",section).attr('data-price','0');
79					$(".jsCalcPd__select",section).text('не выбран');
80					$(".jsCalcPd__price",section).attr('data-price','0');
81					$(".jsCalcPd__price",section).text('0');
82					$('.jsCalcPd__select',section).removeClass($('.jsCalcPd__select',section).eq(0).attr('data-class-error'));
83					$('.jsCalcPd__error',section).removeClass($('.jsCalcPd__error',section).eq(0).attr('data-class-active'));
84				}
85			} else {
86				for(var i=0;i<disableIfSelect.length;i++){
87					field = $("[data-name='info["+disableIfSelect[i]+"][]']",parent);
88					var section = field.parents('.jsCalcPd__section').eq(0);
89					section.removeClass(section.attr('data-class-disabled'));				
90				}
91			}
92		}
93		
94 		if(hideIfSelect.length){
95			if(value != 0) {
96				for(var i=0;i<hideIfSelect.length;i++){
97					field = $("[data-name='info["+hideIfSelect[i]+"][]']",parent);
98					var section = field.parents('.jsCalcPd__section').eq(0);
99					section.addClass(section.attr('data-class-hidden'));
100					$(".jsCalcPd__select",section).attr('data-price','0');
101					$(".jsCalcPd__select",section).text('не выбран');
102					$(".jsCalcPd__price",section).attr('data-price','0');
103					$(".jsCalcPd__price",section).text('0');
104					$('.jsCalcPd__select',section).removeClass($('.jsCalcPd__select',section).eq(0).attr('data-class-error'));
105					$('.jsCalcPd__error',section).removeClass($('.jsCalcPd__error',section).eq(0).attr('data-class-active'));
106				}
107			} else {
108				for(var i=0;i<hideIfSelect.length;i++){
109					field = $("[data-name='info["+hideIfSelect[i]+"][]']",parent);
110					var section = field.parents('.jsCalcPd__section').eq(0);
111					section.removeClass(section.attr('data-class-hidden'));				
112				}
113			}
114		}
115
116 		if(showIfSelect.length){
117			if(value == 0) {
118				for(var i=0;
118i<showIfSelect.length;i++){
119					field = $("[data-name='info["+showIfSelect[i]+"][]']",parent);
120					var section = field.parents('.jsCalcPd__section').eq(0);
121					section.addClass(section.attr('data-class-hidden'));
122					console.log(section);
123					$(".jsCalcPd__select",section).attr('data-price','0');
124					$(".jsCalcPd__select",section).text('не выбран');
125					$(".jsCalcPd__price",section).attr('data-price','0');
126					$(".jsCalcPd__price",section).text('0');
127					$('.jsCalcPd__select',section).removeClass($('.jsCalcPd__select',section).eq(0).attr('data-class-error'));
128					$('.jsCalcPd__error',section).removeClass($('.jsCalcPd__error',section).eq(0).attr('data-class-active'));
129				}
130			} else {
131				for(var i=0;i<showIfSelect.length;i++){
132					field = $("[data-name='info["+showIfSelect[i]+"][]']",parent);
133					var section = field.parents('.jsCalcPd__section').eq(0);
134					section.removeClass(section.attr('data-class-hidden'));				
135				}
136			}
137		}
138		
139		select.removeClass(select.attr('data-class-error'));
140		$(".jsCalcPd__error",inputValue).removeClass($(".jsCalcPd__error",inputValue).eq(0).attr('data-class-active'));
141		select.text(selectText);
142		select.attr('data-price',price);
143		select.attr('data-value',value);
144		
145		var sum = jsCalcPdGetInputSum(input);
146		$(".jsCalcPd__price",input).attr('data-price',sum).text(priceFormat(sum));
147		if(sum > 0){
148			input.addClass(input.attr('data-class-active'));
149			inputValue.addClass(inputValue.attr('data-class-active'));
150		} else {
151			input.removeClass(input.attr('data-class-active'));
152			inputValue.removeClass(inputValue.attr('data-class-active'));
153		}
154
155		var total = jsCalcPdGetTotalSum(parent);
156		$(".jsCalcPd__total",parent).attr('data-price',total).text(priceFormat(total));	
157		
158		var desc = $("[data-id="+value+"]",inputValue);
159		$(".jsCalcPd__detail-option",inputValue).each(function(){
160			var option = $(this);
161			option.removeClass(option.attr('data-class-active'));
162		});
163		if(desc.length){
164			desc.addClass(desc.attr('data-class-active'));
165		}
166		//переключение типа калькулятора
167		if(input.hasClass('jsCalcPd__input_toggle')){
168			$(".jsCalcPd").addClass($(".jsCalcPd").eq(0).attr('data-class-hidden'));
169			$(".jsCalcPd[data-id="+value+"]").removeClass($(".jsCalcPd").eq(0).attr('data-class-hidden'));
170			$(".jsCalcPd__input_toggle .jsCalcPd__select").text(selectText);
171			$(".jsCalcPd__input_toggle .jsCalcPd__select").attr('data-price',price).attr('data-value',value);
172		}
173		return false;
174	});
175
176	//добавить вариант множественного поля
177	$(document).on('click','.jsCalcPd__btn-add',function(e){
178		e.preventDefault();
179		var _this = $(this);
180		var parent = _this.parents(e.handleObj.selector.split('__')[0]).eq(0);
181		var input = _this.parents('.jsCalcPd__input').eq(0);
182		var inputValue = _this.parents('.jsCalcPd__input-value').eq(0);
183		var newValue = inputValue.clone()
184		
185		$(".jsCalcPd__select",newValue).text('не выбран');
186		newValue.removeClass(newValue.attr('data-class-pattern'));
187		newValue.insertAfter(inputValue);
188		
189		jsCalcPdButtonManage(input);
190		return false;
191	});	
192	
193	//удалить вариант множественного поля
194	$(document).on('click','.jsCalcPd__btn-remove',function(e){
195		e.preventDefault();
196		var _this = $(this);
197		var parent = _this.parents(e.handleObj.selector.split('__')[0]).eq(0);
198		var input = _this.parents('.jsCalcPd__input').eq(0);
199		var inputValue = _this.parents('.jsCalcPd__input-value').eq(0);
200		inputValue.remove();
201		jsCalcPdButtonManage(input);
202		
203		var sum = jsCalcPdGetInputSum(input);
204		$(".jsCalcPd__price",input).attr('data-price',sum).text(priceFormat(sum));		
205		
206		var total = jsCalcPdGetTotalSum(parent);
207		$(".jsCalcPd__total",parent).attr('data-price',total).text(priceFormat(total));		
208		
209		return false;
210	});	
211	
212	
213	//валидация, отоображения всплывающего поля
214	$(document).on('click','.jsCalcPd__order',function(e){
215		e.preventDefault();
216		var _this = $(this);
217		var parent = _this.parents(e.handleObj.selector.split('__')[0]).eq(0);
218		var hasError = false;
219		$(".jsCalcPd__input_required .jsCalcPd__price",parent).each(function(){
220			var __this = $(this);
221			var _parent = __this.parents('.jsCalcPd__input').eq(0);
222			var _section = __this.parents('.jsCalcPd__section').eq(0);
223			if(
224				!(
225					_section.hasClass(_section.attr('data-class-disabled'))
226					||_section.hasClass(_section.attr('data-class-hidden'))
227				)
228			){
229				if(!_parent.hasClass(_parent.attr('data-class-pattern'))) {			
230					var price = parseInt(__this.attr('data-price')) || 0;
231					if(price == 0){
232						if(!hasError){
233							hasError = $('.jsCalcPd__select',_parent).eq(0);
234						}
235						$('.jsCalcPd__select',_parent).addClass($('.jsCalcPd__select',_parent).eq(0).attr('data-class-error'));
236						$('.jsCalcPd__error',_parent).addClass($('.jsCalcPd__error',_parent).eq(0).attr('data-class-active'));
237					} else{
238						$('.jsCalcPd__select',_parent).removeClass($('.jsCalcPd__select',_parent).eq(0).attr('data-class-error'));				
239						$('.jsCalcPd__error',_parent).removeClass($('.jsCalcPd__error',_parent).eq(0).attr('data-class-active'));
240					}
241				}
242			}
243		});
244		
245		if(!hasError) {
246
247			var form = $(".jsCalcPd__form",parent);
248			var canSubmit = true;
249			$(".jsField",form).each(function(){
250
251				if(!jsFieldValide($(this))){
252					canSubmit = false;
253				}
254			});
255			if(canSubmit){
256				var post = form.serializeArray();
257				post.push({
258					name: 'sessid',
259					value: SESSID,
260				});
261				$(".jsCalcPd__select",parent).each(function(){
262					var input = $(this).parents('.jsCalcPd__input').eq(0);
263					if(!input.hasClass(input.attr('data-class-pattern'))){
264						post.push({
265							name: $(this).attr('data-name'),
266							value: $(this).attr('data-value'),
267						})
268					}
269				});
270				parent.addClass(parent.attr('data-class-loading'));
271				$.post(form.attr('action'),post,function(data){
272					console.log(data);
273					if(data.status == true){
274						$.fancybox.close();
275						alert(data.message);
276						location.reload();
277					} else {
278						alert(data.message);
279						parent.removeClass(parent.attr('data-class-loading'));						
280					}
281				},'json');
282			}
283		} else {
284            $('body, html').animate({
285                scrollTop: hasError.offset().top - 256
286            }, 500);
287		}
288		return false;
289	});
290	
291	$(document).on('submit','.jsCalcPd__form',function(e){
292		e.preventDefault();
293		var _this = $(this);
294        var dataid = $('.jsCalcPd').not('.calc-pd_hidden');
295		var parent = _this.parents(e.handleObj.selector.split('__')[0]).eq(0);
296		var popup = $(".jsCalcPd__popup",parent);
297
298
299		if ( this.id =="jsCalcPd__form" )  {
300			$.each($('.form_error') , function(index, val) { 
301			  $(this).removeClass('form_error');
302		});
303
304		};
305
306        if (!dataid.find('.checkbox-rui__input').is(':checked') ) {
307            alert('Необходимо согласие на обработку персональных данных');
308            _this.addClass('form-errors')
309            return false;
310        }
311
312			er = true ;
313
314            $.each(dataid.find('.jsField__required'), function(index, val) {
315				$(this).removeClass('form_error');
316		  
317
318					  if ($(this).val().length < 1 ) {
319				  $(this).addClass('form_error');         
320						  er = false ;
321				} else {
322				  $(this).removeClass('form_error');
323
324				}
325		  
326			});
327		  
328		 if (!er ) {
329			alert('Заполните все обязательные поля');
330			return false;
331		}
332
333		var canSubmit = true;
334        dataid.find('.jsField__required').each(function(){
335
336			if(!jsFieldValide($(this))){
337				canSubmit = false;
338			}
339		});
340
341/*
342		if(canSubmit){
343
344                var post =  dataid.find('form').serializeArray();
345                dataid.find('.jsCalcPd__select').each(function(){
346                    var input = $(this).parents('.jsCalcPd__input').eq(0);
347                    if(!input.hasClass(input.attr('data-class-pattern'))){
348                        post.push({
349                            name: $(this).attr('data-name'),
350                            value: $(this).attr('data-value'),
351                        })
352                    }
353                });
354
355			
356			$.post(_this.attr('action'),post,function(data){
357				if(data.status == true){
358                    $.fancybox.close();
359                    $('#thanks_request .form-title').text(data.message);
360                    $('#thanks_request').fadeIn(300);
361				} else {
362					alert(data.message);
363					_this.addClass('form-errors')
364				}
365			},'json');
366		}
367*/
368
369		return false;
370	});
371    $("#thanks_request .closed").on("click", function (e) {
372        $('#thanks_request').hide();
373        location.reload();
374    });
375	
376	$(".jsCalcPd__input").each(function(){
377		jsCalcPdButtonManage($(this));
378	});	
379});
380
381function jsCalcPdButtonManage(input) {
382	$(".jsCalcPd__btn-add",input).css('display','none');
383	$(".jsCalcPd__btn-remove",input).css('display','inline-block');
384	
385	$(".jsCalcPd__btn-remove",input).eq(0).css('display','none');	
386	$(".jsCalcPd__btn-add:last",input).css('display','inline-block');
387}
388
389function jsCalcPdGetInputSum(input) {
390	var sum = 0;
391	$(".jsCalcPd__select",input).each(function(){
392		sum += parseInt($(this).attr('data-price')) || 0;
393	})
394	return sum;
395}
396
397function jsCalcPdGetTotalSum(calc) {
398	var sum = 0;
399	$(".jsCalcPd__price",calc).each(function(){
400		sum += parseInt($(this).attr('data-price')) || 0;
401	})
402	return sum;
403}

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.