dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
161 lines (147 loc) • 4.46 kB
JavaScript
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();
};