You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.2 KiB
94 lines
2.2 KiB
define([ |
|
"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; |
|
});
|
|
|