1/* ======================================================================== 2 * Jquery Double Validate v1.1.0 3 * https://github.com/north-leshiy/double-validate 4 * ======================================================================== */ 5;(function ($) { 6 7 var defaults = { 8 urlHandler: '' 9 , params: { 10 scrollToTopOnError: false, 11 borderColorOnError: false, 12 errorMessageClass: 'error', 13 language : myLanguage 14 } 15 , ajaxMethod: document.location.host === 'localhost:8080' ? 'GET' : 'POST' 16 , errorMessage: 'СпаÑибо за оÑпÑÐ°Ð²ÐºÑ ÑоÑмÑ!\n' + 17 'Ðднако ÑÑо-Ñо поÑло не Ñак и Ð¼Ñ Ð½Ðµ Ñмогли полÑÑиÑÑ Ð´Ð°Ð½Ð½Ñе.\n' + 18 'ÐеÑезвониÑе нам или попÑобÑйÑе оÑпÑавиÑÑ ÐµÑе Ñаз позже.' 19 , errorMessageNetwork: 'ÐÑÑÑÑÑÑвÑÐµÑ Ñоедиение Ñ ÑайÑом, пÑовеÑÑÑе Ñоедиенение Ñ Ð¸Ð½ÑеÑнеÑом ии попÑобÑйÑе оÑпÑавиÑÑ Ð¿Ð¾Ð·Ð¶Ðµ' 20 , classMainErrorContainer: 'double-validate__main-error-container' 21 , classMainErrorItem: 'double-validate__main-error-item' 22 , showErrorMessage: true 23 , reportErrorToListener: false 24 , urlErrorListener: 'https://error-listener.w6p.ru/' 25 26 // callbacks 27 , onBeforeSend: function () {} 28 , onServerValidateSuccess: function () {} 29 , onServerValidateError: function () {} 30 , onBlockedForm: function () {} 31 , onUnBlockedForm: function () {} 32 , onErrorRequest: function () {} 33 , sendErrorToListener: function (errorData, widget) { 34 if (!widget.config.urlErrorListener) { 35 return; 36 } 37 38 var formTextData = widget.$form.serialize(); 39 var requestInfo = { 40 formTextData: formTextData, 41 responseCode: errorData.status, 42 statusText: errorData.statusText, 43 readyState: errorData.readyState, 44 responseText: errorData.responseText 45 }; 46 47 $.ajax({ 48 url: widget.config.urlErrorListener, 49 type: 'POST', 50 dataType: 'json', 51 data: requestInfo 52 }); 53 } 54 55 // callback alias for compatibility 56 , validateSuccess: function () {} 57 , validateError: function () {} 58 }; 59 60 /** 61 * DoubleValidate constructor 62 */ 63 var DoubleValidate = function ($form, options) { 64 var widget = this; 65 widget.config = $.extend(true, {}, defaults, options); 66 widget.$form = $form; 67 68 /** 69 * ÐбÑабоÑка ÑобÑÑий 70 */ 71 $.each(widget.config, function (name, value) { 72 if (typeof value === 'function') { 73 widget.$form.on(name + '.doubleValidate', (function (event, data) { 74 return value(data, widget); 75 })) 76 } 77 }); 78 79 widget.init(); 80 }; 81 82 DoubleValidate.prototype = { 83 /** 84 * ÐонÑÑÑÑкÑÐ¾Ñ 85 * @return {void} 86 */ 87 init: function () { 88 var widget = this; 89 90 widget.$form.on('submit', function (event) { 91 event.preventDefault(); 92 }); 93 94 // ÐÑклÑÑаем наÑивнÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ 95 widget.$form.attr('novalidate', 'novalidate'); 96 97 // УÑÑанавливаем адÑÐµÑ Ð¾Ð±ÑабоÑÑика 98 if (widget.config.urlHandler === '') { 99 widget.config.urlHandler = widget.$form.attr('action'); 100 } 101 102 // ÐавеÑиваем обÑабоÑÐºÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð° validator 103 var validateParams = { 104 form: '#' + widget.$form.attr('id'), 105 onSuccess: function () { 106 widget.ajaxHandler(); 107 } 108 }; 109 validateParams = $.extend(true, {}, validateParams, widget.config.params); 110 111 $.validate(validateParams); 112 }, 113 114 /** 115 * ÐлавнÑй ajax handler 116 * @return {void} 117 */ 118 ajaxHandler: function () { 119 var widget = this; 120 121 if (widget.formBlocked) { 122 console.error('ÐÑблиÑÑÑÑий ajax запÑоÑ'); 123 return; 124 } 125 126 widget.blockForm(); 127 128 var formData = new FormData(widget.$form.get()[0]); 129 130 widget.$form.trigger('onBeforeSend.doubleValidate', [formData]); 131 132 $.ajax({ 133 url: widget.config.urlHandler, 134 type: widget.config.ajaxMethod, 135 dataType: 'json', 136 data: formData, 137 processData: false, 138 contentType: false 139 }) 140 .done(function (data) { 141 widget.removeMainErrors(); 142 143 if (data.status) { 144 widget.$form.trigger('onServerValidateSuccess.doubleValidate', [data]); 145 widget.$form.trigger('validateSuccess.doubleValidate', [data]); // for compability 146 } else { 147 widget.errorHandler(data); 148 widget.$form.trigger('onServerValidateError.doubleValidate', [data]); 149 widget.$form.trigger('validateError.doubleValidate', [data]); // for compability 150 151 } 152 }) 153 .fail(function (data) { 154 if (data.status === 0 || data.readyState === 0) { 155 alert(widget.config.errorMessageNetwork); 156 } else { 157 alert(widget.config.errorMessage); 158 } 159 160 if (widget.config.reportErrorToListener) { 161 widget.$form.trigger('sendErrorToListener.doubleValidate', [data]); 162 } 163 }) 164 .always(function () { 165 widget.unBlockForm(); 166 }); 167 }, 168 169 /** 170 * ÐбÑабоÑÑик оÑибок пÑиÑедÑÐ¸Ñ Ñ ÑеÑвеÑа 171 * @param {object} response оÑÐ²ÐµÑ ÑеÑвеÑа 172 * @param {object.errors} response оÑÐ²ÐµÑ ÑеÑвеÑа 173 * @return {void} 174 */ 175 errorHandler: function (response) { 176 177 for (var el in response.errors) { 178 this.$form.find('input[name="' + el + '"]') 179 .addClass('error') 180 .after('<span class="help-block error">' + response.errors[el] + '</span>'); 181 } 182 183 if (response.mainErrors) { 184 this.addMainErrors(response.mainErrors); 185 } else { 186 this.removeMainErrors(); 187 } 188 189 }, 190 191 /** 192 * ÐокиÑование ÑоÑмÑ, Ð´Ð»Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ Ð¾ÑпÑавки запÑоÑов 193 * @return {void} 194 */ 195 blockForm: function () { 196 this.$form.addClass('double-validate--wait'); 197 this.$form.trigger('onBlockedForm.doubleValidate', [this.$form]); 198 this.formBlocked = true; 199 }, 200 201 /** 202 * РазблокиÑование ÑоÑÐ¼Ñ 203 * @return {void} 204 */ 205 unBlockForm: function () { 206 this.formBlocked = false;
207 this.$form.trigger('onUnBlockedForm.doubleValidate', [this.$form]); 208 this.$form.removeClass('double-validate--wait'); 209 }, 210 211 /** 212 * Ðобавление обÑÐ¸Ñ Ð¾Ñибок в конÑÐµÐ¹Ð½ÐµÑ 213 * @param {array} mainErrors маÑÑив обÑÐ¸Ñ Ð¾Ñибок 214 * @return {void} 215 */ 216 addMainErrors: function (mainErrors) { 217 var $container = $('.' + this.config.classMainErrorContainer); 218 219 for (var i = mainErrors.length - 1; i >= 0; i--) { 220 $('<div class="' + this.config.classMainErrorItem + '">' + mainErrors[i] + '</div>').appendTo($container); 221 } 222 }, 223 224 /** 225 * Удаление обÑÐ¸Ñ Ð¾Ñибок 226 * @return {void} 227 */ 228 removeMainErrors: function () { 229 $('.' + this.config.classMainErrorContainer).html(''); 230 } 231 232 }; 233 234 $.fn.doubleValidate = function (options) { 235 return new DoubleValidate(this.first(), options); 236 } 237 238}(jQuery));
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.