205 lines
No EOL
8.1 KiB
HTML
205 lines
No EOL
8.1 KiB
HTML
<html><head><title>CompositeElement.js</title><link rel="stylesheet" type="text/css" href="../resources/style.css" media="screen"/></head><body><h1>CompositeElement.js</h1><pre class="highlighted"><code><i>/**
|
|
* @class Ext.CompositeElement
|
|
* Standard composite class. Creates a Ext.Element <b>for</b> every element <b>in</b> the collection.
|
|
* <br><br>
|
|
* <b>NOTE: Although they are not listed, <b>this</b> class supports all of the set/update methods of Ext.Element. All Ext.Element
|
|
* actions will be performed on all the elements <b>in</b> this collection.</b>
|
|
* <br><br>
|
|
* All methods <b>return</b> <i><b>this</b></i> and can be chained.
|
|
<pre><code>
|
|
<b>var</b> els = getEls("#some-el div.some-class");
|
|
<i>// or</i>
|
|
<b>var</b> els = Ext.Element.select("#some-el div.some-class");
|
|
els.setWidth(100); <i>// all elements become 100 width</i>
|
|
els.hide(true); <i>// all elements fade out and hide</i>
|
|
<i>// or</i>
|
|
els.setWidth(100).hide(true);
|
|
</code></pre>
|
|
*/</i>
|
|
Ext.CompositeElement = <b>function</b>(els){
|
|
<b>this</b>.elements = [];
|
|
<b>this</b>.addElements(els);
|
|
};
|
|
Ext.CompositeElement.prototype = {
|
|
isComposite: true,
|
|
addElements : <b>function</b>(els){
|
|
<b>if</b>(!els) <b>return</b> this;
|
|
<b>if</b>(typeof els == "string"){
|
|
els = Ext.Element.selectorFunction(els);
|
|
}
|
|
<b>var</b> yels = <b>this</b>.elements;
|
|
<b>var</b> index = yels.length-1;
|
|
<b>for</b>(var i = 0, len = els.length; i < len; i++) {
|
|
yels[++index] = Ext.get(els[i], true);
|
|
}
|
|
<b>return</b> this;
|
|
},
|
|
invoke : <b>function</b>(fn, args){
|
|
<b>var</b> els = <b>this</b>.elements;
|
|
<b>for</b>(var i = 0, len = els.length; i < len; i++) {
|
|
Ext.Element.prototype[fn].apply(els[i], args);
|
|
}
|
|
<b>return</b> this;
|
|
},
|
|
<i>/**
|
|
* Adds elements to <b>this</b> composite.
|
|
* @param {String/Array} els A string CSS selector, an array of elements or an element
|
|
* @<b>return</b> {CompositeElement} <b>this</b>
|
|
*/</i>
|
|
add : <b>function</b>(els){
|
|
<b>if</b>(typeof els == "string"){
|
|
<b>this</b>.addElements(Ext.Element.selectorFunction(els));
|
|
}<b>else</b> if(els.length !== undefined){
|
|
<b>this</b>.addElements(els);
|
|
}<b>else</b>{
|
|
<b>this</b>.addElements([els]);
|
|
}
|
|
<b>return</b> this;
|
|
},
|
|
<i>/**
|
|
* Calls the passed <b>function</b> passing (el, <b>this</b>, index) <b>for</b> each element <b>in</b> this composite.
|
|
* @param {Function} fn The <b>function</b> to call
|
|
* @param {Object} scope (optional) The <i><b>this</b></i> object (defaults to the element)
|
|
* @<b>return</b> {CompositeElement} <b>this</b>
|
|
*/</i>
|
|
each : <b>function</b>(fn, scope){
|
|
<b>var</b> els = <b>this</b>.elements;
|
|
<b>for</b>(var i = 0, len = els.length; i < len; i++){
|
|
<b>if</b>(fn.call(scope || els[i], els[i], <b>this</b>, i) === false) {
|
|
<b>break</b>;
|
|
}
|
|
}
|
|
<b>return</b> this;
|
|
},
|
|
|
|
<i>/**
|
|
* Returns the Element object at the specified index
|
|
* @param {Number} index
|
|
* @<b>return</b> {Ext.Element}
|
|
*/</i>
|
|
item : <b>function</b>(index){
|
|
<b>return</b> this.elements[index];
|
|
}
|
|
};
|
|
(<b>function</b>(){
|
|
Ext.CompositeElement.createCall = <b>function</b>(proto, fnName){
|
|
<b>if</b>(!proto[fnName]){
|
|
proto[fnName] = <b>function</b>(){
|
|
<b>return</b> this.invoke(fnName, arguments);
|
|
};
|
|
}
|
|
};
|
|
<b>for</b>(var fnName <b>in</b> Ext.Element.prototype){
|
|
<b>if</b>(typeof Ext.Element.prototype[fnName] == "<b>function</b>"){
|
|
Ext.CompositeElement.createCall(Ext.CompositeElement.prototype, fnName);
|
|
}
|
|
};
|
|
})();
|
|
|
|
<i>/**
|
|
* @class Ext.CompositeElementLite
|
|
* @extends Ext.CompositeElement
|
|
* Flyweight composite class. Reuses the same Ext.Element <b>for</b> element operations.
|
|
* <br><br>
|
|
* <b>NOTE: Although they are not listed, <b>this</b> class supports all of the set/update methods of Ext.Element. All Ext.Element
|
|
* actions will be performed on all the elements <b>in</b> this collection.</b>
|
|
*/</i>
|
|
Ext.CompositeElementLite = <b>function</b>(els){
|
|
Ext.CompositeElementLite.superclass.constructor.call(<b>this</b>, els);
|
|
<b>var</b> flyEl = <b>function</b>(){};
|
|
flyEl.prototype = Ext.Element.prototype;
|
|
<b>this</b>.el = <b>new</b> Ext.Element.Flyweight();
|
|
};
|
|
Ext.extend(Ext.CompositeElementLite, Ext.CompositeElement, {
|
|
addElements : <b>function</b>(els){
|
|
<b>if</b>(els){
|
|
<b>if</b>(els instanceof Array){
|
|
<b>this</b>.elements = <b>this</b>.elements.concat(els);
|
|
}<b>else</b>{
|
|
<b>var</b> yels = <b>this</b>.elements;
|
|
<b>var</b> index = yels.length-1;
|
|
<b>for</b>(var i = 0, len = els.length; i < len; i++) {
|
|
yels[++index] = els[i];
|
|
}
|
|
}
|
|
}
|
|
<b>return</b> this;
|
|
},
|
|
invoke : <b>function</b>(fn, args){
|
|
<b>var</b> els = <b>this</b>.elements;
|
|
<b>var</b> el = <b>this</b>.el;
|
|
<b>for</b>(var i = 0, len = els.length; i < len; i++) {
|
|
el.dom = els[i];
|
|
Ext.Element.prototype[fn].apply(el, args);
|
|
}
|
|
<b>return</b> this;
|
|
},
|
|
<i>/**
|
|
* Returns a flyweight Element of the dom element object at the specified index
|
|
* @param {Number} index
|
|
* @<b>return</b> {Ext.Element}
|
|
*/</i>
|
|
item : <b>function</b>(index){
|
|
<b>this</b>.el.dom = <b>this</b>.elements[index];
|
|
<b>return</b> this.el;
|
|
},
|
|
|
|
<i>// fixes scope <b>with</b> flyweight</i>
|
|
addListener : <b>function</b>(eventName, handler, scope, opt){
|
|
<b>var</b> els = <b>this</b>.elements;
|
|
<b>for</b>(var i = 0, len = els.length; i < len; i++) {
|
|
Ext.EventManager.on(els[i], eventName, handler, scope || els[i], opt);
|
|
}
|
|
<b>return</b> this;
|
|
},
|
|
|
|
<i>/**
|
|
* Calls the passed <b>function</b> passing (el, <b>this</b>, index) <b>for</b> each element <b>in</b> this composite. <b>The element
|
|
* passed is the flyweight (shared) Ext.Element instance, so <b>if</b> you require a
|
|
* a reference to the dom node, use el.dom.</b>
|
|
* @param {Function} fn The <b>function</b> to call
|
|
* @param {Object} scope (optional) The <i><b>this</b></i> object (defaults to the element)
|
|
* @<b>return</b> {CompositeElement} <b>this</b>
|
|
*/</i>
|
|
each : <b>function</b>(fn, scope){
|
|
<b>var</b> els = <b>this</b>.elements;
|
|
<b>var</b> el = <b>this</b>.el;
|
|
<b>for</b>(var i = 0, len = els.length; i < len; i++){
|
|
el.dom = els[i];
|
|
<b>if</b>(fn.call(scope || el, el, <b>this</b>, i) === false){
|
|
<b>break</b>;
|
|
}
|
|
}
|
|
<b>return</b> this;
|
|
}
|
|
});
|
|
Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener;
|
|
<b>if</b>(Ext.DomQuery){
|
|
Ext.Element.selectorFunction = Ext.DomQuery.select;
|
|
}
|
|
|
|
Ext.Element.select = <b>function</b>(selector, unique){
|
|
<b>var</b> els;
|
|
<b>if</b>(typeof selector == "string"){
|
|
els = Ext.Element.selectorFunction(selector);
|
|
}<b>else</b> if(selector.length !== undefined){
|
|
els = selector;
|
|
}<b>else</b>{
|
|
throw "Invalid selector";
|
|
}
|
|
<b>if</b>(unique === true){
|
|
<b>return</b> new Ext.CompositeElement(els);
|
|
}<b>else</b>{
|
|
<b>return</b> new Ext.CompositeElementLite(els);
|
|
}
|
|
};
|
|
<i>/**
|
|
* Selects elements based on the passed CSS selector to enable working on them as 1.
|
|
* @param {String/Array} selector The CSS selector or an array of elements
|
|
* @param {Boolean} unique (optional) true to create a unique Ext.Element <b>for</b> each element (defaults to a shared flyweight object)
|
|
* @<b>return</b> {CompositeElementLite/CompositeElement}
|
|
* @member Ext
|
|
* @method select
|
|
*/</i>
|
|
Ext.select = Ext.Element.select;</code></pre><hr><div style="font-size:10px;text-align:center;color:gray;">Ext - Copyright © 2006-2007 Ext JS, LLC<br />All rights reserved.</div>
|
|
</body></html> |