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.