Changeset 533

Show
Ignore:
Timestamp:
01/20/06 14:57:23 (3 years ago)
Author:
therve@gmail.com
Message:

Move some things out of new to controls, update sortable

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mochikit/branches/scriptaculous/MochiKit/Controls.js

    r519 r533  
    3737 
    3838***/ 
     39 
     40MochiKit.Form = { 
     41    serialize: function (form) { 
     42        var elements = MochiKit.Form.getElements(form); 
     43        var queryComponents = new Array(); 
     44 
     45        for (var i = 0; i < elements.length; i++) { 
     46            var queryComponent = MochiKit.Form.serializeElement(elements[i]); 
     47            if (queryComponent) { 
     48                queryComponents.push(queryComponent); 
     49            } 
     50        } 
     51 
     52        return queryComponents.join('&'); 
     53    }, 
     54 
     55    getElements: function (form) { 
     56        form = MochiKit.DOM.getElement(form); 
     57        var elements = new Array(); 
     58 
     59        for (tagName in MochiKit.Form.Serializers) { 
     60            var tagElements = form.getElementsByTagName(tagName); 
     61            for (var j = 0; j < tagElements.length; j++) { 
     62                elements.push(tagElements[j]); 
     63            } 
     64        } 
     65        return elements; 
     66    }, 
     67 
     68    serializeElement: function (element) { 
     69        element = MochiKit.DOM.getElement(element); 
     70        var method = element.tagName.toLowerCase(); 
     71        var parameter = MochiKit.Form.Serializers[method](element); 
     72 
     73        if (parameter) { 
     74            var key = encodeURIComponent(parameter[0]); 
     75            if (key.length === 0) { 
     76                return; 
     77            } 
     78 
     79            if (parameter[1].constructor != Array) { 
     80                parameter[1] = [parameter[1]]; 
     81            } 
     82 
     83            return parameter[1].map(function (value) { 
     84                return key + '=' + encodeURIComponent(value); 
     85            }).join('&'); 
     86        } 
     87    } 
     88}; 
     89 
     90MochiKit.Form.Serializers = { 
     91    input: function (element) { 
     92        switch (element.type.toLowerCase()) { 
     93            case 'submit': 
     94            case 'hidden': 
     95            case 'password': 
     96            case 'text': 
     97                return MochiKit.Form.Serializers.textarea(element); 
     98            case 'checkbox': 
     99            case 'radio': 
     100                return MochiKit.Form.Serializers.inputSelector(element); 
     101        } 
     102        return false; 
     103    }, 
     104 
     105    inputSelector: function (element) { 
     106        if (element.checked) { 
     107            return [element.name, element.value]; 
     108        } 
     109    }, 
     110 
     111    textarea: function (element) { 
     112        return [element.name, element.value]; 
     113    }, 
     114 
     115    select: function (element) { 
     116        return MochiKit.Form.Serializers[element.type == 'select-one' ? 
     117        'selectOne' : 'selectMany'](element); 
     118    }, 
     119 
     120    selectOne: function (element) { 
     121        var value = '', opt, index = element.selectedIndex; 
     122        if (index >= 0) { 
     123            opt = element.options[index]; 
     124            value = opt.value; 
     125            if (!value && !('value' in opt)) { 
     126                value = opt.text; 
     127            } 
     128        } 
     129        return [element.name, value]; 
     130    }, 
     131 
     132    selectMany: function (element) { 
     133        var value = new Array(); 
     134        for (var i = 0; i < element.length; i++) { 
     135            var opt = element.options[i]; 
     136            if (opt.selected) { 
     137                var optValue = opt.value; 
     138                if (!optValue && !('value' in opt)) { 
     139                    optValue = opt.text; 
     140                } 
     141                value.push(optValue); 
     142            } 
     143        } 
     144        return [element.name, value]; 
     145    } 
     146}; 
     147 
     148var Ajax = { 
     149    activeRequestCount: 0 
     150}; 
     151 
     152Ajax.Responders = { 
     153    responders: [], 
     154 
     155    register: function (responderToAdd) { 
     156        if (MochiKit.Base.find(this.responders, responderToAdd) == -1) { 
     157            this.responders.push(responderToAdd); 
     158        } 
     159    }, 
     160 
     161    unregister: function (responderToRemove) { 
     162        this.responders = this.responders.without(responderToRemove); 
     163    }, 
     164 
     165    dispatch: function (callback, request, transport, json) { 
     166        MochiKit.Iter.forEach(this.responders, function (responder) { 
     167            if (responder[callback] &&  
     168                typeof(responder[callback]) == 'function') { 
     169                try { 
     170                    responder[callback].apply(responder, [request, transport, json]); 
     171                } catch (e) {} 
     172            } 
     173        }); 
     174    } 
     175}; 
     176 
     177Ajax.Responders.register({ 
     178    onCreate: function () { 
     179        Ajax.activeRequestCount++; 
     180    }, 
     181 
     182    onComplete: function () { 
     183        Ajax.activeRequestCount--; 
     184    } 
     185}); 
     186 
     187Ajax.Base = function () {}; 
     188 
     189Ajax.Base.prototype = { 
     190    setOptions: function (options) { 
     191        this.options = { 
     192            method: 'post', 
     193            asynchronous: true, 
     194            parameters:   '' 
     195        } 
     196        MochiKit.Base.update(this.options, options || {}); 
     197    }, 
     198 
     199    responseIsSuccess: function () { 
     200        return this.transport.status == undefined 
     201            || this.transport.status === 0 
     202            || (this.transport.status >= 200 && this.transport.status < 300); 
     203    }, 
     204 
     205    responseIsFailure: function () { 
     206        return !this.responseIsSuccess(); 
     207    } 
     208}; 
     209 
     210Ajax.Request = function (url, options) { 
     211    this.__init__(url, options); 
     212}; 
     213 
     214Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 
     215                       'Interactive', 'Complete']; 
     216 
     217MochiKit.Base.update(Ajax.Request.prototype, Ajax.Base.prototype); 
     218 
     219MochiKit.Base.update(Ajax.Request.prototype, { 
     220    __init__: function (url, options) { 
     221        this.transport = MochiKit.Async.getXMLHttpRequest(); 
     222        this.setOptions(options); 
     223        this.request(url); 
     224    }, 
     225 
     226    request: function (url) { 
     227        var parameters = this.options.parameters || ''; 
     228        if (parameters.length > 0){ 
     229            parameters += '&_='; 
     230        } 
     231 
     232        try { 
     233            this.url = url; 
     234            if (this.options.method == 'get' && parameters.length > 0) { 
     235                this.url += (this.url.match(/\?/) ? '&' : '?') + parameters; 
     236            } 
     237            Ajax.Responders.dispatch('onCreate', this, this.transport); 
     238 
     239            this.transport.open(this.options.method, this.url, 
     240                                this.options.asynchronous); 
     241 
     242            if (this.options.asynchronous) { 
     243                this.transport.onreadystatechange = MochiKit.Base.bind(this.onStateChange, this); 
     244                setTimeout(MochiKit.Base.bind(function () { 
     245                    this.respondToReadyState(1); 
     246                }, this), 10); 
     247            } 
     248 
     249            this.setRequestHeaders(); 
     250 
     251            var body = this.options.postBody ? this.options.postBody : parameters; 
     252            this.transport.send(this.options.method == 'post' ? body : null); 
     253 
     254        } catch (e) { 
     255            this.dispatchException(e); 
     256        } 
     257    }, 
     258 
     259    setRequestHeaders: function () { 
     260        var requestHeaders = ['X-Requested-With', 'XMLHttpRequest']; 
     261 
     262        if (this.options.method == 'post') { 
     263            requestHeaders.push('Content-type', 
     264                                'application/x-www-form-urlencoded'); 
     265 
     266            /* Force 'Connection: close' for Mozilla browsers to work around 
     267             * a bug where XMLHttpRequest sends an incorrect Content-length 
     268             * header. See Mozilla Bugzilla #246651. 
     269             */ 
     270            if (this.transport.overrideMimeType) { 
     271                requestHeaders.push('Connection', 'close'); 
     272            } 
     273        } 
     274 
     275        if (this.options.requestHeaders) { 
     276            requestHeaders.push.apply(requestHeaders, this.options.requestHeaders); 
     277        } 
     278 
     279        for (var i = 0; i < requestHeaders.length; i += 2) { 
     280            this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]); 
     281        } 
     282    }, 
     283 
     284    onStateChange: function () { 
     285        var readyState = this.transport.readyState; 
     286        if (readyState != 1) { 
     287            this.respondToReadyState(this.transport.readyState); 
     288        } 
     289    }, 
     290 
     291    header: function (name) { 
     292        try { 
     293          return this.transport.getResponseHeader(name); 
     294        } catch (e) {} 
     295    }, 
     296 
     297    evalJSON: function () { 
     298        try { 
     299          return eval(this.header('X-JSON')); 
     300        } catch (e) {} 
     301    }, 
     302 
     303    evalResponse: function () { 
     304        try { 
     305          return eval(this.transport.responseText); 
     306        } catch (e) { 
     307          this.dispatchException(e); 
     308        } 
     309    }, 
     310 
     311    respondToReadyState: function (readyState) { 
     312        var event = Ajax.Request.Events[readyState]; 
     313        var transport = this.transport, json = this.evalJSON(); 
     314 
     315        if (event == 'Complete') { 
     316            try { 
     317                (this.options['on' + this.transport.status] 
     318                || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')] 
     319                || MochiKit.Base.emptyFunction)(transport, json); 
     320            } catch (e) { 
     321                this.dispatchException(e); 
     322            } 
     323 
     324            if ((this.header('Content-type') || '').match(/^text\/javascript/i)) { 
     325                this.evalResponse(); 
     326            } 
     327        } 
     328 
     329        try { 
     330            (this.options['on' + event] || MochiKit.Base.emptyFunction)(transport, json); 
     331            Ajax.Responders.dispatch('on' + event, this, transport, json); 
     332        } catch (e) { 
     333            this.dispatchException(e); 
     334        } 
     335 
     336        /* Avoid memory leak in MSIE: clean up the oncomplete event handler */ 
     337        if (event == 'Complete') { 
     338            this.transport.onreadystatechange = MochiKit.Base.emptyFunction; 
     339        } 
     340    }, 
     341 
     342    dispatchException: function (exception) { 
     343        (this.options.onException || MochiKit.Base.emptyFunction)(this, exception); 
     344        Ajax.Responders.dispatch('onException', this, exception); 
     345    } 
     346}); 
     347 
     348Ajax.Updater = function (container, url, options) { 
     349    this.__init__(container, url, options); 
     350}; 
     351 
     352MochiKit.Base.update(Ajax.Updater.prototype, Ajax.Request.prototype); 
     353 
     354MochiKit.Base.update(Ajax.Updater.prototype, { 
     355    __init__: function (container, url, options) { 
     356        this.containers = { 
     357            success: container.success ? MochiKit.DOM.getElement(container.success) : MochiKit.DOM.getElement(container), 
     358            failure: container.failure ? MochiKit.DOM.getElement(container.failure) : 
     359                (container.success ? null : MochiKit.DOM.getElement(container)) 
     360        } 
     361        this.transport = MochiKit.Async.getXMLHttpRequest(); 
     362        this.setOptions(options); 
     363 
     364        var onComplete = this.options.onComplete || MochiKit.Base.emptyFunction; 
     365        this.options.onComplete = MochiKit.Base.bind(function (transport, object) { 
     366            this.updateContent(); 
     367            onComplete(transport, object); 
     368        }, this); 
     369 
     370        this.request(url); 
     371    }, 
     372 
     373    updateContent: function () { 
     374        var receiver = this.responseIsSuccess() ? 
     375            this.containers.success : this.containers.failure; 
     376        var response = this.transport.responseText; 
     377 
     378        if (!this.options.evalScripts) { 
     379            response = MochiKit.Base.stripScripts(response); 
     380        } 
     381 
     382        if (receiver) { 
     383            if (this.options.insertion) { 
     384                new this.options.insertion(receiver, response); 
     385            } else { 
     386                MochiKit.DOM.getElement(receiver).innerHTML = 
     387                    MochiKit.Base.stripScripts(response); 
     388                setTimeout(function() { 
     389                    MochiKit.Base.evalScripts(response); 
     390                }, 10); 
     391            } 
     392        } 
     393 
     394        if (this.responseIsSuccess()) { 
     395            if (this.onComplete) { 
     396                setTimeout(MochiKit.Base.bind(this.onComplete, this), 10); 
     397            } 
     398        } 
     399    } 
     400}); 
     401 
     402var Field = { 
     403    clear: function () { 
     404        for (var i = 0; i < arguments.length; i++) { 
     405            MochiKit.DOM.getElement(arguments[i]).value = ''; 
     406        } 
     407    }, 
     408 
     409    focus: function (element) { 
     410        MochiKit.DOM.getElement(element).focus(); 
     411    }, 
     412 
     413    present: function () { 
     414        for (var i = 0; i < arguments.length; i++) { 
     415            if (MochiKit.DOM.getElement(arguments[i]).value == '') { 
     416                return false; 
     417            } 
     418        } 
     419        return true; 
     420    }, 
     421 
     422    select: function (element) { 
     423        MochiKit.DOM.getElement(element).select(); 
     424    }, 
     425 
     426    activate: function (element) { 
     427        element = MochiKit.DOM.getElement(element); 
     428        element.focus(); 
     429        if (element.select) { 
     430            element.select(); 
     431        } 
     432    }, 
     433     
     434    scrollFreeActivate: function (field) { 
     435        setTimeout(function () { 
     436            Field.activate(field); 
     437        }, 1); 
     438    } 
     439}; 
    39440 
    40441var Autocompleter = {}; 
  • mochikit/branches/scriptaculous/MochiKit/DragAndDrop.js

    r523 r533  
    181181 
    182182        if (this.options.accept) { 
    183             this.options.accept = MochiKit.Iter.flatten([this.options.accept]); 
     183            this.options.accept = MochiKit.Base.flatten([this.options.accept]); 
    184184        } 
    185185 
  • mochikit/branches/scriptaculous/MochiKit/New.js

    r519 r533  
    3939        }, MochiKit.Base.extractScripts(str))); 
    4040    }, 
     41     
     42    flatten: function (array) { 
     43        return MochiKit.Base.map(function (item) { 
     44            if (item.constructor == Array) { 
     45                return MochiKit.Base.flatten(item); 
     46            } else { 
     47                return item; 
     48            } 
     49        }, array); 
     50    }, 
    4151 
    4252    isIE: function () { 
     
    5868    isOpera: function () { 
    5969        return navigator.userAgent.indexOf('Opera') > 0; 
    60     } 
    61 }); 
    62  
    63 MochiKit.Base.update(MochiKit.Iter, { 
    64     flatten: function (array) { 
    65         return MochiKit.Iter.list(MochiKit.Iter.imap(function (item) { 
    66             if (item.constructor == Array) { 
    67                 return MochiKit.Iter.list(MochiKit.Iter.flatten(item)); 
    68             } else { 
    69                 return item; 
    70             } 
    71         }, array)); 
    7270    } 
    7371}); 
     
    221219 
    222220    collectTextNodes: function (element) { 
    223         return MochiKit.Iter.flatten(MochiKit.Iter.imap(function (node) { 
     221        return MochiKit.Base.flatten(MochiKit.Base.map(function (node) { 
    224222            if (node.nodeType == 3) { 
    225223                return node.nodeValue; 
     
    232230 
    233231    collectTextNodesIgnoreClass: function (element, className) { 
    234         return MochiKit.Iter.flatten(MochiKit.Iter.imap(function (node) { 
     232        return MochiKit.Base.flatten(MochiKit.Base.map(function (node) { 
    235233            if (node.nodeType == 3) { 
    236234                return node.nodeValue; 
     
    508506MochiKit.Event.observe(window, 'unload', MochiKit.Event.unloadCache, false); 
    509507 
    510 MochiKit.Form = { 
    511     serialize: function (form) { 
    512         var elements = MochiKit.Form.getElements(form); 
    513         var queryComponents = new Array(); 
    514  
    515         for (var i = 0; i < elements.length; i++) { 
    516             var queryComponent = MochiKit.Form.serializeElement(elements[i]); 
    517             if (queryComponent) { 
    518                 queryComponents.push(queryComponent); 
    519             } 
    520         } 
    521  
    522         return queryComponents.join('&'); 
    523     }, 
    524  
    525     getElements: function (form) { 
    526         form = MochiKit.DOM.getElement(form); 
    527         var elements = new Array(); 
    528  
    529         for (tagName in MochiKit.Form.Serializers) { 
    530             var tagElements = form.getElementsByTagName(tagName); 
    531             for (var j = 0; j < tagElements.length; j++) { 
    532                 elements.push(tagElements[j]); 
    533             } 
    534         } 
    535         return elements; 
    536     }, 
    537  
    538     serializeElement: function (element) { 
    539         element = MochiKit.DOM.getElement(element); 
    540         var method = element.tagName.toLowerCase(); 
    541         var parameter = MochiKit.Form.Serializers[method](element); 
    542  
    543         if (parameter) { 
    544             var key = encodeURIComponent(parameter[0]); 
    545             if (key.length === 0) { 
    546                 return; 
    547             } 
    548  
    549             if (parameter[1].constructor != Array) { 
    550                 parameter[1] = [parameter[1]]; 
    551             } 
    552  
    553             return parameter[1].map(function (value) { 
    554                 return key + '=' + encodeURIComponent(value); 
    555             }).join('&'); 
    556         } 
    557     } 
    558 }; 
    559  
    560 MochiKit.Form.Serializers = { 
    561     input: function (element) { 
    562         switch (element.type.toLowerCase()) { 
    563             case 'submit': 
    564             case 'hidden': 
    565             case 'password': 
    566             case 'text': 
    567                 return MochiKit.Form.Serializers.textarea(element); 
    568             case 'checkbox': 
    569             case 'radio': 
    570                 return MochiKit.Form.Serializers.inputSelector(element); 
    571         } 
    572         return false; 
    573     }, 
    574  
    575     inputSelector: function (element) { 
    576         if (element.checked) { 
    577             return [element.name, element.value]; 
    578         } 
    579     }, 
    580  
    581     textarea: function (element) { 
    582         return [element.name, element.value]; 
    583     }, 
    584  
    585     select: function (element) { 
    586         return MochiKit.Form.Serializers[element.type == 'select-one' ? 
    587         'selectOne' : 'selectMany'](element); 
    588     }, 
    589  
    590     selectOne: function (element) { 
    591         var value = '', opt, index = element.selectedIndex; 
    592         if (index >= 0) { 
    593             opt = element.options[index]; 
    594             value = opt.value; 
    595             if (!value && !('value' in opt)) { 
    596                 value = opt.text; 
    597             } 
    598         } 
    599         return [element.name, value]; 
    600     }, 
    601  
    602     selectMany: function (element) { 
    603         var value = new Array(); 
    604         for (var i = 0; i < element.length; i++) { 
    605             var opt = element.options[i]; 
    606             if (opt.selected) { 
    607                 var optValue = opt.value; 
    608                 if (!optValue && !('value' in opt)) { 
    609                     optValue = opt.text; 
    610                 } 
    611                 value.push(optValue); 
    612             } 
    613         } 
    614         return [element.name, value]; 
    615     } 
    616 }; 
    617  
    618 var Ajax = { 
    619     activeRequestCount: 0 
    620 }; 
    621  
    622 Ajax.Responders = { 
    623     responders: [], 
    624  
    625     register: function (responderToAdd) { 
    626         if (MochiKit.Base.find(this.responders, responderToAdd) == -1) { 
    627             this.responders.push(responderToAdd); 
    628         } 
    629     }, 
    630  
    631     unregister: function (responderToRemove) { 
    632         this.responders = this.responders.without(responderToRemove); 
    633     }, 
    634  
    635     dispatch: function (callback, request, transport, json) { 
    636         MochiKit.Iter.forEach(this.responders, function (responder) { 
    637             if (responder[callback] &&  
    638                 typeof(responder[callback]) == 'function') { 
    639                 try { 
    640                     responder[callback].apply(responder, [request, transport, json]); 
    641                 } catch (e) {} 
    642             } 
    643         }); 
    644     } 
    645 }; 
    646  
    647 Ajax.Responders.register({ 
    648     onCreate: function () { 
    649         Ajax.activeRequestCount++; 
    650     }, 
    651  
    652     onComplete: function () { 
    653         Ajax.activeRequestCount--; 
    654     } 
    655 }); 
    656  
    657 Ajax.Base = function () {}; 
    658  
    659 Ajax.Base.prototype = { 
    660     setOptions: function (options) { 
    661         this.options = { 
    662             method: 'post', 
    663             asynchronous: true, 
    664             parameters:   '' 
    665         } 
    666         MochiKit.Base.update(this.options, options || {}); 
    667     }, 
    668  
    669     responseIsSuccess: function () { 
    670         return this.transport.status == undefined 
    671             || this.transport.status === 0 
    672             || (this.transport.status >= 200 && this.transport.status < 300); 
    673     }, 
    674  
    675     responseIsFailure: function () { 
    676         return !this.responseIsSuccess(); 
    677     } 
    678 }; 
    679  
    680 Ajax.Request = function (url, options) { 
    681     this.__init__(url, options); 
    682 }; 
    683  
    684 Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 
    685                        'Interactive', 'Complete']; 
    686  
    687 MochiKit.Base.update(Ajax.Request.prototype, Ajax.Base.prototype); 
    688  
    689 MochiKit.Base.update(Ajax.Request.prototype, { 
    690     __init__: function (url, options) { 
    691         this.transport = MochiKit.Async.getXMLHttpRequest(); 
    692         this.setOptions(options); 
    693         this.request(url); 
    694     }, 
    695  
    696     request: function (url) { 
    697         var parameters = this.options.parameters || ''; 
    698         if (parameters.length > 0){ 
    699             parameters += '&_='; 
    700         } 
    701  
    702         try { 
    703             this.url = url; 
    704             if (this.options.method == 'get' && parameters.length > 0) { 
    705                 this.url += (this.url.match(/\?/) ? '&' : '?') + parameters; 
    706             } 
    707             Ajax.Responders.dispatch('onCreate', this, this.transport); 
    708  
    709             this.transport.open(this.options.method, this.url, 
    710                                 this.options.asynchronous); 
    711  
    712             if (this.options.asynchronous) { 
    713                 this.transport.onreadystatechange = MochiKit.Base.bind(this.onStateChange, this); 
    714                 setTimeout(MochiKit.Base.bind(function () { 
    715                     this.respondToReadyState(1); 
    716                 }, this), 10); 
    717             } 
    718  
    719             this.setRequestHeaders(); 
    720  
    721             var body = this.options.postBody ? this.options.postBody : parameters; 
    722             this.transport.send(this.options.method == 'post' ? body : null); 
    723  
    724         } catch (e) { 
    725             this.dispatchException(e); 
    726         } 
    727     }, 
    728  
    729     setRequestHeaders: function () { 
    730         var requestHeaders = ['X-Requested-With', 'XMLHttpRequest']; 
    731  
    732         if (this.options.method == 'post') { 
    733             requestHeaders.push('Content-type', 
    734                                 'application/x-www-form-urlencoded'); 
    735  
    736             /* Force 'Connection: close' for Mozilla browsers to work around 
    737              * a bug where XMLHttpRequest sends an incorrect Content-length 
    738              * header. See Mozilla Bugzilla #246651. 
    739              */ 
    740             if (this.transport.overrideMimeType) { 
    741                 requestHeaders.push('Connection', 'close'); 
    742             } 
    743         } 
    744  
    745         if (this.options.requestHeaders) { 
    746             requestHeaders.push.apply(requestHeaders, this.options.requestHeaders); 
    747         } 
    748  
    749         for (var i = 0; i < requestHeaders.length; i += 2) { 
    750             this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]); 
    751         } 
    752     }, 
    753  
    754     onStateChange: function () { 
    755         var readyState = this.transport.readyState; 
    756         if (readyState != 1) { 
    757             this.respondToReadyState(this.transport.readyState); 
    758         } 
    759     }, 
    760  
    761     header: function (name) { 
    762         try { 
    763           return this.transport.getResponseHeader(name); 
    764         } catch (e) {} 
    765     }, 
    766  
    767     evalJSON: function () { 
    768         try { 
    769           return eval(this.header('X-JSON')); 
    770         } catch (e) {} 
    771     }, 
    772  
    773     evalResponse: function () { 
    774         try { 
    775           return eval(this.transport.responseText); 
    776         } catch (e) { 
    777           this.dispatchException(e); 
    778         } 
    779     }, 
    780  
    781     respondToReadyState: function (readyState) { 
    782         var event = Ajax.Request.Events[readyState]; 
    783         var transport = this.transport, json = this.evalJSON(); 
    784  
    785         if (event == 'Complete') { 
    786             try { 
    787                 (this.options['on' + this.transport.status] 
    788                 || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')] 
    789                 || MochiKit.Base.emptyFunction)(transport, json); 
    790             } catch (e) { 
    791                 this.dispatchException(e); 
    792             } 
    793  
    794             if ((this.header('Content-type') || '').match(/^text\/javascript/i)) { 
    795                 this.evalResponse(); 
    796             } 
    797         } 
    798  
    799         try { 
    800             (this.options['on' + event] || MochiKit.Base.emptyFunction)(transport, json); 
    801             Ajax.Responders.dispatch('on' + event, this, transport, json); 
    802         } catch (e) { 
    803             this.dispatchException(e); 
    804         } 
    805  
    806         /* Avoid memory leak in MSIE: clean up the oncomplete event handler */ 
    807         if (event == 'Complete') { 
    808             this.transport.onreadystatechange = MochiKit.Base.emptyFunction; 
    809         } 
    810     }, 
    811  
    812     dispatchException: function (exception) { 
    813         (this.options.onException || MochiKit.Base.emptyFunction)(this, exception); 
    814         Ajax.Responders.dispatch('onException', this, exception); 
    815     } 
    816 }); 
    817  
    818 Ajax.Updater = function (container, url, options) { 
    819     this.__init__(container, url, options); 
    820 }; 
    821  
    822 MochiKit.Base.update(Ajax.Updater.prototype, Ajax.Request.prototype); 
    823  
    824 MochiKit.Base.update(Ajax.Updater.prototype, { 
    825     __init__: function (container, url, options) { 
    826         this.containers = { 
    827             success: container.success ? MochiKit.DOM.getElement(container.success) : MochiKit.DOM.getElement(container), 
    828             failure: container.failure ? MochiKit.DOM.getElement(container.failure) : 
    829                 (container.success ? null : MochiKit.DOM.getElement(container)) 
    830         } 
    831         this.transport = MochiKit.Async.getXMLHttpRequest(); 
    832         this.setOptions(options); 
    833  
    834         var onComplete = this.options.onComplete || MochiKit.Base.emptyFunction; 
    835         this.options.onComplete = MochiKit.Base.bind(function (transport, object) { 
    836             this.updateContent(); 
    837             onComplete(transport, object); 
    838         }, this); 
    839  
    840         this.request(url); 
    841     }, 
    842  
    843     updateContent: function () { 
    844         var receiver = this.responseIsSuccess() ? 
    845             this.containers.success : this.containers.failure; 
    846         var response = this.transport.responseText; 
    847  
    848         if (!this.options.evalScripts) { 
    849             response = MochiKit.Base.stripScripts(response); 
    850         } 
    851  
    852         if (receiver) { 
    853             if (this.options.insertion) { 
    854                 new this.options.insertion(receiver, response); 
    855             } else { 
    856                 MochiKit.DOM.getElement(receiver).innerHTML = 
    857                     MochiKit.Base.stripScripts(response); 
    858                 setTimeout(function() { 
    859                     MochiKit.Base.evalScripts(response); 
    860                 }, 10); 
    861             } 
    862         } 
    863  
    864         if (this.responseIsSuccess()) { 
    865             if (this.onComplete) { 
    866                 setTimeout(MochiKit.Base.bind(this.onComplete, this), 10); 
    867             } 
    868         } 
    869     } 
    870 }); 
    871  
    872 var Field = { 
    873     clear: function () { 
    874         for (var i = 0; i < arguments.length; i++) { 
    875             MochiKit.DOM.getElement(arguments[i]).value = ''; 
    876         } 
    877     }, 
    878  
    879     focus: function (element) { 
    880         MochiKit.DOM.getElement(element).focus(); 
    881     }, 
    882  
    883     present: function () { 
    884         for (var i = 0; i < arguments.length; i++) { 
    885             if (MochiKit.DOM.getElement(arguments[i]).value == '') { 
    886                 return false; 
    887             } 
    888         } 
    889         return true; 
    890     }, 
    891  
    892     select: function (element) { 
    893         MochiKit.DOM.getElement(element).select(); 
    894     }, 
    895  
    896     activate: function (element) { 
    897         element = MochiKit.DOM.getElement(element); 
    898         element.focus(); 
    899         if (element.select) { 
    900             element.select(); 
    901         } 
    902     }, 
    903      
    904     scrollFreeActivate: function (field) { 
    905         setTimeout(function () { 
    906             Field.activate(field); 
    907         }, 1); 
    908     } 
    909 }; 
    910  
  • mochikit/branches/scriptaculous/MochiKit/Sortable.js

    r507 r533  
    5959                return s.element == element; 
    6060            }, this.sortables), function (s) { 
    61                 DragAndDrop.Draggables.removeObserver(s.element); 
     61                MochiKit.DragAndDrop.Draggables.removeObserver(s.element); 
    6262                MochiKit.Iter.forEach(s.droppables, function (d) { 
    63                     DragAndDrop.Droppables.remove(d); 
     63                    MochiKit.DragAndDrop.Droppables.remove(d); 
    6464                }); 
    6565            s.draggables.invoke('destroy'); 
     
    141141        // drop on empty handling 
    142142        if (options.dropOnEmpty) { 
    143             new DragAndDrop.Droppable(element, 
     143            new MochiKit.DragAndDrop.Droppable(element, 
    144144            {containment: options.containment, 
    145145             onHover: Sortable.onEmptyHover, 
     
    154154                    options.handle, e)[0] : e; 
    155155            options.draggables.push( 
    156                 new DragAndDrop.Draggable(e, 
     156                new MochiKit.DragAndDrop.Draggable(e, 
    157157                    MochiKit.Base.update(options_for_draggable, 
    158158                                         {handle: handle}))); 
    159             new DragAndDrop.Droppable(e, options_for_droppable); 
     159            new MochiKit.DragAndDrop.Droppable(e, options_for_droppable); 
    160160            options.droppables.push(e); 
    161161        }); 
     
    165165 
    166166        // for onupdate 
    167         DragAndDrop.Draggables.addObserver( 
     167        MochiKit.DragAndDrop.Draggables.addObserver( 
    168168            new SortableObserver(element, options.onUpdate)); 
    169169    }, 
     
    190190        }); 
    191191 
    192         return (elements.length > 0 ? MochiKit.Iter.flatten(elements) : null); 
     192        return (elements.length > 0 ? MochiKit.Base.flatten(elements) : null); 
    193193    }, 
    194194