summaryrefslogtreecommitdiff
path: root/lib/jquery.form.js
blob: 4cc8700ba4d445a6aefd1f2232a8c9c4b7ff75f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*!
 * jQuery Form Plugin
 * version: 3.35.0-2013.05.23
 * @requires jQuery v1.5 or later
 * Copyright (c) 2013 M. Alsup
 * Examples and documentation at: http://malsup.com/jquery/form/
 * Project repository: https://github.com/malsup/form
 * Dual licensed under the MIT and GPL licenses.
 * https://github.com/malsup/form#copyright-and-license
 */
(function(c){function u(a){var j=a.data;a.isDefaultPrevented()||(a.preventDefault(),c(this).ajaxSubmit(j))}function s(a){var j=a.target,e=c(j);if(!e.is("[type=submit],[type=image]")){j=e.closest("[type=submit]");if(0===j.length)return;j=j[0]}var b=this;b.clk=j;"image"==j.type&&(void 0!==a.offsetX?(b.clk_x=a.offsetX,b.clk_y=a.offsetY):"function"==typeof c.fn.offset?(e=e.offset(),b.clk_x=a.pageX-e.left,b.clk_y=a.pageY-e.top):(b.clk_x=a.pageX-j.offsetLeft,b.clk_y=a.pageY-j.offsetTop));setTimeout(function(){b.clk=
b.clk_x=b.clk_y=null},100)}function n(){if(c.fn.ajaxSubmit.debug){var a="[jquery.form] "+Array.prototype.join.call(arguments,"");window.console&&window.console.log?window.console.log(a):window.opera&&window.opera.postError&&window.opera.postError(a)}}var B,G;B=void 0!==c("<input type='file'/>").get(0).files;G=void 0!==window.FormData;var D=!!c.fn.prop;c.fn.attr2=function(){if(!D)return this.attr.apply(this,arguments);var a=this.prop.apply(this,arguments);return a&&a.jquery||"string"===typeof a?a:
this.attr.apply(this,arguments)};c.fn.ajaxSubmit=function(a){function j(b){function j(a){var b=null;try{a.contentWindow&&(b=a.contentWindow.document)}catch(c){n("cannot get iframe.contentWindow document: "+c)}if(b)return b;try{b=a.contentDocument?a.contentDocument:a.document}catch(d){n("cannot get iframe.contentDocument: "+d),b=a.document}return b}function f(){function a(){try{var b=j(t).readyState;n("state = "+b);b&&"uninitialized"==b.toLowerCase()&&setTimeout(a,50)}catch(c){n("Server abort: ",c,
" (",c.name,")"),m(E),s&&clearTimeout(s),s=void 0}}var b=l.attr2("target"),h=l.attr2("action");k.setAttribute("target",r);e||k.setAttribute("method","POST");h!=d.url&&k.setAttribute("action",d.url);!d.skipEncodingOverride&&(!e||/post/i.test(e))&&l.attr({encoding:"multipart/form-data",enctype:"multipart/form-data"});d.timeout&&(s=setTimeout(function(){u=!0;m(z)},d.timeout));var g=[];try{if(d.extraData)for(var x in d.extraData)d.extraData.hasOwnProperty(x)&&(c.isPlainObject(d.extraData[x])&&d.extraData[x].hasOwnProperty("name")&&
d.extraData[x].hasOwnProperty("value")?g.push(c('<input type="hidden" name="'+d.extraData[x].name+'">').val(d.extraData[x].value).appendTo(k)[0]):g.push(c('<input type="hidden" name="'+x+'">').val(d.extraData[x]).appendTo(k)[0]));d.iframeTarget||(v.appendTo("body"),t.attachEvent?t.attachEvent("onload",m):t.addEventListener("load",m,!1));setTimeout(a,15);try{k.submit()}catch(q){document.createElement("form").submit.apply(k)}}finally{k.setAttribute("action",h),b?k.setAttribute("target",b):l.removeAttr("target"),
c(g).remove()}}function m(a){if(!h.aborted&&!C)if(q=j(t),q||(n("cannot access response document"),a=E),a===z&&h)h.abort("timeout"),w.reject(h,"timeout");else if(a==E&&h)h.abort("server abort"),w.reject(h,"error","server abort");else if(q&&q.location.href!=d.iframeSrc||u){t.detachEvent?t.detachEvent("onload",m):t.removeEventListener("load",m,!1);a="success";var b;try{if(u)throw"timeout";var f="xml"==d.dataType||q.XMLDocument||c.isXMLDoc(q);n("isXml="+f);if(!f&&(window.opera&&(null===q.body||!q.body.innerHTML))&&
--F){n("requeing onLoad callback, DOM not available");setTimeout(m,250);return}var e=q.body?q.body:q.documentElement;h.responseText=e?e.innerHTML:null;h.responseXML=q.XMLDocument?q.XMLDocument:q;f&&(d.dataType="xml");h.getResponseHeader=function(a){return{"content-type":d.dataType}[a]};e&&(h.status=Number(e.getAttribute("status"))||h.status,h.statusText=e.getAttribute("statusText")||h.statusText);var g=(d.dataType||"").toLowerCase(),l=/(json|script|text)/.test(g);if(l||d.textarea){var k=q.getElementsByTagName("textarea")[0];
if(k)h.responseText=k.value,h.status=Number(k.getAttribute("status"))||h.status,h.statusText=k.getAttribute("statusText")||h.statusText;else if(l){var p=q.getElementsByTagName("pre")[0],H=q.getElementsByTagName("body")[0];p?h.responseText=p.textContent?p.textContent:p.innerText:H&&(h.responseText=H.textContent?H.textContent:H.innerText)}}else"xml"==g&&(!h.responseXML&&h.responseText)&&(h.responseXML=G(h.responseText));try{var f=h,e=d,r=f.getResponseHeader("content-type")||"",J="xml"===g||!g&&0<=r.indexOf("xml"),
y=J?f.responseXML:f.responseText;J&&"parsererror"===y.documentElement.nodeName&&c.error&&c.error("parsererror");e&&e.dataFilter&&(y=e.dataFilter(y,g));"string"===typeof y&&("json"===g||!g&&0<=r.indexOf("json")?y=I(y):("script"===g||!g&&0<=r.indexOf("javascript"))&&c.globalEval(y));B=y}catch(K){a="parsererror",h.error=b=K||a}}catch(D){n("error caught: ",D),a="error",h.error=b=D||a}h.aborted&&(n("upload aborted"),a=null);h.status&&(a=200<=h.status&&300>h.status||304===h.status?"success":"error");"success"===
a?(d.success&&d.success.call(d.context,B,"success",h),w.resolve(h.responseText,"success",h),A&&c.event.trigger("ajaxSuccess",[h,d])):a&&(void 0===b&&(b=h.statusText),d.error&&d.error.call(d.context,h,a,b),w.reject(h,"error",b),A&&c.event.trigger("ajaxError",[h,d,b]));A&&c.event.trigger("ajaxComplete",[h,d]);A&&!--c.active&&c.event.trigger("ajaxStop");d.complete&&d.complete.call(d.context,h,a);C=!0;d.timeout&&clearTimeout(s);setTimeout(function(){d.iframeTarget||v.remove();h.responseXML=null},100)}}
var k=l[0],g,d,A,r,v,t,h,u,s,w=c.Deferred();if(b)for(g=0;g<p.length;g++)b=c(p[g]),D?b.prop("disabled",!1):b.removeAttr("disabled");d=c.extend(!0,{},c.ajaxSettings,a);d.context=d.context||d;r="jqFormIO"+(new Date).getTime();d.iframeTarget?(v=c(d.iframeTarget),(g=v.attr2("name"))?r=g:v.attr2("name",r)):(v=c('<iframe name="'+r+'" src="'+d.iframeSrc+'" />'),v.css({position:"absolute",top:"-1000px",left:"-1000px"}));t=v[0];h={aborted:0,responseText:null,responseXML:null,status:0,statusText:"n/a",getAllResponseHeaders:function(){},
getResponseHeader:function(){},setRequestHeader:function(){},abort:function(a){var b="timeout"===a?"timeout":"aborted";n("aborting upload... "+b);this.aborted=1;try{t.contentWindow.document.execCommand&&t.contentWindow.document.execCommand("Stop")}catch(e){}v.attr("src",d.iframeSrc);h.error=b;d.error&&d.error.call(d.context,h,b,a);A&&c.event.trigger("ajaxError",[h,d,b]);d.complete&&d.complete.call(d.context,h,b)}};(A=d.global)&&0===c.active++&&c.event.trigger("ajaxStart");A&&c.event.trigger("ajaxSend",
[h,d]);if(d.beforeSend&&!1===d.beforeSend.call(d.context,h,d))return d.global&&c.active--,w.reject(),w;if(h.aborted)return w.reject(),w;if(b=k.clk)if((g=b.name)&&!b.disabled)d.extraData=d.extraData||{},d.extraData[g]=b.value,"image"==b.type&&(d.extraData[g+".x"]=k.clk_x,d.extraData[g+".y"]=k.clk_y);var z=1,E=2;b=c("meta[name=csrf-token]").attr("content");if((g=c("meta[name=csrf-param]").attr("content"))&&b)d.extraData=d.extraData||{},d.extraData[g]=b;d.forceSync?f():setTimeout(f,10);var B,q,F=50,
C,G=c.parseXML||function(a,b){window.ActiveXObject?(b=new ActiveXObject("Microsoft.XMLDOM"),b.async="false",b.loadXML(a)):b=(new DOMParser).parseFromString(a,"text/xml");return b&&b.documentElement&&"parsererror"!=b.documentElement.nodeName?b:null},I=c.parseJSON||function(a){return window.eval("("+a+")")};return w}if(!this.length)return n("ajaxSubmit: skipping submit process - no element selected"),this;var e,b,l=this;"function"==typeof a&&(a={success:a});e=a.type||this.attr2("method");b=a.url||this.attr2("action");
(b=(b="string"===typeof b?c.trim(b):"")||window.location.href||"")&&(b=(b.match(/^([^#]+)/)||[])[1]);a=c.extend(!0,{url:b,success:c.ajaxSettings.success,type:e||"GET",iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank"},a);b={};this.trigger("form-pre-serialize",[this,a,b]);if(b.veto)return n("ajaxSubmit: submit vetoed via form-pre-serialize trigger"),this;if(a.beforeSerialize&&!1===a.beforeSerialize(this,a))return n("ajaxSubmit: submit aborted via beforeSerialize callback"),
this;var m=a.traditional;void 0===m&&(m=c.ajaxSettings.traditional);var p=[],f,g=this.formToArray(a.semantic,p);a.data&&(a.extraData=a.data,f=c.param(a.data,m));if(a.beforeSubmit&&!1===a.beforeSubmit(g,this,a))return n("ajaxSubmit: submit aborted via beforeSubmit callback"),this;this.trigger("form-submit-validate",[g,this,a,b]);if(b.veto)return n("ajaxSubmit: submit vetoed via form-submit-validate trigger"),this;b=c.param(g,m);f&&(b=b?b+"&"+f:f);"GET"==a.type.toUpperCase()?(a.url+=(0<=a.url.indexOf("?")?
"&":"?")+b,a.data=null):a.data=b;var k=[];a.resetForm&&k.push(function(){l.resetForm()});a.clearForm&&k.push(function(){l.clearForm(a.includeHidden)});if(!a.dataType&&a.target){var E=a.success||function(){};k.push(function(b){var e=a.replaceTarget?"replaceWith":"html";c(a.target)[e](b).each(E,arguments)})}else a.success&&k.push(a.success);a.success=function(b,c,e){for(var f=a.context||this,g=0,j=k.length;g<j;g++)k[g].apply(f,[b,c,e||l,l])};if(a.error){var u=a.error;a.error=function(b,c,e){u.apply(a.context||
this,[b,c,e,l])}}if(a.complete){var s=a.complete;a.complete=function(b,c){s.apply(a.context||this,[b,c,l])}}f=0<c('input[type=file]:enabled[value!=""]',this).length;b="multipart/form-data"==l.attr("enctype")||"multipart/form-data"==l.attr("encoding");m=B&&G;n("fileAPI :"+m);var z;if(!1!==a.iframe&&(a.iframe||(f||b)&&!m))a.closeKeepAlive?c.get(a.closeKeepAlive,function(){z=j(g)}):z=j(g);else if((f||b)&&m){var F=new FormData;for(b=0;b<g.length;b++)F.append(g[b].name,g[b].value);if(a.extraData){b=c.param(a.extraData,
a.traditional).split("&");m=b.length;f=[];var r,C;for(r=0;r<m;r++)b[r]=b[r].replace(/\+/g," "),C=b[r].split("="),f.push([decodeURIComponent(C[0]),decodeURIComponent(C[1])]);for(b=0;b<f.length;b++)f[b]&&F.append(f[b][0],f[b][1])}a.data=null;f=c.extend(!0,{},c.ajaxSettings,a,{contentType:!1,processData:!1,cache:!1,type:e||"POST"});a.uploadProgress&&(f.xhr=function(){var b=jQuery.ajaxSettings.xhr();b.upload&&b.upload.addEventListener("progress",function(b){var c=0,e=b.loaded||b.position,f=b.total;b.lengthComputable&&
(c=Math.ceil(100*(e/f)));a.uploadProgress(b,e,f,c)},!1);return b});f.data=null;var I=f.beforeSend;f.beforeSend=function(a,b){b.data=F;I&&I.call(this,a,b)};z=c.ajax(f)}else z=c.ajax(a);l.removeData("jqxhr").data("jqxhr",z);for(f=0;f<p.length;f++)p[f]=null;this.trigger("form-submit-notify",[this,a]);return this};c.fn.ajaxForm=function(a){a=a||{};a.delegation=a.delegation&&c.isFunction(c.fn.on);if(!a.delegation&&0===this.length){var j=this.selector,e=this.context;if(!c.isReady&&j)return n("DOM not ready, queuing ajaxForm"),
c(function(){c(j,e).ajaxForm(a)}),this;n("terminating; zero elements found by selector"+(c.isReady?"":" (DOM not ready)"));return this}return a.delegation?(c(document).off("submit.form-plugin",this.selector,u).off("click.form-plugin",this.selector,s).on("submit.form-plugin",this.selector,a,u).on("click.form-plugin",this.selector,a,s),this):this.ajaxFormUnbind().bind("submit.form-plugin",a,u).bind("click.form-plugin",a,s)};c.fn.ajaxFormUnbind=function(){return this.unbind("submit.form-plugin click.form-plugin")};
c.fn.formToArray=function(a,j){var e=[];if(0===this.length)return e;var b=this[0],l=a?b.getElementsByTagName("*"):b.elements;if(!l)return e;var m,p,f,g,k,n;m=0;for(n=l.length;m<n;m++)if(k=l[m],(f=k.name)&&!k.disabled)if(a&&b.clk&&"image"==k.type)b.clk==k&&(e.push({name:f,value:c(k).val(),type:k.type}),e.push({name:f+".x",value:b.clk_x},{name:f+".y",value:b.clk_y}));else if((g=c.fieldValue(k,!0))&&g.constructor==Array){j&&j.push(k);p=0;for(k=g.length;p<k;p++)e.push({name:f,value:g[p]})}else if(B&&
"file"==k.type)if(j&&j.push(k),g=k.files,g.length)for(p=0;p<g.length;p++)e.push({name:f,value:g[p],type:k.type});else e.push({name:f,value:"",type:k.type});else null!==g&&"undefined"!=typeof g&&(j&&j.push(k),e.push({name:f,value:g,type:k.type,required:k.required}));if(!a&&b.clk&&(l=c(b.clk),m=l[0],(f=m.name)&&!m.disabled&&"image"==m.type))e.push({name:f,value:l.val()}),e.push({name:f+".x",value:b.clk_x},{name:f+".y",value:b.clk_y});return e};c.fn.formSerialize=function(a){return c.param(this.formToArray(a))};
c.fn.fieldSerialize=function(a){var j=[];this.each(function(){var e=this.name;if(e){var b=c.fieldValue(this,a);if(b&&b.constructor==Array)for(var l=0,m=b.length;l<m;l++)j.push({name:e,value:b[l]});else null!==b&&"undefined"!=typeof b&&j.push({name:this.name,value:b})}});return c.param(j)};c.fn.fieldValue=function(a){for(var j=[],e=0,b=this.length;e<b;e++){var l=c.fieldValue(this[e],a);null===l||("undefined"==typeof l||l.constructor==Array&&!l.length)||(l.constructor==Array?c.merge(j,l):j.push(l))}return j};
c.fieldValue=function(a,j){var e=a.name,b=a.type,l=a.tagName.toLowerCase();void 0===j&&(j=!0);if(j&&(!e||a.disabled||"reset"==b||"button"==b||("checkbox"==b||"radio"==b)&&!a.checked||("submit"==b||"image"==b)&&a.form&&a.form.clk!=a||"select"==l&&-1==a.selectedIndex))return null;if("select"==l){var m=a.selectedIndex;if(0>m)return null;for(var e=[],l=a.options,n=(b="select-one"==b)?m+1:l.length,m=b?m:0;m<n;m++){var f=l[m];if(f.selected){var g=f.value;g||(g=f.attributes&&f.attributes.value&&!f.attributes.value.specified?
f.text:f.value);if(b)return g;e.push(g)}}return e}return c(a).val()};c.fn.clearForm=function(a){return this.each(function(){c("input,select,textarea",this).clearFields(a)})};c.fn.clearFields=c.fn.clearInputs=function(a){var j=/^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;return this.each(function(){var e=this.type,b=this.tagName.toLowerCase();if(j.test(e)||"textarea"==b)this.value="";else if("checkbox"==e||"radio"==e)this.checked=!1;else if("select"==
b)this.selectedIndex=-1;else if("file"==e)/MSIE/.test(navigator.userAgent)?c(this).replaceWith(c(this).clone(!0)):c(this).val("");else if(a&&(!0===a&&/hidden/.test(e)||"string"==typeof a&&c(this).is(a)))this.value=""})};c.fn.resetForm=function(){return this.each(function(){("function"==typeof this.reset||"object"==typeof this.reset&&!this.reset.nodeType)&&this.reset()})};c.fn.enable=function(a){void 0===a&&(a=!0);return this.each(function(){this.disabled=!a})};c.fn.selected=function(a){void 0===a&&
(a=!0);return this.each(function(){var j=this.type;"checkbox"==j||"radio"==j?this.checked=a:"option"==this.tagName.toLowerCase()&&(j=c(this).parent("select"),a&&(j[0]&&"select-one"==j[0].type)&&j.find("option").selected(!1),this.selected=a)})};c.fn.ajaxSubmit.debug=!1})(jQuery);