source: Dev/trunk/src/client/dojox/layout/tests/resources/script_dnd.js

Last change on this file was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 4.3 KB
Line 
1dojo.addOnLoad(init);
2var tabContainer, gridContainer;
3function 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 */
64function 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 */
74function _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 */
114function 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 */
132function 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
143function 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
154function refresh(){
155        //console.info("refresh");
156        dojox.mdnd.adapter.dndToDojo().refresh();
157};
158
Note: See TracBrowser for help on using the repository browser.