Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

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;
};

}