1 | dojo.addOnLoad(init); |
---|
2 | var tabContainer, gridContainer; |
---|
3 | function init(){ |
---|
4 | tabContainer = dijit.byId("tb1"); |
---|
5 | dojo.subscribe("/dnd/drop/after", "createNode"); |
---|
6 | var adapter = dojox.mdnd.adapter.dndToDojo(); |
---|
7 | // register tabs of tabContainer. |
---|
8 | var dojoNode = dojo.query('.dijitTab', tabContainer.tablist.containerNode).forEach(function(node){ |
---|
9 | adapter.register(node, tabContainer.declaredClass); |
---|
10 | }); |
---|
11 | adapter.register(c2.node, "targetDojo", true, "Drag Me !"); |
---|
12 | |
---|
13 | adapter.isAccepted = function(draggedNode, target){ |
---|
14 | //console.log("isAccepted ::: ", draggedNode, target); |
---|
15 | var dndType = dijit.byNode(draggedNode).get("dndType"); |
---|
16 | switch(target.type){ |
---|
17 | case "dijit.layout.TabContainer" : |
---|
18 | var tabButton = dijit.byNode(target.node); |
---|
19 | var panes = tabContainer.getChildren(); |
---|
20 | for (var i = 0, l = panes.length; i < l; i++) { |
---|
21 | var gc = panes[i]; |
---|
22 | if (gc.controlButton == tabButton) { |
---|
23 | for (var j=0; j < gc.acceptTypes.length; j++){ |
---|
24 | if (dndType == gc.acceptTypes[j]){ |
---|
25 | gridContainer = gc; |
---|
26 | return true; |
---|
27 | } |
---|
28 | } |
---|
29 | if (j == gc.acceptTypes.length){ |
---|
30 | return false; |
---|
31 | } |
---|
32 | } |
---|
33 | } |
---|
34 | break; |
---|
35 | default: |
---|
36 | return true; |
---|
37 | break; |
---|
38 | |
---|
39 | }; |
---|
40 | }; |
---|
41 | |
---|
42 | dojo.subscribe("/dojox/mdnd/adapter/dndToDojo/over", null, "onOver"); |
---|
43 | dojo.subscribe("/dojox/mdnd/adapter/dndToDojo/out", null, "onOut"); |
---|
44 | dojo.subscribe("/dojox/mdnd/adapter/dndToDojo/drop", null, "onDrop"); |
---|
45 | |
---|
46 | dojo.subscribe("/dojox/mdnd/drop", null, function(){ |
---|
47 | dojo.forEach(dojoNode, function(node){ |
---|
48 | dojo.removeClass(node, "dndOver"); |
---|
49 | dojo.removeClass(node, "dndOverNotAccepted"); |
---|
50 | }); |
---|
51 | }); |
---|
52 | |
---|
53 | dojo.subscribe(tabContainer.domNode.id+"-removeChild", null, "refresh"); |
---|
54 | }; |
---|
55 | |
---|
56 | /** |
---|
57 | * DojoDndAdapter functions : |
---|
58 | * source/target dojo to D&D OAF Area |
---|
59 | */ |
---|
60 | |
---|
61 | /*Function: createNode |
---|
62 | * Create a widget with a dojo draggedNode and drop this into a D&D OAF Area. |
---|
63 | */ |
---|
64 | function createNode(source, nodes, copy, target, dropIndex){ |
---|
65 | //console.log("createNode ::: ", source, nodes, copy, target, dropIndex); |
---|
66 | if(target){ |
---|
67 | var widget = _createWidget(nodes); |
---|
68 | dojox.mdnd.areaManager().addDragItem(target, widget.domNode, dropIndex); |
---|
69 | } |
---|
70 | }; |
---|
71 | /* |
---|
72 | * Widget Factory : Create a Dijit Widget with the type of draggedNode. |
---|
73 | */ |
---|
74 | function _createWidget(/*Array*/nodes){ |
---|
75 | var type = nodes[0].getAttribute("dndType"); |
---|
76 | var widget; |
---|
77 | switch (type) { |
---|
78 | case "ContentPane": |
---|
79 | widget = new dijit.layout.ContentPane(); |
---|
80 | dojo.addClass(widget.domNode, 'cpane'); |
---|
81 | widget.set('dndType','ContentPane'); |
---|
82 | break; |
---|
83 | case "Portlet": |
---|
84 | widget = new dojox.widget.Portlet({ |
---|
85 | title: "portlet", |
---|
86 | closable : true, |
---|
87 | dndType:"Portlet" |
---|
88 | }); |
---|
89 | break; |
---|
90 | case "TitlePane": |
---|
91 | widget = new dijit.TitlePane({ |
---|
92 | title: "TitlePane", |
---|
93 | dndType:"TitlePane" |
---|
94 | }); |
---|
95 | break; |
---|
96 | default: |
---|
97 | widget = new dijit.layout.ContentPane(); |
---|
98 | dojo.addClass(widget.domNode, 'cpane'); |
---|
99 | widget.set('dndType','ContentPane'); |
---|
100 | break; |
---|
101 | } |
---|
102 | widget.set('content','Lorem ipsum dolor sit amet, consectetuer adipiscing elit.'); |
---|
103 | widget.startup(); |
---|
104 | return widget; |
---|
105 | }; |
---|
106 | |
---|
107 | /** |
---|
108 | * Adapter functions |
---|
109 | */ |
---|
110 | |
---|
111 | /*Function: onOver |
---|
112 | * Call when the OAF draggedNode enters in a dojo target registered by the oafDndAdapter |
---|
113 | */ |
---|
114 | function onOver(target, type, draggedNode, accept){ |
---|
115 | //console.info("onOver ::: ", target, type, draggedNode); |
---|
116 | // add the dropIndicator style for the tab of tabContainer. |
---|
117 | switch(type){ |
---|
118 | case "dijit.layout.TabContainer" : |
---|
119 | if (accept){ |
---|
120 | dojo.addClass(target, "dndOver"); |
---|
121 | } |
---|
122 | else{ |
---|
123 | dojo.addClass(target, "dndOverNotAccepted"); |
---|
124 | } |
---|
125 | break; |
---|
126 | } |
---|
127 | }; |
---|
128 | |
---|
129 | /*Function: onOut |
---|
130 | * Call when the OAF draggedNode exits of a dojo target registered by the oafDndAdapter |
---|
131 | */ |
---|
132 | function onOut(target, type, draggedNode, accept){ |
---|
133 | //console.info("onOut ::: ", target, type, draggedNode); |
---|
134 | // remove the dropIndicator style for the tab of tabContainer. |
---|
135 | switch(type){ |
---|
136 | case "dijit.layout.TabContainer" : |
---|
137 | dojo.removeClass(target, "dndOver"); |
---|
138 | dojo.removeClass(target, "dndOverNotAccepted"); |
---|
139 | break; |
---|
140 | } |
---|
141 | }; |
---|
142 | |
---|
143 | function onDrop(node, target, type){ |
---|
144 | //console.log("onDrop ::: ", node, target, type); |
---|
145 | switch(type){ |
---|
146 | case "dijit.layout.TabContainer" : |
---|
147 | gridContainer.addChild(dijit.byNode(node), 0, 0); // add in first column / first element |
---|
148 | dojo.removeClass(target, "dndOver"); |
---|
149 | dojo.removeClass(target, "dndOverNotAccepted"); |
---|
150 | break; |
---|
151 | } |
---|
152 | }; |
---|
153 | |
---|
154 | function refresh(){ |
---|
155 | //console.info("refresh"); |
---|
156 | dojox.mdnd.adapter.dndToDojo().refresh(); |
---|
157 | }; |
---|
158 | |
---|