- From: Brad Fults <bfults@gmail.com>
- Date: Fri, 6 May 2005 00:48:52 -0700
On 5/4/05, Ian Hickson <ian at hixie.ch> wrote: > > As far as editing goes, contentEditable="" is the way we're going at the > moment, I think. Focusable is probably going to be tabindex="". > Selectable hasn't yet been discussed (I could be convinced that that is > presentational, actually). Draggable is clearly not presentational; my > current thinking is something like contentDraggable="" or something. I don't really see a case outside the datagrid dragging (which is handled elsewhere) where there would be a need to specify an element as draggable or as a drag target without scripting in drag behavior. In light of this, I don't see any reason to pollute the HTML namespace with more attributes (contentDraggable) when this will necessarily be a scripted event anyway. Please feel free to point out cases where another HTML attribute would have an advantage over a DOM property that could be set directly via script. As for the dragging event model for a single DOM element, I think the events outlined in the current draft of the spec are a good start. In addition, however, it would be nice to add some presentational niceties via CSS pseudo-classes. :draggable = DOM element that has .draggable=true (or whatever is decided on) :dragging = DOM element that is being dragged (perhaps opacity: 0.5) :dragging:droppable = DOM element that is being dragged and can be dropped over its current location :dragtarget / ? = container that allows for the current dragging element to be dropped upon it (border: 2px dotted red) :dragged = the original DOM element that was dragged, in its original position (it would be up to script to determine whether or not to remove it or whatever else) I think something along these lines is invaluable to a rich GUI interface. Drag groups could be specified by a simple NodeList that would be defined at dragstart. e.g. var elDrag = document.getElementById("mydragelement"); var myNodeList = []; myNodeList.push(document.getElementById("dragfriend1")); myNodeList.push(document.getElementById("dragfriend2")); // or just as easily: var myNodeList = document.getElementsByTagName("LI"); elDrag.addEventListener("dragstart", function(e) { e.dragNodes.appendChildren(myNodeList); return true; }, false); For the droppable model, it makes sense to have the drag target element specify either Elements or NodeLists that are droppable. e.g. var elDragTarget = document.getElementById("mydragtarget"); elDragTarget.addDroppable(elDrag); elDragTarget.addDroppable(myNodeList); Then the question comes about dragging a group of elements to a drag target which only has *some* of the dragged elements in its droppable list. Without thinking about it too much, I think this could be handled when the elements are dropped as such: elDrag.addEventListener("dragend", function(e) { // go through each dropped element and check if it's droppable on the drag target for (var i=0; i < e.dragNodes.length; i++) if ( !dragTarget.isDroppable(e.dragNodes[i]) ) alert("Unabled to drag "+e.dragNodes[i].id+" to "+dragTarget.id); // of course something more graceful than an alert could be done return true; }, false); Anyway, most of it is food for thought. -- Brad Fults NeatBox -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/attachments/20050506/cf35eaa6/attachment.htm>
Received on Friday, 6 May 2005 00:48:52 UTC