123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- if (!dojo._hasResource["dijit._base.manager"]) { // _hasResource checks added
- // by build. Do not use
- // _hasResource directly in
- // your code.
- dojo._hasResource["dijit._base.manager"] = true;
- dojo.provide("dijit._base.manager");
- dojo.declare("dijit.WidgetSet", null, {
- constructor : function() {
- // summary:
- // A set of widgets indexed by id
- this._hash = {};
- },
- add : function(/* Widget */widget) {
- if (this._hash[widget.id]) {
- throw new Error("Tried to register widget with id=="
- + widget.id
- + " but that id is already registered");
- }
- this._hash[widget.id] = widget;
- },
- remove : function(/* String */id) {
- delete this._hash[id];
- },
- forEach : function(/* Function */func) {
- for (var id in this._hash) {
- func(this._hash[id]);
- }
- },
- filter : function(/* Function */filter) {
- var res = new dijit.WidgetSet();
- this.forEach(function(widget) {
- if (filter(widget)) {
- res.add(widget);
- }
- });
- return res; // dijit.WidgetSet
- },
- byId : function(/* String */id) {
- return this._hash[id];
- },
- byClass : function(/* String */cls) {
- return this.filter(function(widget) {
- return widget.declaredClass == cls;
- }); // dijit.WidgetSet
- }
- });
- // registry: list of all widgets on page
- dijit.registry = new dijit.WidgetSet();
- dijit._widgetTypeCtr = {};
- dijit.getUniqueId = function(/* String */widgetType) {
- // summary
- // Generates a unique id for a given widgetType
- var id;
- do {
- id = widgetType
- + "_"
- + (dijit._widgetTypeCtr[widgetType] !== undefined
- ? ++dijit._widgetTypeCtr[widgetType]
- : dijit._widgetTypeCtr[widgetType] = 0);
- } while (dijit.byId(id));
- return id; // String
- };
- if (dojo.isIE) {
- // Only run this for IE because we think it's only necessary in that
- // case,
- // and because it causes problems on FF. See bug #3531 for details.
- dojo.addOnUnload(function() {
- dijit.registry.forEach(function(widget) {
- widget.destroy();
- });
- });
- }
- dijit.byId = function(/* String|Widget */id) {
- // summary:
- // Returns a widget by its id, or if passed a widget, no-op (like
- // dojo.byId())
- return (dojo.isString(id)) ? dijit.registry.byId(id) : id; // Widget
- };
- dijit.byNode = function(/* DOMNode */node) {
- // summary:
- // Returns the widget as referenced by node
- return dijit.registry.byId(node.getAttribute("widgetId")); // Widget
- };
- dijit.getEnclosingWidget = function(/* DOMNode */node) {
- // summary:
- // Returns the widget whose dom tree contains node or null if
- // the node is not contained within the dom tree of any widget
- while (node) {
- if (node.getAttribute && node.getAttribute("widgetId")) {
- return dijit.registry.byId(node.getAttribute("widgetId"));
- }
- node = node.parentNode;
- }
- return null;
- };
- }
|