PageSourceSearch

https://chateaudetalu.ru/local/components/uniqtrip/forms/templates/service-modal/script.js?17912944476145

js chateaudetalu.ru collected 2026-10-06 22:59:21 UTC 6,145 bytes, 177 lines download raw bytes

1$(document).ready(function () {
2
3    const modalAjax = new Modal({
4        modalBtns: '[data-modal-form]',
5        modalCloseBtns: '.js-modal-form-close',
6        modals: '.js-modal-form',
7    });
8
9    $("[data-modal-form='order-service']").click(function (event) {
10        const serviceName = event.target.dataset.servicename || '';
11      const title = event.target.dataset.title;
12        const iblockElement = event.target.dataset.iblock;
13
14        // $("#orderService").trigger("reset");
15        $(".alert").remove();
16        let data = {};
17        $("#order-service #service-name").html(title);
18        $('#orderService [name="nameService"]')
19          .val(serviceName)
20          .attr('value', serviceName);
21
22        if (typeof window.dp == 'object') {
23            window.dp.destroy();
24        }
25        const dp = new AirDatepicker("#order-service-datepicker", {
26            autoClose: true,
27            minDate: new Date(),
28            onSelect({date, formattedDate, datepicker}) {
29                datepicker.$el.classList.add('changed');
30            },
31            container: '.order-service-js-date-container',
32            position({ $datepicker, $target, $pointer, done }) {
33                let popper = Popper.createPopper($target, $datepicker, {
34                    placement: 'bottom',
35                    modifiers: [
36                        {
37                            name: 'flip',
38                            options: {
39                                fallbackPlacements: ['bottom'],
40                            }
41                        },
42                        {
43                            name: 'offset',
44                            options: {
45                                offset: [0, 10]
46                            }
47                        },
48                        {
49                            name: 'arrow',
50                            options: {
51                                element: $pointer
52                            }
53                        }
54                    ]
55                })
56
57                return function completeHide() {
58                    popper.destroy();
59                    done();
60                }
61            }
62        });
63
64        $(".set-changed-class .js-changed").addClass('changed');
65
66        window.dp = dp;
67        modalAjax.openModal(event);
68
69        const modalElement = $("#order-service");
70        formContent = modalElement.find('.form-content')[0];
71        formMessage = modalElement.find('.form-message')[0];
72        formMessageError = modalElement.find('.form-message-error')[0];
73
74        if (formContent) formContent.classList.remove('hide');
75        if (formMessage) formMessage.classList.remove('active');
76        if (formMessageError) formMessageError.classList.remove('active');
77    });
78
79    const validator = new FormValidator({
80        alerts: true,
81        events: false,
82        regex: {
83            email: {
84                illegalChars: /[\(\)\<\>\,\;\:\\\/\"\[\]]/,
85                filter: /^.+@.+\..{2,6}$/
86            },
87            tel: /_/,
88            time: /^([0-1][0-9]|2[0-3]):[0-5][0-9]$/,
89        },
90        texts: {
91            invalid: 'Неверно заполнено поле',
92            checked: 'Заполните поле',
93            empty: 'Заполните поле',
94            select: 'Выберите значение',
95            email: 'Неверно заполнено поле',
96            phone: 'Поле заполнено не до конца'
97        },
98    }, "#orderService");
99
100    $("#orderService").submit(function( event ) {
101        const form = $("#" + event.target.id);
102        const data = form.serialize();
103        const validatorResult = validator.checkAll(this);
104        checkLabels(validatorResult);
105
106        if (validatorResult.valid) {
107            $("#spinner-on").addClass("open-loader");
108            sendFormsOrderService(data)
109            $("#spinner-on").removeClass("open-loader");
110        }
111        return false;
112    })
113});
114
115function checkLabels(validatorResult) {
116    validatorResult.fields.forEach(field => {
117        const input = field.field;
118        const nameInput = input.nextElementSibling;
119
120        // возвращаем лейблы вместо ошибок у селектов
121        if (input.tagName === 'SELECT') {
122            const parent = input.parentNode;
123            const selectName = parent.querySelector('.form-item__name');
124
125            if (field.valid) {
126                selectName.style.display = 'block';
127            }
128        }
129
130        //возвращаем лейблы вместо ошибок у остальных полей
131        if (nameInput) {
132            if (field.valid) {
133                nameInput.style.transition = 'all 0.3s ease';
134                nameInput.classList.remove('hide');
135            }
136
137            if (input.classList.contains('changed') && !field.valid) {
138                nameInput.style.transition = 'none';
139                nameInput.classList.add('hide');
140            }
141        }
142    });
143}
144
145// "EventBookingGeneralDataManager"
146function sendFormsOrderService(dataForm) {
147    let data = {};
148    data.fields = dataForm;
149    const has_eighteen = $("#orderService [name=has_eighteen]").is(':checked');
150    data.fields += "&has_eighteen="+has_eighteen;
151    data.className = "ServiceInRestaurantFormDataManager";
152    data.isQuotasExist = false;
153
154    BX.ajax.runComponentAction('uniqtrip:forms',
155        'sendMessage', {
156        mode: 'class',
157        data: { post: data },
158    }).then(function (response) {
159        console.log(response.data);
160
161        const modalElement = $("#order-service");
162        formContent = modalElement.find('.form-content')[0];
163        formMessage = modalElement.find('.form-message')[0];
164        formMessageError = modalElement.find('.form-message-error')[0];
165
166        if (!response.data.result) {
167            if (formMessageError) formMessageError.classList.add('active');
168        } else {
169            if (formMessage) formMessage.classList.add('active');
170        }
171
172        if (formContent) formContent.classList.add('hide');
173
174        return response.data;
175        }, function (response) {
176    });
177}

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.