You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
4.4 KiB
160 lines
4.4 KiB
dojo.addOnLoad(init); |
|
var tabContainer, gridContainer; |
|
function init(){ |
|
tabContainer = dijit.byId("tb1"); |
|
dojo.subscribe("/dnd/drop/after", "createNode"); |
|
var adapter = dojox.mdnd.adapter.dndToDojo(); |
|
// register tabs of tabContainer. |
|
var dojoNode = dojo.query('.dijitTab', tabContainer.tablist.containerNode).forEach(function(node){ |
|
adapter.register(node, tabContainer.declaredClass); |
|
}); |
|
adapter.register(c2.node, "targetDojo", true, "Drag Me !"); |
|
|
|
adapter.isAccepted = function(draggedNode, target){ |
|
//console.log("isAccepted ::: ", draggedNode, target); |
|
var dndType = dijit.byNode(draggedNode).get("dndType"); |
|
switch(target.type){ |
|
case "dijit.layout.TabContainer" : |
|
var tabButton = dijit.byNode(target.node); |
|
var panes = tabContainer.getChildren(); |
|
for (var i = 0, l = panes.length; i < l; i++) { |
|
var gc = panes[i]; |
|
if (gc.controlButton == tabButton) { |
|
for (var j=0; j < gc.acceptTypes.length; j++){ |
|
if (dndType == gc.acceptTypes[j]){ |
|
gridContainer = gc; |
|
return true; |
|
} |
|
} |
|
if (j == gc.acceptTypes.length){ |
|
return false; |
|
} |
|
} |
|
} |
|
break; |
|
default: |
|
return true; |
|
break; |
|
|
|
}; |
|
}; |
|
|
|
dojo.subscribe("/dojox/mdnd/adapter/dndToDojo/over", null, "onOver"); |
|
dojo.subscribe("/dojox/mdnd/adapter/dndToDojo/out", null, "onOut"); |
|
dojo.subscribe("/dojox/mdnd/adapter/dndToDojo/drop", null, "onDrop"); |
|
|
|
dojo.subscribe("/dojox/mdnd/drop", null, function(){ |
|
dojo.forEach(dojoNode, function(node){ |
|
dojo.removeClass(node, "dndOver"); |
|
dojo.removeClass(node, "dndOverNotAccepted"); |
|
}); |
|
}); |
|
|
|
dojo.subscribe(tabContainer.domNode.id+"-removeChild", null, "refresh"); |
|
}; |
|
|
|
/** |
|
* DojoDndAdapter functions : |
|
* source/target dojo to D&D OAF Area |
|
*/ |
|
|
|
/*Function: createNode |
|
* Create a widget with a dojo draggedNode and drop this into a D&D OAF Area. |
|
*/ |
|
function createNode(source, nodes, copy, target, dropIndex){ |
|
//console.log("createNode ::: ", source, nodes, copy, target, dropIndex); |
|
if(target){ |
|
var widget = _createWidget(nodes); |
|
require(['dojox.mdnd.AreaManager'], function(am) { |
|
am.areaManager().addDragItem(target, widget.domNode, dropIndex); |
|
}) |
|
} |
|
}; |
|
/* |
|
* Widget Factory : Create a Dijit Widget with the type of draggedNode. |
|
*/ |
|
function _createWidget(/*Array*/nodes){ |
|
var type = nodes[0].getAttribute("dndType"); |
|
var widget; |
|
switch (type) { |
|
case "ContentPane": |
|
widget = new dijit.layout.ContentPane(); |
|
dojo.addClass(widget.domNode, 'cpane'); |
|
widget.set('dndType','ContentPane'); |
|
break; |
|
case "Portlet": |
|
widget = new dojox.widget.Portlet({ |
|
title: "portlet", |
|
closable : true, |
|
dndType:"Portlet" |
|
}); |
|
break; |
|
case "TitlePane": |
|
widget = new dijit.TitlePane({ |
|
title: "TitlePane", |
|
dndType:"TitlePane" |
|
}); |
|
break; |
|
default: |
|
widget = new dijit.layout.ContentPane(); |
|
dojo.addClass(widget.domNode, 'cpane'); |
|
widget.set('dndType','ContentPane'); |
|
break; |
|
} |
|
widget.set('content','Lorem ipsum dolor sit amet, consectetuer adipiscing elit.'); |
|
widget.startup(); |
|
return widget; |
|
}; |
|
|
|
/** |
|
* Adapter functions |
|
*/ |
|
|
|
/*Function: onOver |
|
* Call when the OAF draggedNode enters in a dojo target registered by the oafDndAdapter |
|
*/ |
|
function onOver(target, type, draggedNode, accept){ |
|
//console.info("onOver ::: ", target, type, draggedNode); |
|
// add the dropIndicator style for the tab of tabContainer. |
|
switch(type){ |
|
case "dijit.layout.TabContainer" : |
|
if (accept){ |
|
dojo.addClass(target, "dndOver"); |
|
} |
|
else{ |
|
dojo.addClass(target, "dndOverNotAccepted"); |
|
} |
|
break; |
|
} |
|
}; |
|
|
|
/*Function: onOut |
|
* Call when the OAF draggedNode exits of a dojo target registered by the oafDndAdapter |
|
*/ |
|
function onOut(target, type, draggedNode, accept){ |
|
//console.info("onOut ::: ", target, type, draggedNode); |
|
// remove the dropIndicator style for the tab of tabContainer. |
|
switch(type){ |
|
case "dijit.layout.TabContainer" : |
|
dojo.removeClass(target, "dndOver"); |
|
dojo.removeClass(target, "dndOverNotAccepted"); |
|
break; |
|
} |
|
}; |
|
|
|
function onDrop(node, target, type){ |
|
//console.log("onDrop ::: ", node, target, type); |
|
switch(type){ |
|
case "dijit.layout.TabContainer" : |
|
gridContainer.addChild(dijit.byNode(node), 0, 0); // add in first column / first element |
|
dojo.removeClass(target, "dndOver"); |
|
dojo.removeClass(target, "dndOverNotAccepted"); |
|
break; |
|
} |
|
}; |
|
|
|
function refresh(){ |
|
//console.info("refresh"); |
|
dojox.mdnd.adapter.dndToDojo().refresh(); |
|
}; |
|
|
|
|