75 lines
2.6 KiB
JavaScript
75 lines
2.6 KiB
JavaScript
Sys.ComponentSet = function ComponentSet(elementSet, query, index) {
|
|
this._elementSet = elementSet || (elementSet = new Sys.ElementSet());
|
|
this._components = this._execute(elementSet, query, index);
|
|
}
|
|
|
|
Sys.ComponentSet.prototype = {
|
|
__class: true,
|
|
setProperties: function ComponentSet$setProperties(properties) {
|
|
// Sets properties on the matched components.
|
|
// "properties" - object with the names and values of the properties to set.
|
|
return this.each(function() {
|
|
Sys._set(this, properties);
|
|
});
|
|
},
|
|
|
|
get: function ComponentSet$get(index) {
|
|
// Returns the component at the specified index, or an array of all matches if not specified.
|
|
var components = this._components;
|
|
|
|
return (typeof (index) === "undefined") ? (Array.apply(null, components)) : (components[index || 0] || null);
|
|
},
|
|
|
|
each: function ComponentSet$each(callback) {
|
|
// Enumerate all the found components. The index of the component are passed as parameters to a callback. You may return 'false' to cancel the enumeration.
|
|
// "callback" - function called for each component.
|
|
foreach(this._components, function(c, i) {
|
|
if(callback.call(c, i) === false)
|
|
return true;
|
|
});
|
|
|
|
return this;
|
|
},
|
|
|
|
elements: function ComponentSet$elements() {
|
|
// Returns the underlying set of elements this component collection came from.
|
|
return this._elementSet;
|
|
},
|
|
|
|
_execute: function ComponentSet$_execute(elementSet, query, index) {
|
|
var components = [];
|
|
function match(c) {
|
|
var ctor;
|
|
return (c instanceof query) ||
|
|
((ctor = c.constructor) && (
|
|
(ctor === query) ||
|
|
(ctor.inheritsFrom && ctor.inheritsFrom(query)) ||
|
|
(ctor.implementsInterface && ctor.implementsInterface(query))));
|
|
}
|
|
|
|
if(query instanceof Array)
|
|
components.push.apply(components, query);
|
|
else
|
|
// query is a type or not set
|
|
elementSet.each(function() {
|
|
var c = this.control;
|
|
|
|
if(c && (!query || match(c)))
|
|
components.push(c);
|
|
|
|
foreach(this._behaviors, function(b) {
|
|
if(!query || match(b))
|
|
components.push(b);
|
|
});
|
|
});
|
|
|
|
if((typeof (index) !== "undefined")) {
|
|
if(components[index])
|
|
components = [components[index]];
|
|
else
|
|
components = [];
|
|
}
|
|
|
|
return components;
|
|
}
|
|
} |