- From: Mihai Sucan <mihai.sucan@gmail.com>
- Date: Thu, 20 Sep 2007 19:54:59 +0300
- To: public-html <public-html@w3.org>
Hello! I have reviewed section 5.3. "Drag and drop" [1]. I have several comments to make. The whole drag-and-drop API should specifically allow (mention in prose) that scripts can: 1. on dragstart setup several types of data - in different formats. Say, on dragstart a script can define setData('text/html', 'whatever') and setData('text/plain', 'whatever2'). However, do not limit this to textual content types: images, videos, sounds, and other binary formats should be allowed. This can be done based on the source object, or based on any arbitrary data in the source document. This is allowed by the spec now - but not very well explained. 2. on drop, the target object can retrieve any of the available types needed. Some targets can only accept text/html, some other text/plain, while others can accept any type of data. 3. The above two points should be valid in the copy/paste scenarios presented [2]. But for now, only two formats are allowed for paste: text/plain and text/uri-list. [3] "When the user invokes a clipboard paste operation, the user agent must act as if the user had invoked a drag on a hypothetical application representing the clipboard, setting the data associated with the drag as the text from the keyboard (either as text/plain or text/uri-list). If the contents of the clipboard cannot be represented as text or URIs, then the paste operation must not have any effect." That's not something "great". The idea is: On Windows I can copy mathematical formulas from Mathematica, then paste in Notepad and I get the textual representation. I can also paste the "same" data in IrfanView where I get the actual render of the formula (like in Mathematica). The same goes for copy/pasting HTML: in Firefox you can copy HTML, then paste it as HTML in OpenOffice, or as plain text in Vim. Why not allow this on the Web? 4. Pasting stuff should work on any focusable element in a HTML 5 document. Do not restrict the paste action to inputs where text can be pasted (as it seems to be now, given the type restriction). Allow the scripts to do whatever they want with the provided data, with all the provided types. Given the Mathematica example above: a script, on paste, could show the textual formula and the render of the formula in the same document. Problem: there's a need to define a way to work with binary data in the DOM. For example, a way take an image/png from a paste action and display it in the document - this would be (almost?) doable with a data: uri. 5. The same goes for copy: allow users to try to "copy" any focusable element. Obviously, the UA will do nothing - unless some text can be copied to the clipboard - a selection. However, the script could provide some data (with the setData method). The API provided by Microsoft [4] allows the authors to enable/disable the cut/copy/paste operations on elements, and to attach event handlers for all these operations. The HTML 5 spec should define something similar. 6. I read the HTML 5 spec on drag and drop, then I read the documentation from Microsoft [5] and Apple [6]. Immediately after reading the spec I took some notes about having the type attribute for the dataTransfer object, defined as an array which lists the available data types. I was surprised to see exactly this idea in the Apple documentation for WebKit. Very good. I strongly recommend adding the types attribute to the DataTransfer object. 7. Also, there should be a way to check the keyboard modifiers in the events (ctrl, shift, and alt). This is to allow authors to build web applications for to the following two scenarios, when the user starts dragging some object to a target: a) The default action is to move the object. With Shift the object would be copied, not moved. b) The default action is to copy the content of the object as HTML. Using Ctrl the content would be copied as text/plain. Of course, there more use cases for allowing key modifiers - it really depends on the creativity of authors. Think of sliders, other complex form widgets, 3D objects, etc. If I am not mistaken, Internet Explorer already provides these attributes. [7] 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. 9. The drag and drop XPCOM interfaces available in the Gecko platform is different, but actually provide rather similar functionality, similar concept. [8] As it seems, Gecko doesn't provide any psuedo-classes for this API. 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. [1] http://www.whatwg.org/specs/web-apps/current-work/multipage/section-dnd.html#dnd [2] http://www.whatwg.org/specs/web-apps/current-work/multipage/section-dnd.html#copy-and [3] http://www.whatwg.org/specs/web-apps/current-work/multipage/section-dnd.html#paste [4] http://msdn2.microsoft.com/en-us/library/ms535220.aspx [5] http://msdn2.microsoft.com/en-us/library/ms537658.aspx [6] http://developer.apple.com/documentation/AppleApplications/Conceptual/SafariJSProgTopics/Tasks/DragAndDrop.html [7] http://msdn2.microsoft.com/en-us/library/ms536928.aspx [8] http://developer.mozilla.org/en/docs/Drag_and_Drop -- http://www.robodesign.ro
Received on Thursday, 20 September 2007 16:55:14 UTC