- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Sun, 17 Feb 2008 13:25:57 -0800
- To: Ian Hickson <ian@hixie.ch>
- CC: Mihai Sucan <mihai.sucan@gmail.com>, public-html <public-html@w3.org>
Ian Hickson wrote: > On Thu, 20 Sep 2007, Mihai Sucan wrote: >> The whole drag-and-drop API should specifically allow (mention in prose) >> that scripts can: >> >.... > >> 8. Two CSS pseudo-classes should be defined: >> >> a) One pseudo-class which matches the source element being dragged >> :drag-src. KHTML already implements this with the :-khtml-drag >> pseudo-class. [6] >> >> b) Another pseudo-class which matches the possible target element (when >> the user moves the pointer over any other element) :drag-dest. > > Agreed; however, this is out of scope for this spec. We may suggest it in > the rendering section, though. > > >> 10. I find both of the descriptions of the whole drag and drop API >> better on Microsoft [5] and Apple sites [6], when compared to the HTML 5 >> specification. Maybe you could take a look and see what could be done to >> "ease" the wording. >> >> Currently, the spec seems to lack a good overview (from "above") of how >> everything works. > > Yeah, we'll add an introduction section with examples and diagrams in due > course. > There are two distinct cases or modes of drag-n-drop. 1) Desktop level D&D when data is being dragged between different application domains. E.g. text selection from MS Word to be dragged in some <textarea> or <htmlarea> on the web page in some UA. That is pretty much standard copy-n-paste operation with some system supplied visualization. 2) Application level D&D. In case of web page(s) in UA that is dragging (moving/copying) of DOM elements from one container to another. Online sample is [2]. What case from the list above we are going to cover? ----------------------------------- One possible implementation [1] that covers case #2: Three CSS attributes: accept-drag: selector( ... ); 'accept-drag' defines DOM elements that can be dragged into the element. It declares element as a "drop-target" for all DOM elements matching the selector. drop: insert | append | prepend | recycle; 'drop' used on element with defined 'accept-drag' defines how dragged DOM element will appear in this drop-target after drop. dragging: none | copy-move | only-move | only-copy; 'dragging' enables element to be dragged and defines how it is allowed to be dragged. CSS flags (pseudo-classes): :copying ":copying" flag is set for dragged element when it is copied. Dragged element is drawn near the mouse pointer and this pseudo-class is used for styling copying state. :moving ":moving" flag is set for dragged element when it is moved. This pseudo-class is used for styling moving state of the dragged element. :drop-target ":drop-target" flag is 'on' for all elements that can accept-drag of current dragged element. This flags helps to implement "UI discoverability" of D&D operation. Properly styled it gives visual clue of where dragged element can be dropped. :drag-over ":drag-over" flag is set for the current drop-target element (if any). This pseudo-class allows to style current active drop-target when dragged element is over it. There are also DOM implementation specific events. In our case they defined in [1]. Attributes and flags above allow to implement application level D&D without any scripting - by just using declarations. For support of Desktop level D&D UA can wrap system D&D object into shadow DOM element with predefined id or class and use mechanism defined above. Example, declaration: (assumes that UA creates draggable element-wrapper with the id #sys-dd-envelope and attribute @content-type) textarea.dragaware { accept-drag: selector( #sys-dd-envelope[content-type="text/plain"] ); drop:insert; } will allow to enable to D&D of plain text only coming from other applications. Links: [1] http://www.terrainformatica.com/wiki/doku.php?id=h-smile:drag-n-drop - drag-n-drop support in h-smile core. [2] http://demo.script.aculo.us/shop - typical application level D&D - shopping cart. -- Andrew Fedoniouk. http://terrainformatica.com
Received on Sunday, 17 February 2008 21:26:14 UTC