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.