95 lines
2.2 KiB
JavaScript
95 lines
2.2 KiB
JavaScript
define("dojox/mobile/viewRegistry", [
|
|
"dojo/_base/array",
|
|
"dojo/dom-class",
|
|
"dijit/registry"
|
|
], function(array, domClass, registry){
|
|
|
|
// module:
|
|
// dojox/mobile/viewRegistry
|
|
|
|
var viewRegistry = {
|
|
// summary:
|
|
// A registry of existing views.
|
|
|
|
// length: Number
|
|
// The number of registered views.
|
|
length: 0,
|
|
|
|
// hash: [private] Object
|
|
// The object used to register views.
|
|
hash: {},
|
|
|
|
// initialView: [private] dojox/mobile/View
|
|
// The initial view.
|
|
initialView: null,
|
|
|
|
add: function(/*dojox/mobile/View*/ view){
|
|
// summary:
|
|
// Adds a view to the registry.
|
|
this.hash[view.id] = view;
|
|
this.length++;
|
|
},
|
|
|
|
remove: function(/*String*/ id){
|
|
// summary:
|
|
// Removes a view from the registry.
|
|
if(this.hash[id]){
|
|
delete this.hash[id];
|
|
this.length--;
|
|
}
|
|
},
|
|
|
|
getViews: function(){
|
|
// summary:
|
|
// Gets all registered views.
|
|
// returns: Array
|
|
var arr = [];
|
|
for(var i in this.hash){
|
|
arr.push(this.hash[i]);
|
|
}
|
|
return arr;
|
|
},
|
|
|
|
getParentView: function(/*dojox/mobile/View*/ view){
|
|
// summary:
|
|
// Gets the parent view of the specified view.
|
|
// returns: dojox/mobile/View
|
|
for(var v = view.getParent(); v; v = v.getParent()){
|
|
if(domClass.contains(v.domNode, "mblView")){ return v; }
|
|
}
|
|
return null;
|
|
},
|
|
|
|
getChildViews: function(/*dojox/mobile/View*/ parent){
|
|
// summary:
|
|
// Gets the children views of the specified view.
|
|
// returns: Array
|
|
return array.filter(this.getViews(), function(v){ return this.getParentView(v) === parent; }, this);
|
|
},
|
|
|
|
getEnclosingView: function(/*DomNode*/ node){
|
|
// summary:
|
|
// Gets the view containing the specified DOM node.
|
|
// returns: dojox/mobile/View
|
|
for(var n = node; n && n.tagName !== "BODY"; n = n.parentNode){
|
|
if(n.nodeType === 1 && domClass.contains(n, "mblView")){
|
|
return registry.byNode(n);
|
|
}
|
|
}
|
|
return null;
|
|
},
|
|
|
|
getEnclosingScrollable: function(/*DomNode*/ node){
|
|
// summary:
|
|
// Gets the dojox/mobile/scrollable object containing the specified DOM node.
|
|
// returns: dojox/mobile/scrollable
|
|
for(var w = registry.getEnclosingWidget(node); w; w = w.getParent()){
|
|
if(w.scrollableParams && w._v){ return w; }
|
|
}
|
|
return null;
|
|
}
|
|
};
|
|
|
|
return viewRegistry;
|
|
});
|