1 2var getFieldValue = function(a){ 3 return typeof a === 'string' ? a : ( typeof a === 'object' && a.tagName !== undefined ? a.value : null); 4}; 5 6 7//Cross-browser placeholder 8 9 10mw.Form = function(options) { 11 options = options || {}; 12 var defaults = { 13 form: null 14 }; 15 this.settings = $.extend({}, defaults, options); 16 17 this.$form = mw.$(this.settings.form).eq(0); 18 this.form = this.$form[0]; 19 if (!this.form) { 20 return; 21 } 22 23 this.addBeforePost = function (func, cb) { 24 25 }; 26}; 27 28 29 30var setValidity = function (state, obj) { 31 var $el = mw.element(obj); 32 if(state){ 33 $el.parents('.field').removeClass("error"); 34 $el.parent().find('.mw-error').remove(); 35 } 36 else{ 37 $el.parents('.field').addClass("error"); 38 39 } 40}; 41 42 43mw.form = { 44 typeNumber:function(el){ 45 el.value = el.value.replace(/[^0-9\.,]/g,''); 46 }, 47 fixPrice:function(el){ 48 el.value = el.value.replace(/,/g,''); 49 var arr = el.value.split('.'); 50 var len = arr.length; 51 if(len>1){ 52 if(arr[len-1]===''){ 53 arr[len-1] = '.00'; 54 } 55 else{ 56 arr[len-1] = '.' + arr[len-1]; 57 } 58 el.value = arr.join(''); 59 } 60 }, 61 dstatic:function(event, d){ 62 63 }, 64 post: function(selector, url_to_post, callback, ignorenopost, callback_error, callback_user_cancel, before_send){ 65 mw.session.checkPause = true; 66 if(selector.constructor === {}.constructor){ 67 return mw.form._post(selector); 68 } 69 70 callback_error = callback_error || false; 71 ignorenopost = ignorenopost || false; 72 var is_form_valid = mw.form.validate.init(selector); 73 74 if(!url_to_post){ 75 76 url_to_post = mw.settings.site_url + 'api/post_form'; 77 78 } 79 80 81 82 if(is_form_valid){ 83 84 var form = mw.$(selector)[0]; 85 if (form._isSubmitting) { 86 return; 87 } 88 89 form._isSubmitting = true; 90 91 92 var when = form.$beforepost ? form.$beforepost : function () {}; 93 $.when(when()).then(function() { 94 setTimeout(function () { 95 var obj = mw.form.serialize(selector, ignorenopost); 96 97 98 var req = { 99 url: url_to_post, 100 data: before_send ? before_send(obj) : obj, 101 method: 'post', 102 dataType: "json", 103 statusCode: { 104 201: function(data){ 105 // copy of success 106 mw.session.checkPause = false; 107 if(typeof callback === 'function'){ 108 callback.call(data, mw.$(selector)[0]); 109 } else { 110 return data; 111 } 112 } 113 }, 114 success: function(data){ 115/* 116 if(typeof (data.error) != 'undefined' && data.error){ 117 mw.notification.error(data.error); 118 }*/ 119 120 mw.session.checkPause = false; 121 if(typeof callback === 'function'){ 122 callback.call(data, mw.$(selector)[0]); 123 } else { 124 return data; 125 } 126 }, 127 128 onExternalDataDialogClose: function() { 129 if(callback_user_cancel) { 130 callback_user_cancel.call(); 131 } 132 } 133 } 134 135 if (form.getAttribute('enctype') === "multipart/form-data") { 136 137 var form_data = new FormData(); 138 $.each(req.data, function (k,v) { 139 form_data.append(k,v); 140 }); 141 142 $('[type="file"]', form).each(function () { 143 if(typeof this.files[0] !== 'undefined') { 144 form_data.set(this.name, this.files[0]); 145 } 146 }); 147 148 req.data = form_data; 149 req.processData = false;
150 req.contentType = false; 151 req.mimeType = 'multipart/form-data'; 152 } 153 154 var xhr = $.ajax(req); 155 xhr.always(function(jqXHR, textStatus) { 156 form._isSubmitting = false; 157 }); 158 xhr.fail(function(a,b) { 159 mw.session.checkPause = false; 160 if(typeof callback_error === 'function'){ 161 callback_error.call(a,b); 162 } 163 }); 164 }, 78); 165 }); 166 167 168 169 } 170 return false; 171 }, 172 _post:function(obj){ 173 mw.form.post(obj.selector, obj.url, obj.done, obj.ignorenopost, obj.error, obj.error); 174 }, 175 validate:{ 176 checkbox: function(obj){ 177 return obj.checked === true; 178 }, 179 field:function(obj){ 180 return !!getFieldValue(obj).trim(); 181 }, 182 email:function(obj){ 183 var regexmail = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,6})+$/; 184 return regexmail.test(getFieldValue(obj)); 185 }, 186 url:function(obj){ 187 /* var rurl =/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; */ 188 var rurl = /^((https?|ftp):\/\/)?(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/; 189 return rurl.test(getFieldValue(getFieldValue(obj))); 190 }, 191 radio:function(objname){ 192 var radios = document.getElementsByName(objname), i = 0, len = radios.length; 193 this_radio_valid = false; 194 for( ; i < len ; i++){ 195 if(radios[i].checked){ 196 this_radio_valid = true; 197 break; 198 } 199 } 200 var parent = mw.$(document.getElementsByName(objname)[0].parentNode); 201 if(this_radio_valid){ 202 parent.removeClass("error"); 203 } 204 else{ 205 parent.addClass("error"); 206 } 207 return this_radio_valid; 208 }, 209 image_url:function(url, valid, invalid){ 210 url = url.replace(/\s/gi,''); 211 if(url.length<6){ 212 typeof invalid === 'function'? invalid.call(url) : ''; 213 return false; 214 } 215 else{ 216 if(!url.contains('http')){url = 'http://'+url} 217 if(!window.ImgTester){ 218 window.ImgTester = new Image(); 219 document.body.appendChild(window.ImgTester); 220 window.ImgTester.className = 'semi_hidden'; 221 window.ImgTester.onload = function(){ 222 typeof valid === 'function'? valid.call(url) : ''; 223 } 224 window.ImgTester.onerror = function(){ 225 typeof invalid === 'function'? invalid.call(url) : ''; 226 } 227 } 228 window.ImgTester.src = url; 229 } 230 }, 231 proceed:{ 232 checkbox:function(obj){ 233 setValidity(mw.form.validate.checkbox(obj), obj) 234 }, 235 field:function(obj){ 236 setValidity(mw.form.validate.field(obj), obj) 237 238 }, 239 email:function(obj){ 240 setValidity(mw.form.validate.email(obj), obj) 241 } 242 }, 243 checkFields:function(form){ 244 mw.$(form).find(".required,[required]").each(function(){ 245 var type = mw.$(this).attr("type"); 246 if(type==='checkbox'){ 247 mw.form.validate.proceed.checkbox(this); 248 } 249 else if(type==='radio'){ 250 mw.form.validate.radio(this.name); 251 } 252 else{ 253 mw.form.validate.proceed.field(this); 254 } 255 }); 256 mw.$(form).find(".required-email").each(function(){ 257 mw.form.validate.proceed.email(this); 258 }); 259 }, 260 init:function(obj){ 261 mw.form.validate.checkFields(obj); 262 if($(obj).find(".error").length>0){ 263 mw.$(obj).addClass("error submited"); 264 return false;
265 } 266 else{ 267 mw.$(obj).removeClass("error"); 268 return true; 269 } 270 } 271 }, 272 serialize : function(id, ignorenopost){ 273 var ignorenopost = ignorenopost || false; 274 return mw.serializeFields(id, ignorenopost); 275 } 276} 277 278 279mw.postForm = function(o){ 280 return mw.form._post(o); 281} 282 283 284 285 286 287 288 289 290 291 292 293 294
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.