PageSourceSearch

https://ritual.ru/local/templates/ritual/js/autoload/calc.js

js ritual.ru collected 2026-10-01 12:29:50 UTC 9,844 bytes, 319 lines download raw bytes

1$(function () {
2
3	//создание шаблона для каждого множественного поля
4	$(".jsCalc__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('jsCalc__select-option')) {
12			var inputValue = $('.jsCalc__input-value').eq(0);
13			$('.jsCalc__select-value').css('display', 'none');
14			$('.jsCalc__input-value').removeClass(inputValue.attr('data-class-open'));
15		}
16	});
17
18	//открыть\скрыть выпадающий список
19	$(document).on('click', '.jsCalc__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('.jsCalc__input-value').eq(0);
24		var selectValue = $('.jsCalc__select-value', inputValue).eq(0);
25
26		$('.jsCalc__select-value').not(selectValue).css('display', 'none');
27		$('.jsCalc__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', '.jsCalc__select-option', function (e) {
36		e.preventDefault();
37		var _this = $(this);
38		var parent = _this.parents(e.handleObj.selector.split('__')[0]).eq(0);
39		var input = _this.parents('.jsCalc__input').eq(0);
40		var inputValue = _this.parents('.jsCalc__input-value').eq(0);
41		var select = $('.jsCalc__select', inputValue).eq(0);
42		var selectValue = $('.jsCalc__select-value', inputValue).eq(0);
43
44		$('.jsCalc__select-value').css('display', 'none');
45		$('.jsCalc__input-value').removeClass(inputValue.attr('data-class-open'));
46
47		var price = _this.attr('data-price') || 0;
48		var value = _this.attr('data-value') || 0;
49
50		select.removeClass(select.attr('data-class-error'));
51		select.text(_this.text());
52		select.attr('data-price', price);
53		select.attr('data-value', value);
54
55		var sum = jsCalcGetInputSum(input);
56		$(".jsCalc__price", input).attr('data-price', sum).text(priceFormat(sum));
57		if (sum > 0) {
58			input.addClass(input.attr('data-class-active'));
59			inputValue.addClass(inputValue.attr('data-class-active'));
60		} else {
61			input.removeClass(input.attr('data-class-active'));
62			inputValue.removeClass(inputValue.attr('data-class-active'));
63		}
64
65		var total = jsCalcGetTotalSum(parent);
66		$(".jsCalc__total", parent).attr('data-price', total).text(priceFormat(total));
67
68		return false;
69	});
70
71	//добавить вариант множественного поля
72	$(document).on('click', '.jsCalc__btn-add', function (e) {
73		e.preventDefault();
74		var _this = $(this);
75		var parent = _this.parents(e.handleObj.selector.split('__')[0]).eq(0);
76		var input = _this.parents('.jsCalc__input').eq(0);
77		var inputValue = _this.parents('.jsCalc__input-value').eq(0);
78		var newValue = inputValue.clone()
79
80		$(".jsCalc__select", newValue).text('не выбран');
81		newValue.removeClass(newValue.attr('data-class-pattern'));
82		newValue.insertAfter(inputValue);
83
84		jsCalcButtonManage(input);
85		return false;
86	});
87
88	//удалить вариант множественного поля
89	$(document).on('click', '.jsCalc__btn-remove', function (e) {
90		e.preventDefault();
91		var _this = $(this);
92		var parent = _this.parents(e.handleObj.selector.split('__')[0]).eq(0);
93		var input = _this.parents('.jsCalc__input').eq(0);
94		var inputValue = _this.parents('.jsCalc__input-value').eq(0);
95		inputValue.remove();
96		jsCalcButtonManage(input);
97
98		var sum = jsCalcGetInputSum(input);
99		$(".jsCalc__price", input).attr('data-price', sum).text(priceFormat(sum));
100
101		var total = jsCalcGetTotalSum(parent);
102		$(".jsCalc__total", parent).attr('data-price', total).text(priceFormat(total));
103
104		return false;
105	});
106
107
108	//валидация, отоображения всплывающего поля
109	$(document).on('click', '.jsCalc__order', function (e) {
110		e.preventDefault();
111		var _this = $(this);
112		var parent = _this.parents(e.handleObj.selector.split('__')[0]).eq(0);
113		var hasError = false;
114		$(".jsCalc__input_required .jsCalc__price", parent).each(function () {
115			var __this = $(this);
116			var _parent = __this.parents('.jsCalc__input').eq(0);
117			if (!_parent.hasClass(_parent.attr('data-class-pattern'))) {
118				var price = parseInt(__this.attr('data-price')) || 0;
119				if (price == 0) {
120					if (!hasError) {
121						hasError = $('.jsCalc__select', _parent).eq(0);
122					}
123					$('.jsCalc__select', _parent).addClass($('.jsCalc__select', _parent).eq(0).attr('data-class-error'));
124				} else {
125					$('.jsCalc__select', _parent).removeClass($('.jsCalc__select', _parent).eq(0).attr('data-class-error'));
126				}
127			}
128		});
129
130		if (!hasError) {
131			$.fancybox.open({
132				src: '#calc' + parent.attr('data-id'),
133				type: 'inline',
134				opts: {
135					touch: false,
136					parentEl: '[data-id=' + parent.attr('data-id') + '] .jsCalc__form',
137					afterShow: function (instance, current) {
138						$('.jsCalc__phone').inputmask('+7 (999) 999-99-99');
139					}
140				}
141			});
142		} else {
143			$('body, html').animate({
144				scrollTop: hasError.offset().top - 256
145			}, 500);
146		}
147		return false;
148	});
149
150	$(document).on('submit', '.jsCalc__form', function (e) {
151		e.preventDefault();
152		var _this = $(this);
153		var parent = _this.parents(e.handleObj.selector.split('__')[0]).eq(0);
154		var popup = $(".jsCalc__popup", parent);
155		var canSubmit = true;
156		$(".jsField", popup).each(function () {
157			if (!jsFieldValide($(this))) {
158				canSubmit = false;
159			}
160		});
161
162		if (canSubmit) {
163			var post = _this.serializeArray();
164			post.push({
165				name: 'sessid',
166				value: SESSID,
167			});
168			$(".jsCalc__select", parent).each(function () {
169				var input = $(this).parents('.jsCalc__input').eq(0);
170				if (!input.hasClass(input.attr('data-class-pattern'))) {
171					post.push({
172						name: $(this).attr('data-name'),
173						value: $(this).attr('data-value'),
174					})
175				}
176			});
177
178			$.post(_this.attr('action'), post, function (data) {
179				if (data.status == true) {
180					$.fancybox.close();
181					alert(data.message.join());
182					location.reload();
183				} else {
184					alert(data.message.join());
185				}
186			}, 'json');
187		}
188		return false;
189	});
190
191	$(".jsCalc__input").each(function () {
192		jsCalcButtonManage($(this));
193	});
194
195
196
197	// ------КАЛЕНДАРЬ-------
198
199	if ($('.jsCalendar').length != 0) {
200
201		$('.jsCalc__select-option').click(function () {
202			
203			if ($('.jsCalc__select-option').hasClass('calc__select-option_disable')) {
204				$('.jsCalc__select-option').removeClass('calc__select-option_disable')
205			}
206
207			if ($(this).is("[data-month]")) {
208				$('.jsCalc__select-month').attr('data-month', this.getAttribute('data-month'));
209			}
210
211
212			if ($(this).is("[data-date]")) {
213				$('.jsCalc__select-date').attr('data-date', this.getAttribute('data-date'));
214			}
215
216			var date = $('.jsCalc__select-date').attr('data-date');
217			var month = $('.jsCalc__select-month').attr('data-month');
218			month = +month;
219			date = +date;
220
221			if ((date == undefined && month == undefined) ||
222				(month == 2 && date == 30) ||
223				(month == 2 && date == 31) ||
224				(month == 4 && date == 31) ||
225				(month == 6 && date == 31) ||
226				(month == 9 && date == 31) ||
227				(month == 11 && date == 31)) {} else {
228
229				$('.jsCalendarList').addClass('calendar__list_preloader')
230
231/* 				$.post(
232					"/calendar/", {
233						ajax: 'Y',
234						day: date,
235						month: month,
236					},
237					onAjaxSuccess,
238					"json"
239				);
240 */
241				function onAjaxSuccess(data) {
242					$('.jsCalendarList').removeClass('calendar__list_preloader');
243					var content = data.data.html;
244					$('.jsCalendarList').html(content);
245					if ($('.calendar__item ').length == 0) {
246						$('.jsCalc__select-value').css('position', 'relative')
247					} else {
248						$('.jsCalc__select-value').css('position', 'absolute')
249					}
250				};
251			};
252			location.href='/calendar/'+month+'/'+date+'/';
253			return false;			
254		});
255
256		$('.jsCalcDate .jsCalc__select-option').click(function () {
257			$('.jsCalcDate .jsCalc__select-option').removeClass('calc__select-option_active');
258			$(this).addClass('calc__select-option_active');
259		});
260
261		$('.jsCalcMonth .jsCalc__select-option').click(function () {
262			$('.jsCalcMonth .jsCalc__select-option').removeClass('calc__select-option_active');
263			$(this).addClass('calc__select-option_active');
264		});
265
266		function dateFilter() {
267			var a = $('.jsCalc__select-month').attr('data-month');
268			var b = $('.jsCalc__select-date').attr('data-date');
269
270			if (a == 2 || a == 4 || a == 6 || a == 9 || a == 11) {
271				$('.jsCalcDate .jsCalc__select-option').eq(-1).addClass('calc__select-option_disable');
272			}
273
274			if (b == 31 && (a == 2 || a == 4 || a == 6 || a == 9 || a == 11)) {
275				$('.jsCalc__select-date').text('1')
276			}
277
278			if (a == 2) {
279				$('.jsCalcDate .jsCalc__select-option').eq(-2).addClass('calc__select-option_disable');
280			}
281			if (b == 30 && (a == 2)) {
282				$('.jsCalc__select-date').text('1')
283			}
284		}
285
286		dateFilter();
287
288
289		$('.jsCalc__select-option').click(function () {
290			dateFilter()
291		});
292	}
293});
294
295
296
297function jsCalcButtonManage(input) {
298	$(".jsCalc__btn-add", input).css('display', 'none');
299	$(".jsCalc__btn-remove", input).css('display', 'inline-block');
300
301	$(".jsCalc__btn-remove", input).eq(0).css('display', 'none');
302	$(".jsCalc__btn-add:last", input).css('display', 'inline-block');
303}
304
305function jsCalcGetInputSum(input) {
306	var sum = 0;
307	$(".jsCalc__select", input).each(function () {
308		sum += parseInt($(this).attr('data-price')) || 0;
309	})
310	return sum;
311}
312
313function jsCalcGetTotalSum(calc) {
314	var sum = 0;
315	$(".jsCalc__price", calc).each(function () {
316		sum += parseInt($(this).attr('data-price')) || 0;
317	})
318	return sum;
319}

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.