public/static/index/js/jquery.js
// private function for handling file uploads (hat tip to YAHOO!)
private function for handling file uploads (hat tip to YAHOO!)
private function for handling file uploads ( hat tip to YAHOO! )
function fileUpload() {
        var form = $form[0];
        var opts = $.extend({}, $.ajaxSettings, options);
        var id = 'jqFormIO' + $.fn.ajaxSubmit.counter++;
        var $io = $('<iframe id="' + id + '" name="' + id + '" />');
        var io = $io[0];
        var op8 = $.browser.opera && window.opera.version() < 9;
        if ($.browser.msie || op8) io.src = 'javascript:false;document.write("");';
        $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
        var xhr = { 
            responseText: null,
            responseXML: null,
            status: 0,
            statusText: 'n/a',
            getAllResponseHeaders: function() {},
            getResponseHeader: function() {},
            setRequestHeader: function() {}
        };
        var g = opts.global;
        if (g && ! $.active++) $.event.trigger("ajaxStart");
        if (g) $.event.trigger("ajaxSend", [xhr, opts]);
        var cbInvoked = 0;
        var timedOut = 0;
        setTimeout(function() {
            $io.appendTo('body');
            io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
            var encAttr = form.encoding ? 'encoding' : 'enctype';
            var t = $form.attr('target');
            $form.attr({
                target:   id,
                method:  'POST',
                encAttr: 'multipart/form-data',
                action:   opts.url
            });
            if (opts.timeout)
                setTimeout(function() { timedOut = true; cb(); }, opts.timeout);
            form.submit();
            $form.attr('target', t); 
        }, 10);
        function cb() {
            if (cbInvoked++) return;
            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
            var ok = true;
            try {
                if (timedOut) throw 'timeout';
                var data, doc;
                doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
                xhr.responseText = doc.body ? doc.body.innerHTML : null;
                xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
                if (opts.dataType == 'json' || opts.dataType == 'script') {
                    var ta = doc.getElementsByTagName('textarea')[0];
                    data = ta ? ta.value : xhr.responseText;
                    if (opts.dataType == 'json')
                        eval("data = " + data);
                    else
                        $.globalEval(data);
                }
                else if (opts.dataType == 'xml') {
                    data = xhr.responseXML;
                    if (!data && xhr.responseText != null)
                        data = toXml(xhr.responseText);
                }
                else {
                    data = xhr.responseText;
                }
            }
            catch(e){
                ok = false;
                $.handleError(opts, xhr, 'error', e);
            }
            if (ok) {
                opts.success(data, 'success');
                if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
            }
            if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
            if (g && ! --$.active) $.event.trigger("ajaxStop");
            if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');
            setTimeout(function() { 
                $io.remove(); 
                xhr.responseXML = null;
            }, 100);
        };
        function toXml(s, doc) {
            if (window.ActiveXObject) {
                doc = new ActiveXObject('Microsoft.XMLDOM');
                doc.async = 'false';
                doc.loadXML(s);
            }
            else
                doc = (new DOMParser()).parseFromString(s, 'text/xml');
            return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
        };
    }
function fileUpload ( ) { var form = $form [ 0 ] ; var opts = $ . extend ( { } , $ . ajaxSettings , options ) ; var id = 'jqFormIO' + $ . fn . ajaxSubmit . counter ++ ; var $io = $ ( '<iframe id="' + id + '" name="' + id + '" />' ) ; var io = $io [ 0 ] ; var op8 = $ . browser . opera && window . opera . version ( ) < 9 ; if ( $ . browser . msie || op8 ) io . src = 'javascript:false;document.write("");' ; $io . css ( { position : 'absolute' , top : '-1000px' , left : '-1000px' } ) ; var xhr = { responseText : null , responseXML : null , status : 0 , statusText : 'n/a' , getAllResponseHeaders : function ( ) { } , getResponseHeader : function ( ) { } , setRequestHeader : function ( ) { } } ; var g = opts . global ; if ( g && ! $ . active ++ ) $ . event . trigger ( "ajaxStart" ) ; if ( g ) $ . event . trigger ( "ajaxSend" , [ xhr , opts ] ) ; var cbInvoked = 0 ; var timedOut = 0 ; setTimeout ( function ( ) { $io . appendTo ( 'body' ) ; io . attachEvent ? io . attachEvent ( 'onload' , cb ) : io . addEventListener ( 'load' , cb , false ) ; var encAttr = form . encoding ? 'encoding' : 'enctype' ; var t = $form . attr ( 'target' ) ; $form . attr ( { target : id , method : 'POST' , encAttr : 'multipart/form-data' , action : opts . url } ) ; if ( opts . timeout ) setTimeout ( function ( ) { timedOut = true ; cb ( ) ; } , opts . timeout ) ; form . submit ( ) ; $form . attr ( 'target' , t ) ; } , 10 ) ; function cb ( ) { if ( cbInvoked ++ ) return ; io . detachEvent ? io . detachEvent ( 'onload' , cb ) : io . removeEventListener ( 'load' , cb , false ) ; var ok = true ; try { if ( timedOut ) throw 'timeout' ; var data , doc ; doc = io . contentWindow ? io . contentWindow . document : io . contentDocument ? io . contentDocument : io . document ; xhr . responseText = doc . body ? doc . body . innerHTML : null ; xhr . responseXML = doc . XMLDocument ? doc . XMLDocument : doc ; if ( opts . dataType == 'json' || opts . dataType == 'script' ) { var ta = doc . getElementsByTagName ( 'textarea' ) [ 0 ] ; data = ta ? ta . value : xhr . responseText ; if ( opts . dataType == 'json' ) eval ( "data = " + data ) ; else $ . globalEval ( data ) ; } else if ( opts . dataType == 'xml' ) { data = xhr . responseXML ; if ( ! data && xhr . responseText != null ) data = toXml ( xhr . responseText ) ; } else { data = xhr . responseText ; } } catch ( e ) { ok = false ; $ . handleError ( opts , xhr , 'error' , e ) ; } if ( ok ) { opts . success ( data , 'success' ) ; if ( g ) $ . event . trigger ( "ajaxSuccess" , [ xhr , opts ] ) ; } if ( g ) $ . event . trigger ( "ajaxComplete" , [ xhr , opts ] ) ; if ( g && ! -- $ . active ) $ . event . trigger ( "ajaxStop" ) ; if ( opts . complete ) opts . complete ( xhr , ok ? 'success' : 'error' ) ; setTimeout ( function ( ) { $io . remove ( ) ; xhr . responseXML = null ; } , 100 ) ; } ; function toXml ( s , doc ) { if ( window . ActiveXObject ) { doc = new ActiveXObject ( 'Microsoft.XMLDOM' ) ; doc . async = 'false' ; doc . loadXML ( s ) ; } else doc = ( new DOMParser ( ) ) . parseFromString ( s , 'text/xml' ) ; return ( doc && doc . documentElement && doc . documentElement . tagName != 'parsererror' ) ? doc : null ; } ; }
private function for handling file uploads (hat tip to YAHOO!)
private function for handling file uploads ( hat tip to YAHOO! )
// mock object // trigger ajax global events so that activity/block indicators work like normal // take a breath so that pending repaints get some cpu time before the upload starts // jQuery's event binding doesn't work for iframe events in IE // make sure form attrs are set // support timout // reset target // extract the server response from the iframe // ordering of these callbacks/triggers is odd, but that's how $.ajax does it // clean up