Element-more.js
上传用户:dawnssy
上传日期:2022-08-06
资源大小:9345k
文件大小:6k
源码类别:

JavaScript

开发平台:

JavaScript

  1. /*!
  2.  * Ext JS Library 3.1.0
  3.  * Copyright(c) 2006-2009 Ext JS, LLC
  4.  * licensing@extjs.com
  5.  * http://www.extjs.com/license
  6.  */
  7. /**
  8.  * @class Ext.Element
  9.  */
  10. Ext.Element.addMethods({
  11.     /**
  12.      * Stops the specified event(s) from bubbling and optionally prevents the default action
  13.      * @param {String/Array} eventName an event / array of events to stop from bubbling
  14.      * @param {Boolean} preventDefault (optional) true to prevent the default action too
  15.      * @return {Ext.Element} this
  16.      */
  17.     swallowEvent : function(eventName, preventDefault){
  18.         var me = this;
  19.         function fn(e){
  20.             e.stopPropagation();
  21.             if(preventDefault){
  22.                 e.preventDefault();
  23.             }
  24.         }
  25.         if(Ext.isArray(eventName)){
  26.             Ext.each(eventName, function(e) {
  27.                  me.on(e, fn);
  28.             });
  29.             return me;
  30.         }
  31.         me.on(eventName, fn);
  32.         return me;
  33.     },
  34.     /**
  35.      * Create an event handler on this element such that when the event fires and is handled by this element,
  36.      * it will be relayed to another object (i.e., fired again as if it originated from that object instead).
  37.      * @param {String} eventName The type of event to relay
  38.      * @param {Object} object Any object that extends {@link Ext.util.Observable} that will provide the context
  39.      * for firing the relayed event
  40.      */
  41.     relayEvent : function(eventName, observable){
  42.         this.on(eventName, function(e){
  43.             observable.fireEvent(eventName, e);
  44.         });
  45.     },
  46.     /**
  47.      * Removes worthless text nodes
  48.      * @param {Boolean} forceReclean (optional) By default the element
  49.      * keeps track if it has been cleaned already so
  50.      * you can call this over and over. However, if you update the element and
  51.      * need to force a reclean, you can pass true.
  52.      */
  53.     clean : function(forceReclean){
  54.         var me = this,
  55.             dom = me.dom,
  56.             n = dom.firstChild,
  57.             ni = -1;
  58.         if(Ext.Element.data(dom, 'isCleaned') && forceReclean !== true){
  59.             return me;
  60.         }
  61.         while(n){
  62.             var nx = n.nextSibling;
  63.             if(n.nodeType == 3 && !/S/.test(n.nodeValue)){
  64.                 dom.removeChild(n);
  65.             }else{
  66.                 n.nodeIndex = ++ni;
  67.             }
  68.             n = nx;
  69.         }
  70.         Ext.Element.data(dom, 'isCleaned', true);
  71.         return me;
  72.     },
  73.     /**
  74.      * Direct access to the Updater {@link Ext.Updater#update} method. The method takes the same object
  75.      * parameter as {@link Ext.Updater#update}
  76.      * @return {Ext.Element} this
  77.      */
  78.     load : function(){
  79.         var um = this.getUpdater();
  80.         um.update.apply(um, arguments);
  81.         return this;
  82.     },
  83.     /**
  84.     * Gets this element's {@link Ext.Updater Updater}
  85.     * @return {Ext.Updater} The Updater
  86.     */
  87.     getUpdater : function(){
  88.         return this.updateManager || (this.updateManager = new Ext.Updater(this));
  89.     },
  90.     /**
  91.     * Update the innerHTML of this element, optionally searching for and processing scripts
  92.     * @param {String} html The new HTML
  93.     * @param {Boolean} loadScripts (optional) True to look for and process scripts (defaults to false)
  94.     * @param {Function} callback (optional) For async script loading you can be notified when the update completes
  95.     * @return {Ext.Element} this
  96.      */
  97.     update : function(html, loadScripts, callback){
  98.         if (!this.dom) {
  99.             return this;
  100.         }
  101.         html = html || "";
  102.         if(loadScripts !== true){
  103.             this.dom.innerHTML = html;
  104.             if(Ext.isFunction(callback)){
  105.                 callback();
  106.             }
  107.             return this;
  108.         }
  109.         var id = Ext.id(),
  110.             dom = this.dom;
  111.         html += '<span id="' + id + '"></span>';
  112.         Ext.lib.Event.onAvailable(id, function(){
  113.             var DOC = document,
  114.                 hd = DOC.getElementsByTagName("head")[0],
  115.                 re = /(?:<script([^>]*)?>)((n|r|.)*?)(?:</script>)/ig,
  116.                 srcRe = /ssrc=(['"])(.*?)1/i,
  117.                 typeRe = /stype=(['"])(.*?)1/i,
  118.                 match,
  119.                 attrs,
  120.                 srcMatch,
  121.                 typeMatch,
  122.                 el,
  123.                 s;
  124.             while((match = re.exec(html))){
  125.                 attrs = match[1];
  126.                 srcMatch = attrs ? attrs.match(srcRe) : false;
  127.                 if(srcMatch && srcMatch[2]){
  128.                    s = DOC.createElement("script");
  129.                    s.src = srcMatch[2];
  130.                    typeMatch = attrs.match(typeRe);
  131.                    if(typeMatch && typeMatch[2]){
  132.                        s.type = typeMatch[2];
  133.                    }
  134.                    hd.appendChild(s);
  135.                 }else if(match[2] && match[2].length > 0){
  136.                     if(window.execScript) {
  137.                        window.execScript(match[2]);
  138.                     } else {
  139.                        window.eval(match[2]);
  140.                     }
  141.                 }
  142.             }
  143.             el = DOC.getElementById(id);
  144.             if(el){Ext.removeNode(el);}
  145.             if(Ext.isFunction(callback)){
  146.                 callback();
  147.             }
  148.         });
  149.         dom.innerHTML = html.replace(/(?:<script.*?>)((n|r|.)*?)(?:</script>)/ig, "");
  150.         return this;
  151.     },
  152.     // inherit docs, overridden so we can add removeAnchor
  153.     removeAllListeners : function(){
  154.         this.removeAnchor();
  155.         Ext.EventManager.removeAll(this.dom);
  156.         return this;
  157.     },
  158.     /**
  159.      * Creates a proxy element of this element
  160.      * @param {String/Object} config The class name of the proxy element or a DomHelper config object
  161.      * @param {String/HTMLElement} renderTo (optional) The element or element id to render the proxy to (defaults to document.body)
  162.      * @param {Boolean} matchBox (optional) True to align and size the proxy to this element now (defaults to false)
  163.      * @return {Ext.Element} The new proxy element
  164.      */
  165.     createProxy : function(config, renderTo, matchBox){
  166.         config = Ext.isObject(config) ? config : {tag : "div", cls: config};
  167.         var me = this,
  168.             proxy = renderTo ? Ext.DomHelper.append(renderTo, config, true) :
  169.                                Ext.DomHelper.insertBefore(me.dom, config, true);
  170.         if(matchBox && me.setBox && me.getBox){ // check to make sure Element.position.js is loaded
  171.            proxy.setBox(me.getBox());
  172.         }
  173.         return proxy;
  174.     }
  175. });
  176. Ext.Element.prototype.getUpdateManager = Ext.Element.prototype.getUpdater;