xhrform.js - jscancer - Javascript crap (relatively small)
 (HTM) git clone git://git.codemadness.org/jscancer
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       xhrform.js (2035B)
       ---
            1 function xhr_form_config(el) {
            2         return {
            3                 "form" : el.form,
            4                 "fn" : window[el.getAttribute("data-xhr-status")],
            5                 "method" : el.getAttribute("data-xhr-method") || (el.form ? el.form.method : ""),
            6                 "action" : el.getAttribute("data-xhr-action") || (el.form ? el.form.action : ""),
            7                 "encoding" : el.getAttribute("data-xhr-encoding") || (el.form ? el.form.encoding : ""),
            8                 "timeout" : el.getAttribute("data-xhr-timeout")
            9         };
           10 }
           11 
           12 function xhr_form_send(c, formdata) {
           13         var x = new(XMLHttpRequest);
           14         var encoding = c.encoding || "application/x-www-form-urlencoded";
           15         x.open(c.method || "get", c.action || "", true); // async
           16         x.setRequestHeader("Content-Type", encoding);
           17         x.setRequestHeader("X-Requested-With", "XMLHttpRequest");
           18         x.timeout = parseInt(c.timeout || "10000");
           19         x.onreadystatechange = function () {
           20                 if (x.readyState != 4)
           21                         return;
           22                 if (typeof(c.fn) == "function")
           23                         c.fn(x, formdata);
           24         };
           25         var data = "";
           26         // FormData is normally sent as multipart encoded.
           27         if (encoding === "application/x-www-form-urlencoded" ) {
           28                 var l = [];
           29                 for (var d of formdata.entries())
           30                         l.push(d[0] + "=" + encodeURIComponent(String(d[1])));
           31                 data = l.join("&");
           32         } else {
           33                 data = formdata;
           34         }
           35         x.send(data);
           36 }
           37 
           38 function xhr_form_submit(el) {
           39         var d = new FormData(el.form);
           40         d.append(el.name, el.value); // add submit button itself.
           41         return xhr_form_send(xhr_form_config(el), d);
           42 }
           43 
           44 /* initialize forms automatically on input submit which has a data-xhr attribute */
           45 document.addEventListener("click", function(e) {
           46         if (e.target === null || e.target.type !== "submit" ||
           47             e.target.tagName !== "INPUT" ||
           48             !e.target.form || e.target.getAttribute("data-xhr") === null)
           49                 return;
           50 
           51         if (e.target.form.noValidate || // disabled validation on form.
           52             e.target.formNoValidate || // disabled validation on element.
           53             !e.target.form.reportValidity || e.target.form.reportValidity()) // failed validation.
           54                 xhr_form_submit(e.target);
           55 
           56         // prevent default action.
           57         e.preventDefault();
           58         return !!e.stopPropagation();
           59 }, false);