HTML Standard Tracker

Filter

File a bug

SVNBugCommentTime (UTC)
565110712[Gecko] [Internet Explorer] [Opera] [Webkit] dropzone 4/5, part 2/2: DataTransferItem.2010-10-29 22:03
@@ -74876,21 +74876,21 @@ interface <dfn>NavigatorAbilities</dfn> {
   </div>
 
   <p class="note">This specification does not define the user
   interface for spelling and grammar checkers. A user agent could
   offer on-demand checking, could perform continuous checking while
   the checking is enabled, or could use other interfaces.</p>
 
 
   <h3 id="dnd"><dfn>Drag and drop</dfn></h3>
 
-<!-- v2 ideas for drag and drop:
+<!-- v2: ideas for drag and drop:
 
      * being able to animate a drop target:
 
        > To implement this with simple interface I've proposed, events
        > should be handled either by existing elements (like list
        > items that compare their size and position of dragged element
        > to decide whether element should be dropped before or after)
        > or handled by container that would probably need to calculate
        > positions of it's children and create new element to show
        > drop target. Smooth Mac-like drag'n'drop can be implemented
@@ -74914,23 +74914,31 @@ interface <dfn>NavigatorAbilities</dfn> {
        can know whether a capabilities URI that it is passing along is
        supposed to be read-write access or read-only access to the
        object being dragged.)
 
        We should let potential drop targets see the types (but not the
        contents!) of dragged data so they can establish if they care
        or not. (dataTransfer.hasType())
 
        Ack: Ben Laurie (@g)
 
-     * Promises. Should be able to say "if you accept this drop, then
-       I can provide the File object that corresponds to it
-       eventually".
+     Other things listed below:
+      DND-v2: more native support: text/html from selections, etc
+      DND-v3: add Blob support
+      DND-v4: add structured clone support
+      DND-v5: add promises (should be able to say "if you accept this
+              drop, then I can provide the File object that
+              corresponds to it eventually")
+
+         DataTransferPromise.type = 'string' or 'file' or 'blob' or 'data'
+                            .onneeddata - can wait until this fires to provide data
+                            .setData() - call this once you have data, must be the right type
 
 -->
 
   <p>This section defines an event-based drag-and-drop mechanism.</p>
 
   <p>This specification does not define exactly what a
   <em>drag-and-drop operation</em> actually is.</p>
 
   <p>On a visual medium with a pointing device, a drag operation could
   be the default action of a <code
@@ -75082,76 +75090,82 @@ interface <dfn>NavigatorAbilities</dfn> {
   <dfn>drag data store</dfn>, consists of the following information:</p>
 
   <ul>
 
    <li><p>A <dfn>drag data store item list</dfn>, which is a list of
    items representing the dragged data, each consisting of the
    following information:</p>
 
     <dl>
 
-     <dt><dfn>The drag data item type string</dfn></dt>
-
-     <dd>
-
-      <p>A Unicode string giving the type or format of the data,
-      generally given by a <span>MIME type</span>. Some values that
-      are not <span title="MIME type">MIME types</span> are
-      special-cased for legacy reasons. The API does not enforce the
-      use of <span title="MIME type">MIME types</span>; other values
-      can be used as well. In all cases, however, the values are all
-      <span>converted to ASCII lowercase</span> by the API.</p>
-
-     </dd>
-
      <dt><dfn>The drag data item kind</dfn></dt>
 
      <dd>
 
       <p>The kind of data:</p>
 
       <dl>
 
        <dt><i>Plain Unicode string</i></dt>
        <dd>
         <p>Text.</p>
        </dd>
 
+<!-- DND-v3:
        <dt><i>Blob</i></dt>
        <dd>
         <p>Binary data.</p>
        </dd>
+-->
 
        <dt><i>File</i></dt>
        <dd>
         <p>Binary data with a file name.</p>
        </dd>
 
-<!-- v2:
+<!-- DND-v4:
        <dt><i>Structured object</i></dt>
        <dd>
         <p>An object that will be cloned using the <span>structured clone</span> algorithm.</p>
        </dd>
 -->
 
       </dl>
 
      </dd>
 
+     <dt><dfn>The drag data item type string</dfn></dt>
+
+     <dd>
+
+      <p>A Unicode string giving the type or format of the data,
+      generally given by a <span>MIME type</span>. Some values that
+      are not <span title="MIME type">MIME types</span> are
+      special-cased for legacy reasons. The API does not enforce the
+      use of <span title="MIME type">MIME types</span>; other values
+      can be used as well. In all cases, however, the values are all
+      <span>converted to ASCII lowercase</span> by the API.</p>
+
+     </dd>
+
      <dt>The actual data</dt>
 
      <dd><p>A Unicode or binary string, optionally with a file name
-     (itself a Unicode string), <!-- (v2:) or an object, --> as per
+     (itself a Unicode string), <!-- (DND-v4:) or an object, --> as per
      <span>the drag data item kind</span>.</p></dd>
 
     </dl>
 
+    <p>The <span>drag data store item list</span> is ordered in the
+    order that the items were added to the list; most recently added
+    last.</p>
+
    </li>
 
    <li>
 
     <p>The following information, used to generate the UI feedback
     during the drag:</p>
 
     <ul>
 
      <li>User-agent-defined default feedback information, known as the
@@ -75580,24 +75594,24 @@ interface <dfn>NavigatorAbilities</dfn> {
 
    <li><p>Start with an empty list <var title="">L</var>.</p></li>
 
    <li><p>If the <code>DataTransfer</code> object is no longer
    associated with a <span>drag data store</span>, the
    <code>FileList</code> is empty. Abort these steps; return the
    empty list <var title="">L</var>.</p></li>
 
    <li><p>For each item in the <span>drag data store item list</span>
    <!-- in some order...? --> whose <span title="the drag data item
-   kind">kind</span> is <i>File</i> (not <i>Blob</i>), add the item's
-   data (the file, in particular its name and contents, as well as its
-   <span title="the drag data item type string">type</span>) to the
-   list <var title="">L</var>.</p></li>
+   kind">kind</span> is <i>File</i> <!-- DND-v3: (not <i>Blob</i>) -->,
+   add the item's data (the file, in particular its name and contents,
+   as well as its <span title="the drag data item type
+   string">type</span>) to the list <var title="">L</var>.</p></li>
 
    <!-- <li><p>Sort the list...?</p></li> -->
 
    <li><p>The files found by these steps are those in the list <var
    title="">L</var>.</p></li>
 
   </ol>
 
   <p class="note">This version of the API does not expose the types of
   the files during the drag.</p>
@@ -75675,26 +75689,25 @@ interface <dfn>NavigatorAbilities</dfn> {
 
   <p>Each <code>DataTransfer</code> object is associated with a
   <code>DataTransferItems</code> object.</p>
 
   <pre class="idl">interface <dfn>DataTransferItems</dfn> {
   readonly attribute unsigned long <span title="dom-DataTransferItems-length">length</span>;
   <span title="dom-DataTransferItems-item">getter</span> <span>DataTransferItem</span> (in unsigned long index);
   <span title="dom-DataTransferItems-removeItem">deleter</span> void (in unsigned long index);
   void <span title="dom-DataTransferItems-clear">clear</span>();
 
-  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</span>(in DOMString data, in DOMString type);
-  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</span>(in <span>Blob</span> data);
-  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</span>(in <span>File</span> data);
-  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</span>(in <span>DataTransferItem</span> data);<!--
-v2:  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</span>(in any data, in DOMString type);--><!--
-v3:  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</span>(in <span>DataTransferPromise</span> data);-->
+  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</span>(in DOMString data, in DOMString type);<!--
+DND-v3:  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</span>(in <span>Blob</span> data);-->
+  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</span>(in <span>File</span> data);<!--
+DND-v4:  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</span>(in any data, in DOMString type);--><!--
+DND-v5:  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</span>(in <span>DataTransferPromise</span> data);-->
 };</pre>
 
   <dl class="domintro">
 
    <dt><var title="">items</var> . <code title="dom-DataTransferItems-length">length</code></dt>
 
    <dd><p>Returns the number of items in the <span>drag data store</span>.</p></dd>
 
 
    <dt><var title="">items</var>[<var title="">index</var>]</dt>
@@ -75723,64 +75736,68 @@ v3:  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</
 
    </dd>
 
 
    <dt><var title="">items</var> . <code title="dom-DataTransferItems-add">add</code>(<var title="">data</var>)</dt>
    <dt><var title="">items</var> . <code title="dom-DataTransferItems-add">add</code>(<var title="">data</var>, <var title="">type</var>)</dt>
 
    <dd>
 
     <p>Adds a new entry for the given data to the <span>drag data
-    store</span>. If the data is plain text <!-- v2: or an object -->
+    store</span>. If the data is plain text <!-- DND-v4: or an object -->
     then a <var title="">type</var> string has to be provided
     also.</p>
 
    </dd>
 
   </dl>
 
   <div class="impl">
 
   <p>While the <code>DataTransferItems</code> object's
   <code>DataTransfer</code> object is associated with a <span>drag
   data store</span>, the <code>DataTransferItems</code> object's
   <i>mode</i> is the same as the <span>drag data store mode</span>.
   When the <code>DataTransferItems</code> object's
   <code>DataTransfer</code> object is <em>not</em> associated with a
   <span>drag data store</span>, the <code>DataTransferItems</code>
-  object's <i>mode</i> is <i>disabled mode</i>. The <span>drag data
-  store</span> referenced in this section (which is used only when the
-  <code>DataTransferItems</code> object is not in the <i>disabled
-  mode</i>) is the <span>drag data store</span> with which the
-  <code>DataTransferItems</code> object's <code>DataTransfer</code>
-  object is associated.</p>
+  object's <i>mode</i> is the <i>disabled mode</i>. The <span>drag
+  data store</span> referenced in this section (which is used only
+  when the <code>DataTransferItems</code> object is not in the
+  <i>disabled mode</i>) is the <span>drag data store</span> with which
+  the <code>DataTransferItems</code> object's
+  <code>DataTransfer</code> object is associated.</p>
 
   <p>The <dfn
   title="dom-DataTransferItems-length"><code>length</code></dfn>
   attribute must return zero if the object is in the <i>disabled
   mode</i>; otherwise it must return the number of items in the
   <span>drag data store item list</span>.</p>
 
   <p>When a <code>DataTransferItems</code> object is not in the
   <i>disabled mode</i>, its <span>supported property indices</span>
   are the numbers in the range
 
     <span title="">0 .. <var title="">n</var>-1</span>,
 
   where <var title="">n</var> is the number of items in the <span>drag
   data store item list</span>.</p>
 
   <p>To <dfn title="dom-DataTransferItems-item">determine the value of
   an indexed property</dfn> <var title="">i</var> of a
   <code>DataTransferItems</code> object, the user agent must return a
   <code>DataTransferItem</code> object representing the <var
-  title="">i</var>th item in the <span>drag data store</span>.</p>
+  title="">i</var>th item in the <span>drag data store</span>. The
+  same object must be returned each time. The
+  <code>DataTransferItem</code> object must be associated with the
+  same <code>DataTransfer</code> object as the
+  <code>DataTransferItems</code> object when it is created.</p>
 
   <p>To <dfn title="dom-DataTransferItems-removeItem">delete an
   existing indexed property</dfn> <var title="">i</var> of a
   <code>DataTransferItems</code> object, the user agent must run these
   steps:</p>
 
   <ol>
 
    <li><p>If the <code>DataTransferItems</code> object is not in the
    <i title="concept-dnd-rw">read/write mode</i>, throw an
@@ -75792,53 +75809,294 @@ v3:  <span>DataTransferItem</span> <span title="dom-DataTransferItems-add">add</
 
   </ol>
 
   <p>The <dfn
   title="dom-DataTransferItems-clear"><code>clear</code></dfn> method,
   if the <code>DataTransferItems</code> object is in the <i
   title="concept-dnd-rw">read/write mode</i>, must remove all the
   items from the <span>drag data store</span>. Otherwise, it must do
   nothing.</p>
 
+  <p>The <dfn
+  title="dom-DataTransferItems-add"><code>add()</code></dfn> method
+  must run the following steps:</p>
+
+  <ol>
+
+   <li><p>If the <code>DataTransferItems</code> object is not in the
+   <i title="concept-dnd-rw">read/write mode</i>, return null and
+   abort these steps.</p></li>
+
+   <li>
+
+  </ol>
+
   </div>
 
 
   <h5>The <code>DataTransferItem</code> interface</h5>
 
-  <p class="XXX">...</p>
+  <p>Each <code>DataTransferItem</code> object is associated with a
+  <code>DataTransfer</code> object.</p>
 
-<!--
+  <pre class="idl">interface <dfn>DataTransferItem</dfn> {
+    readonly attribute DOMString <span title="dom-DataTransferItem-kind">kind</span>;
+    readonly attribute DOMString <span title="dom-DataTransferItem-type">type</span>;
+    void <span title="dom-DataTransferItem-getAsText">getAsText</span>(in <span>FunctionStringCallback</span> callback);<!--
+DND-v3:    <span>Blob</span> <span title="dom-DataTransferItem-getAsBlob">getAsBlob</span>();-->
+    <span>File</span> <span title="dom-DataTransferItem-getAsFile">getAsFile</span>();<!--
+DND-v4:    void <span title="dom-DataTransferItem-getAsObject">getAsObject</span>(in <span>FunctionObjectCallback</span> callback);-->
+};
 
-         DataTransferItem.kind = 'string', 'file', 'blob', 'data'?, ...
-                         .type = MIME type
-                         .getTextData(function callback (data)) - throws if kind is not 'string'
-                         .getRawData(function callback (data)) - throws if kind is not 'data'
-                         .getBlob() - returns File or Blob (which are async anyway); throws if kind is 'data'
+[Callback=FunctionOnly, NoInterfaceObject]
+interface <dfn>FunctionStringCallback</dfn> {
+  void <span title="dom-FunctionStringCallback-handleEvent">handleEvent</span>(in DOMString data);
+};<!--
 
-         DataTransferPromise.type = 'string' or 'file' or 'blob' or 'data'
-                            .onneeddata - can wait until this fires to provide data
-                            .setData() - call this once you have data, must be the right type
+// DND-v4:
+[Callback=FunctionOnly, NoInterfaceObject]
+interface <dfn>FunctionObjectCallback</dfn> {
+  void <span title="dom-FunctionObjectCallback-handleEvent">handleEvent</span>(in DOMString data);
+};--></pre>
+
+  <dl class="domintro">
+
+   <dt><var title="">item</var> . <code title="dom-DataTransferItem-kind">kind</code></dt>
+   <dd>
+
+    <p>Returns the <span>drag data item kind</span>, one of: "string",
+    <!-- DND-v3: "blob", --> "file"<!-- DND-v4: , "object" -->.</p>
+
+   </dd>
+
+   <dt><var title="">item</var> . <code title="dom-DataTransferItem-type">type</code></dt>
+   <dd>
+
+    <p>Returns the <span>drag data item type string</span>.</p>
+
+   </dd>
+
+   <dt><var title="">item</var> . <code title="dom-DataTransferItem-getAsString">getAsString</code>(<var title="">callback</var>)</dt>
+   <dd>
+
+    <p>Invokes the callback with the string data as the argument, if the <span>drag data item kind</span> is <i>Plain Unicode string</i>.</p>
+
+   </dd>
+
+<!-- DND-v3:
+   <dt><var title="">file</var> = <var title="">item</var> . <code title="dom-DataTransferItem-getAsBlob">getAsBlob</code>()</dt>
+   <dd>
+
+    <p>Returns a <code>Blob</code> object, if the <span>drag data item kind</span> is <i>Blob</i> or <i>File</i>.</p>
+
+   </dd>
 -->
 
-<!-- xxx mention that if an item is removed from a data store, DataTransferItem objects become unusable -->
+   <dt><var title="">file</var> = <var title="">item</var> . <code title="dom-DataTransferItem-getAsFile">getAsFile</code>()</dt>
+   <dd>
 
+    <p>Returns a <code>File</code> object, if the <span>drag data item kind</span> is <i>File</i>.</p>
 
-<!--
+   </dd>
 
-XXX DND WIP
+<!-- DND-v4:
+   <dt><var title="">file</var> = <var title="">item</var> . <code title="dom-DataTransferItem-getAsFile">getAsFile</code>()</dt>
+   <dd>
 
-plan:
- 4. expose model with new API
- 5. add dropzone="..." feature
+    <p>Invokes the callback with the cloned object data as the argument, if the <span>drag data item kind</span> is <i>Plain Unicode string</i> or <i>Object</i>.</p>
 
+   </dd>
 -->
 
+  </dl>
+
+  <div class="impl">
+
+  <p>While the <code>DataTransferItem</code> object's
+  <code>DataTransfer</code> object is associated with a <span>drag
+  data store</span> and that <span>drag data store</span>'s <span>drag
+  drop store item list</span> still contains the item that the
+  <code>DataTransferItem</code> object represents, the
+  <code>DataTransferItem</code> object's <i>mode</i> is the same as
+  the <span>drag data store mode</span>. When the
+  <code>DataTransferItem</code> object's <code>DataTransfer</code>
+  object is <em>not</em> associated with a <span>drag data
+  store</span>, or if the item that the <code>DataTransferItem</code>
+  object represents has been removed from the relevant <span>drag drop
+  store item list</span>, the <code>DataTransferItem</code> object's
+  <i>mode</i> is the <i>disabled mode</i>. The <span>drag data
+  store</span> referenced in this section (which is used only when the
+  <code>DataTransferItem</code> object is not in the <i>disabled
+  mode</i>) is the <span>drag data store</span> with which the
+  <code>DataTransferItem</code> object's <code>DataTransfer</code>
+  object is associated.</p>
+
+  <p>The <dfn
+  title="dom-DataTransferItem-kind"><code>kind</code></dfn> attribute
+  must return the empty string if the <code>DataTransferItem</code>
+  object is in the <i>disabled mode</i>; otherwise it must return the
+  string given in the cell from the second column of the following
+  table from the row whose cell in the first column contains <span>the
+  drag data item kind</span> of the item represented by the
+  <code>DataTransferItem</code> object:</p>
+
+  <table>
+   <thead>
+    <tr> <th> Kind <th> String
+   <tbody>
+    <tr> <td> <i>Plain Unicode string</i> <td> "<code title="">string</code>"
+<!-- DND-v3:    <tr> <td> <i>Blob</i> <td> "<code title="">blob</code>"-->
+    <tr> <td> <i>File</i> <td> "<code title="">file</code>"
+<!-- DND-v4:    <tr> <td> <i>Object</i> <td> "<code title="">object</code>"-->
+  </table>
+
+  <p>The <dfn
+  title="dom-DataTransferItem-type"><code>type</code></dfn> attribute
+  must return the empty string if the <code>DataTransferItem</code>
+  object is in the <i>disabled mode</i>; otherwise it must return
+  <span>the drag data item type string</span> of the item represented
+  by the <code>DataTransferItem</code> object.</p>
+
+  <p>The <dfn
+  title="dom-DataTransferItem-getAsString"><code>getAsString(<var
+  title="">callback</var>)</code></dfn> method must run the following
+  steps:</p>
+
+  <ol>
+
+   <li><p>If the <var title="">callback</var> is null, abort these
+   steps.</p></li>
+
+   <li><p>If the <code>DataTransferItem</code> object is not in the <i
+   title="concept-dnd-rw">read/write mode</i> or the <i
+   title="concept-dnd-ro">read-only mode</i>, abort these steps. The
+   callback is never invoked.</p></li>
+
+   <li><p>If the <span>data drag item kind</span> is not <i>Plain
+   Unicode string</i>, abort these steps. The callback is never
+   invoked.</p></li>
+
+   <li><p>Otherwise, <span>queue a task</span> to invoke <var
+   title="">callback</var>, passing the actual data of the item
+   represented by the <code>DataTransferItem</code> object as the
+   argument.</p></li>
+
+  </ol>
+
+<!--DND-v3:
+  <p>The <dfn
+  title="dom-DataTransferItem-getAsBlob"><code>getAsBlob()</code></dfn>
+  method must run the following steps:</p>
+
+  <ol>
+
+   <li><p>If the <code>DataTransferItem</code> object is not in the <i
+   title="concept-dnd-rw">read/write mode</i> or the <i
+   title="concept-dnd-ro">read-only mode</i>, return null and abort
+   these steps.</p></li>
+
+   <li>
+
+--><!--DND-v4:
+    <p>If the <span>data drag item kind</span> is <i>Object</i>,
+    return null.</p></li>
+--><!--DND-v3:
+
+    <p>If the <span>data drag item kind</span> is <i>File</i>, then
+    return a new <code>File</code> object representing the actual data
+    of the item represented by the <code>DataTransferItem</code>
+    object.</p>
+
+    <p>If the <span>data drag item kind</span> is <i>Unicode Data
+    string</i>, then return a new <code>Blob</code> object
+    representing the actual data of the item represented by the
+    <code>DataTransferItem</code> object, with the <code
+    title="dom-Blob-type">type</code> of the <code>Blob</code> being
+    <span>the drag data item type string</span> and with the binary
+    data of the <code>Blob</code> object being the Unicode string
+    encoded as UTF-8. <a href="#refsRFC3629">[RFC3629]</a></p>
+
+    <p>Otherwise, the <span>data drag item kind</span> is <i>Blob</i>;
+    return a new <code>Blob</code> object representing the actual data
+    of the item represented by the <code>DataTransferItem</code>
+    object.</p>
+
+   </li>
+
+  </ol>
+-->
+
+  <p>The <dfn
+  title="dom-DataTransferItem-getAsFile"><code>getAsFile()</code></dfn>
+  method must run the following steps:</p>
+
+  <ol>
+
+   <li><p>If the <code>DataTransferItem</code> object is not in the <i
+   title="concept-dnd-rw">read/write mode</i> or the <i
+   title="concept-dnd-ro">read-only mode</i>, return null and abort
+   these steps.</p></li>
+
+   <li><p>If the <span>data drag item kind</span> is not <i>File</i>,
+   then return null and abort these steps.</p></li>
+
+   <li><p>Return a new <code>File</code> object representing the
+   actual data of the item represented by the
+   <code>DataTransferItem</code> object.</p>
+
+  </ol>
+
+<!--DND-v4:
+  <p>The <dfn
+  title="dom-DataTransferItem-getAsObject"><code>getAsObject(<var
+  title="">callback</var>)</code></dfn> method must run the following
+  steps:</p>
+
+  <ol>
+
+   <li><p>If the <code>DataTransferItem</code> object is not in the <i
+   title="concept-dnd-rw">read/write mode</i> or the <i
+   title="concept-dnd-ro">read-only mode</i>, return null and abort
+   these steps.</p></li>
+
+   <li>
+
+    <p>Let <var title="">data</var> be the actual data of the item
+    represented by the <code>DataTransferItem</code> object.</p>
+
+    <p>If the <span>data drag item kind</span> is <i>Unicode Data
+    string</i>, then <var title="">data</var> is a <code
+    title="">DOMString</code> containing the actual data.</p>
+
+    <p>If the <span>data drag item kind</span> is <i>Blob</i>, then
+    <var title="">data</var> is a <code>Blob</code> representing the
+    actual data.</p>
+
+    <p>If the <span>data drag item kind</span> is <i>File</i>, then
+    <var title="">data</var> is a <code>File</code> representing the
+    actual data.</p>
+
+    <p>If the <span>data drag item kind</span> is <i>Object</i>, then
+    <var title="">data</var> is the object that is the actual
+    data.</p>
+
+   </li>
+
+   <li><span>Queue a task</span> to invoke <var
+   title="">callback</var>, passing a <span>structured clone</span> of
+   <var title="">data</var> as the argument.</p></li>
+
+  </ol>
+-->
+
+  </div>
+
 
 
   <h4>The <code>DragEvent</code> interface</h4>
 
   <p>The drag-and-drop processing model involves several events. They
   all use the <code>DragEvent</code> interface.</p>
 
   <pre class="idl">interface <dfn>DragEvent</dfn> : <span>MouseEvent</span> {
   readonly attribute <span>DataTransfer</span> <span title="dom-DragEvent-dataTransfer">dataTransfer</span>;
 
@@ -76140,21 +76398,21 @@ plan:
     conventions where appropriate; however, if the platform
     conventions do not use <span title="MIME type">MIME types</span>
     to label dragged data, the user agent must make a best-effort
     attempt to map the types to MIME types, and, in any case, all the
     <span title="the drag data item type string">drag data item type
     strings</span> must be <span>converted to ASCII
     lowercase</span>.</p>
 
    </li>
 
-   <!-- v2: text/html as an export format -->
+   <!-- DND-v2: text/html as an export format -->
 
 <!--END w3c-html--><!--MD-->
 
    <li>
 
     <p>If the <span>list of dragged nodes</span> is not empty, then
     <span title="extracting JSON">extract the microdata from those
     nodes into a JSON form</span>, and add one item to the <span>drag
     data store item list</span>, with its properties set as
     follows:</p>
@@ -76175,49 +76433,20 @@ plan:
    </li>
 
 <!--END complete--><!--END epub--><!--END html-->
 <!--START w3c-html--><!--MD-->
 
    <li>Perform <dfn>drag-and-drop initialization steps</dfn> defined
    in any <span>other applicable specifications</span>.</li>
 
 <!--START complete--><!--START epub--><!--START html-->
 
-<!-- v2: deal with multiple vCards -->
-<!--
-   <li>
-
-    (if you put this back, don't forget to update this text as above)
-
-    <p>The user agent must take the <span>list of dragged nodes</span>
-    and <span title="extracting a vCard">extract the vCard data from
-    those nodes</span>, and then must add the resulting string to the
-    <code title="dom-DragEvent-dataTransfer">dataTransfer</code>
-    member, associated with the <code
-    title="">text/directory;profile=vcard</code> format.</p>
-
-   </li>
-
-   <li>
-
-    (if you put this back, don't forget to update this text as above)
-
-    <p>The user agent must take the <span>list of dragged nodes</span>
-    and <span title="extracting vEvent data">extract the vEvent data
-    from those nodes</span>, and then must add the resulting string to
-    the <code title="dom-DragEvent-dataTransfer">dataTransfer</code>
-    member, associated with the <code
-    title="">text/calendar;component=vevent</code> format.</p>
-
-   </li>
--->
-
    <li>
 
     <p>Run the following substeps:</p>
 
     <ol>
 
      <li><p>Let <var title="">urls</var> be an empty list of <span
      title="absolute URL">absolute URLs</span>.</p></li>
 
      <li>
@@ -76236,21 +76465,21 @@ plan:
        relative to the element.</dd>
 
        <dt>If the node is an <code>img</code> element with an <code
        title="attr-img-src">src</code> attribute</dt>
 
        <dd>Add to <var title="">urls</var> the result of <span
        title="resolve a url">resolving</span> the element's <code
        title="attr-img-src">src</code> content attribute relative to
        the element.</dd>
 
-       <!-- v2: more -->
+       <!-- DND-v2: more -->
 
       </dl>
 
      </li>
 
      <li><p>If <var title="">urls</var> is still empty, abort these
      substeps.</p></li>
 
      <li><p>Let <var title="">url string</var> be the result of
      concatenating the strings in <var title="">urls</var>, in the
@@ -76887,20 +77116,25 @@ plan:
   <p>Not shown in the above table: all these events bubble, and the
   <code title="dom-DataTransfer-effectAllowed">effectAllowed</code>
   attribute always has the value it had after the previous event was
   fired, defaulting to "<code title="">uninitialized</code>" in the
   <code title="event-dragstart">dragstart</code> event.</p>
 
 
 
   <h4>The <dfn title="attr-draggable"><code>draggable</code></dfn> attribute</h4>
 
+<!--
+XXX DND WIP plan:
+ 5. add dropzone="..." feature
+-->
+
   <p>All <span>HTML elements</span> may have the <code
   title="attr-draggable">draggable</code> content attribute set. The
   <code title="attr-draggable">draggable</code> attribute is an
   <span>enumerated attribute</span>. It has three states. The first
   state is <i>true</i> and it has the keyword <code
   title="">true</code>. The second state is <i>false</i> and it has
   the keyword <code title="">false</code>. The third state is
   <i>auto</i>; it has no keywords but it is the <i>missing value
   default</i>.</p>
 

|