Simple drag/drop helper. Use _: TK.DragDrop to make an element dragable. Use the css class name "toolkitDragDropContainer" to mark that element as a drop area.
During drag and drop, the following styles are available for extra styling: toolkitDragDropContainerArea (Marks all dropable areas), toolkitDragDropContainerHover (Marks the area currently hovering over).
{ Elements: { ContainerA: { style: { backgroundColor: "#fee", width: "400px", height: "400px" }, className: "toolkitDragDropContainer", Elements: { ItemA: { _: TK.DragDrop, innerHTML: "Item A" }, ItemB: { _: TK.DragDrop, innerHTML: "Item B" } } }, ContainerB: { style: { backgroundColor: "#eef", width: "400px", height: "400px" }, className: "toolkitDragDropContainer", Elements: { ItemC: { _: TK.DragDrop, innerHTML: "Item C" }, ItemD: { _: TK.DragDrop, innerHTML: "Item D (New element source)", ElementTemplate: { _: TK.DragDrop, innerHTML: "I am a new element" } }, ItemE: { _: TK.DragDrop, innerHTML: "Item E (With custom hover)", HoverTemplate: { innerHTML: "I am a custom hover" } }, ItemF: { _: TK.DragDrop, innerHTML: "Item F (With dropped callback)", Dropped: function(container, addedElement) { alert('The container I am dropped in has ' + container.childNodes.length + ' items'); } }, }, Drop: function(elementOrTemplate, x, y) { // If both HoverTemplate and ElementTemplate is set, // the template will be passed instead of an element alert("Dropped in ContainerB: "+ elementOrTemplate.innerHTML + " at location ("+x+","+y+")"); // If this method is adding the block manually (or handling it some other way) // return anything other than null/undefined/false, so the element won't be added automatically // this return value will also be passed into the .Dropped callback } } } }