initial import
[roojs1] / Roo / dd / Registry.js
1 /*
2  * Based on:
3  * Ext JS Library 1.1.1
4  * Copyright(c) 2006-2007, Ext JS, LLC.
5  *
6  * Originally Released Under LGPL - original licence link has changed is not relivant.
7  *
8  * Fork - LGPL
9  * <script type="text/javascript">
10  */
11  
12
13 /**
14  * @class Roo.dd.Registry
15  * Provides easy access to all drag drop components that are registered on a page.  Items can be retrieved either
16  * directly by DOM node id, or by passing in the drag drop event that occurred and looking up the event target.
17  * @singleton
18  */
19 Roo.dd.Registry = function(){
20     var elements = {}; 
21     var handles = {}; 
22     var autoIdSeed = 0;
23
24     var getId = function(el, autogen){
25         if(typeof el == "string"){
26             return el;
27         }
28         var id = el.id;
29         if(!id && autogen !== false){
30             id = "roodd-" + (++autoIdSeed);
31             el.id = id;
32         }
33         return id;
34     };
35     
36     return {
37     /**
38      * Register a drag drop element
39      * @param {String/HTMLElement) element The id or DOM node to register
40      * @param {Object} data (optional) A custom data object that will be passed between the elements that are involved
41      * in drag drop operations.  You can populate this object with any arbitrary properties that your own code
42      * knows how to interpret, plus there are some specific properties known to the Registry that should be
43      * populated in the data object (if applicable):
44      * <pre>
45 Value      Description<br />
46 ---------  ------------------------------------------<br />
47 handles    Array of DOM nodes that trigger dragging<br />
48            for the element being registered<br />
49 isHandle   True if the element passed in triggers<br />
50            dragging itself, else false
51 </pre>
52      */
53         register : function(el, data){
54             data = data || {};
55             if(typeof el == "string"){
56                 el = document.getElementById(el);
57             }
58             data.ddel = el;
59             elements[getId(el)] = data;
60             if(data.isHandle !== false){
61                 handles[data.ddel.id] = data;
62             }
63             if(data.handles){
64                 var hs = data.handles;
65                 for(var i = 0, len = hs.length; i < len; i++){
66                         handles[getId(hs[i])] = data;
67                 }
68             }
69         },
70
71     /**
72      * Unregister a drag drop element
73      * @param {String/HTMLElement) element The id or DOM node to unregister
74      */
75         unregister : function(el){
76             var id = getId(el, false);
77             var data = elements[id];
78             if(data){
79                 delete elements[id];
80                 if(data.handles){
81                     var hs = data.handles;
82                     for(var i = 0, len = hs.length; i < len; i++){
83                         delete handles[getId(hs[i], false)];
84                     }
85                 }
86             }
87         },
88
89     /**
90      * Returns the handle registered for a DOM Node by id
91      * @param {String/HTMLElement} id The DOM node or id to look up
92      * @return {Object} handle The custom handle data
93      */
94         getHandle : function(id){
95             if(typeof id != "string"){ // must be element?
96                 id = id.id;
97             }
98             return handles[id];
99         },
100
101     /**
102      * Returns the handle that is registered for the DOM node that is the target of the event
103      * @param {Event} e The event
104      * @return {Object} handle The custom handle data
105      */
106         getHandleFromEvent : function(e){
107             var t = Roo.lib.Event.getTarget(e);
108             return t ? handles[t.id] : null;
109         },
110
111     /**
112      * Returns a custom data object that is registered for a DOM node by id
113      * @param {String/HTMLElement} id The DOM node or id to look up
114      * @return {Object} data The custom data
115      */
116         getTarget : function(id){
117             if(typeof id != "string"){ // must be element?
118                 id = id.id;
119             }
120             return elements[id];
121         },
122
123     /**
124      * Returns a custom data object that is registered for the DOM node that is the target of the event
125      * @param {Event} e The event
126      * @return {Object} data The custom data
127      */
128         getTargetFromEvent : function(e){
129             var t = Roo.lib.Event.getTarget(e);
130             return t ? elements[t.id] || handles[t.id] : null;
131         }
132     };
133 }();