Changeset 12450


Ignore:
Timestamp:
May 21, 2011, 2:51:34 AM (10 years ago)
Author:
livings124
Message:

bump jquery.form to 2.75

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/web/javascript/jquery/jquery.form.js

    r11326 r12450  
    11/*!
    22 * jQuery Form Plugin
    3  * version: 2.47 (04-SEP-2010)
     3 * version: 2.75 (20-MAY-2011)
    44 * @requires jQuery v1.3.2 or later
    55 *
     
    1919
    2020        $(document).ready(function() {
    21                 $('#myForm').bind('submit', function() {
     21                $('#myForm').bind('submit', function(e) {
     22                        e.preventDefault(); // <-- important
    2223                        $(this).ajaxSubmit({
    2324                                target: '#output'
    2425                        });
    25                         return false; // <-- important!
    2626                });
    2727        });
     
    5555        }
    5656
    57         var url = $.trim(this.attr('action'));
     57        var action = this.attr('action');
     58        var url = (typeof action === 'string') ? $.trim(action) : '';
     59        url = url || window.location.href || '';
    5860        if (url) {
    5961                // clean url (don't include hash vaue)
    6062                url = (url.match(/^([^#]+)/)||[])[1];
    6163        }
    62         url = url || window.location.href || '';
    6364
    6465        options = $.extend(true, {
    6566                url:  url,
    66                 type: this.attr('method') || 'GET',
     67                success: $.ajaxSettings.success,
     68                type: this[0].getAttribute('method') || 'GET', // IE7 massage (see issue 57)
    6769                iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
    6870        }, options);
     
    168170   }
    169171   else {
    170            $.ajax(options);
     172                $.ajax(options);
    171173   }
    172174
     
    190192                s.context = s.context || s;
    191193                var id = 'jqFormIO' + (new Date().getTime()), fn = '_'+id;
    192                 window[fn] = function() {
    193                         var f = $io.data('form-plugin-onload');
    194                         if (f) {
    195                                 f();
    196                                 window[fn] = undefined;
    197                                 try { delete window[fn]; } catch(e){}
    198                         }
    199                 }
    200                 var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ s.iframeSrc +'" onload="window[\'_\'+this.id]()" />');
     194                var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ s.iframeSrc +'" />');
    201195                var io = $io[0];
    202196
     
    212206                        getResponseHeader: function() {},
    213207                        setRequestHeader: function() {},
    214                         abort: function() {
     208                        abort: function(status) {
     209                                var e = (status === 'timeout' ? 'timeout' : 'aborted');
     210                                log('aborting upload... ' + e);
    215211                                this.aborted = 1;
    216212                                $io.attr('src', s.iframeSrc); // abort op in progress
     213                                xhr.error = e;
     214                                s.error && s.error.call(s.context, xhr, e, e);
     215                                g && $.event.trigger("ajaxError", [xhr, s, e]);
     216                                s.complete && s.complete.call(s.context, xhr, e);
    217217                        }
    218218                };
     
    237237                }
    238238
    239                 var cbInvoked = false;
    240                 var timedOut = 0;
     239                var timedOut = 0, timeoutHandle;
    241240
    242241                // add submitting element to data if we know it
     
    278277                        // support timout
    279278                        if (s.timeout) {
    280                                 setTimeout(function() { timedOut = true; cb(); }, s.timeout);
     279                                timeoutHandle = setTimeout(function() { timedOut = true; cb(true); }, s.timeout);
    281280                        }
    282281
     
    294293                                // add iframe to doc and submit the form
    295294                                $io.appendTo('body');
    296                                 $io.data('form-plugin-onload', cb);
     295                io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
    297296                                form.submit();
    298297                        }
     
    316315                }
    317316       
    318                 var data, doc, domCheckCount = 50;
    319 
    320                 function cb() {
    321                         if (cbInvoked) {
     317                var data, doc, domCheckCount = 50, callbackProcessed;
     318
     319                function cb(e) {
     320                        if (xhr.aborted || callbackProcessed) {
    322321                                return;
    323322                        }
    324 
    325                         $io.removeData('form-plugin-onload');
     323                        if (e === true && xhr) {
     324                                xhr.abort('timeout');
     325                                return;
     326                        }
    326327                       
     328                        var doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
     329                        if (!doc || doc.location.href == s.iframeSrc) {
     330                                // response not received yet
     331                                if (!timedOut)
     332                                        return;
     333                        }
     334            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
     335
    327336                        var ok = true;
    328337                        try {
     
    330339                                        throw 'timeout';
    331340                                }
    332                                 // extract the server response from the iframe
    333                                 doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
    334                                
     341
    335342                                var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
    336343                                log('isXml='+isXml);
     
    349356
    350357                                //log('response detected');
    351                                 cbInvoked = true;
    352                                 xhr.responseText = doc.documentElement ? doc.documentElement.innerHTML : null;
     358                                xhr.responseText = doc.body ? doc.body.innerHTML : doc.documentElement ? doc.documentElement.innerHTML : null;
    353359                                xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
     360                                if (isXml)
     361                                        s.dataType = 'xml';
    354362                                xhr.getResponseHeader = function(header){
    355363                                        var headers = {'content-type': s.dataType};
     
    357365                                };
    358366
    359                                 var scr = /(json|script)/.test(s.dataType);
     367                                var scr = /(json|script|text)/.test(s.dataType);
    360368                                if (scr || s.textarea) {
    361369                                        // see if user embedded response in textarea
     
    367375                                                // account for browsers injecting pre around json response
    368376                                                var pre = doc.getElementsByTagName('pre')[0];
     377                                                var b = doc.getElementsByTagName('body')[0];
    369378                                                if (pre) {
    370                                                         xhr.responseText = pre.innerHTML;
     379                                                        xhr.responseText = pre.textContent ? pre.textContent : pre.innerHTML;
     380                                                }
     381                                                else if (b) {
     382                                                        xhr.responseText = b.innerHTML;
    371383                                                }
    372384                                        }                         
     
    375387                                        xhr.responseXML = toXml(xhr.responseText);
    376388                                }
    377                                 data = $.httpData(xhr, s.dataType);
     389                               
     390                                data = httpData(xhr, s.dataType, s);
    378391                        }
    379392                        catch(e){
     
    381394                                ok = false;
    382395                                xhr.error = e;
    383                                 $.handleError(s, xhr, 'error', e);
     396                                s.error && s.error.call(s.context, xhr, 'error', e);
     397                                g && $.event.trigger("ajaxError", [xhr, s, e]);
     398                        }
     399                       
     400                        if (xhr.aborted) {
     401                                log('upload aborted');
     402                                ok = false;
    384403                        }
    385404
    386405                        // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
    387406                        if (ok) {
    388                                 s.success.call(s.context, data, 'success', xhr);
    389                                 if (g) {
    390                                         $.event.trigger("ajaxSuccess", [xhr, s]);
    391                                 }
    392                         }
    393                         if (g) {
    394                                 $.event.trigger("ajaxComplete", [xhr, s]);
    395                         }
     407                                s.success && s.success.call(s.context, data, 'success', xhr);
     408                                g && $.event.trigger("ajaxSuccess", [xhr, s]);
     409                        }
     410                       
     411                        g && $.event.trigger("ajaxComplete", [xhr, s]);
     412
    396413                        if (g && ! --$.active) {
    397414                                $.event.trigger("ajaxStop");
    398415                        }
    399                         if (s.complete) {
    400                                 s.complete.call(s.context, xhr, ok ? 'success' : 'error');
    401                         }
     416                       
     417                        s.complete && s.complete.call(s.context, xhr, ok ? 'success' : 'error');
     418
     419                        callbackProcessed = true;
     420                        if (s.timeout)
     421                                clearTimeout(timeoutHandle);
    402422
    403423                        // clean up
     
    409429                }
    410430
    411                 function toXml(s, doc) {
     431                var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
    412432                        if (window.ActiveXObject) {
    413433                                doc = new ActiveXObject('Microsoft.XMLDOM');
     
    418438                                doc = (new DOMParser()).parseFromString(s, 'text/xml');
    419439                        }
    420                         return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
    421                 }
     440                        return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
     441                };
     442                var parseJSON = $.parseJSON || function(s) {
     443                        return window['eval']('(' + s + ')');
     444                };
     445               
     446                var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
     447                        var ct = xhr.getResponseHeader('content-type') || '',
     448                                xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
     449                                data = xml ? xhr.responseXML : xhr.responseText;
     450
     451                        if (xml && data.documentElement.nodeName === 'parsererror') {
     452                                $.error && $.error('parsererror');
     453                        }
     454                        if (s && s.dataFilter) {
     455                                data = s.dataFilter(data, type);
     456                        }
     457                        if (typeof data === 'string') {
     458                                if (type === 'json' || !type && ct.indexOf('json') >= 0) {
     459                                        data = parseJSON(data);
     460                                } else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
     461                                        $.globalEval(data);
     462                                }
     463                        }
     464                        return data;
     465                };
    422466        }
    423467};
     
    518562        }
    519563       
    520         var i,j,n,v,el;
     564        var i,j,n,v,el,max,jmax;
    521565        for(i=0, max=els.length; i < max; i++) {
    522566                el = els[i];
Note: See TracChangeset for help on using the changeset viewer.