HTML Standard Tracker

Filter

File a bug

SVNBugCommentTime (UTC)
2319Remove data templates and repetition templates.2008-10-10 02:27
@@ -282,25 +282,20 @@
 
 
    <dt><a href="#comms">The Communication APIs</a></dt>
 
    <dd>Applications written in HTML often require mechanisms to
    communicate with remote servers, as well as communicating with
    other applications from different domains running on the same
    client.</dd>
 
 
-   <dt><a href="#datatemplate">Data Templates</a></dt>
-
-   <dd>A mechanism to support repeating sections in forms.</dd>
-
-
    <dt><a href="#syntax">The Language Syntax</a></dt>
 
    <dd>All of these features would be for naught if they couldn't be
    represented in a serialized form and sent to other people, and so
    this section defines the syntax of HTML, along with rules for how
    to parse HTML.</dd>
 
 
   </dl>
 
@@ -5901,28 +5896,20 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E..
   void <span title="dom-focus">focus</span>();
   void <span title="dom-blur">blur</span>();
            attribute boolean <span title="dom-draggable">draggable</span>;
            attribute DOMString <span title="dom-contentEditable">contentEditable</span>;
   readonly attribute boolean <span title="dom-isContentEditable">isContentEditable</span>;
            attribute <span>HTMLMenuElement</span> <span title="dom-contextMenu">contextMenu</span>;
 
   // <span>styling</span>
   readonly attribute <span>CSSStyleDeclaration</span> <span title="dom-style">style</span>;
 
-  // <span>data templates</span>
-           attribute DOMString <span title="dom-template">template</span>;
-  readonly attribute <span>HTMLDataTemplateElement</span> <span title="dom-templateElement">templateElement</span>;
-           attribute DOMString <span title="dom-ref">ref</span>;
-  readonly attribute Node <span title="dom-refNode">refNode</span>;
-           attribute DOMString <span title="dom-registrationMark">registrationMark</span>;
-  readonly attribute DocumentFragment <span title="dom-originalContent">originalContent</span>;
-
   // <span>event handler DOM attributes</span>
            attribute <span>EventListener</span> <span title="handler-onabort">onabort</span>;
            attribute <span>EventListener</span> <span title="handler-onbeforeunload">onbeforeunload</span>;
            attribute <span>EventListener</span> <span title="handler-onblur">onblur</span>;
            attribute <span>EventListener</span> <span title="handler-onchange">onchange</span>;
            attribute <span>EventListener</span> <span title="handler-onclick">onclick</span>;
            attribute <span>EventListener</span> <span title="handler-oncontextmenu">oncontextmenu</span>;
            attribute <span>EventListener</span> <span title="handler-ondblclick">ondblclick</span>;
            attribute <span>EventListener</span> <span title="handler-ondrag">ondrag</span>;
            attribute <span>EventListener</span> <span title="handler-ondragend">ondragend</span>;
@@ -5974,21 +5961,20 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E..
    <dd><code title="attr-contextmenu">contextmenu</code></dd>
    <dd><code title="attr-dir">dir</code></dd>
    <dd><code title="attr-draggable">draggable</code></dd>
    <dd><code title="attr-id">id</code></dd>
    <dd><code title="attr-hidden">hidden</code></dd>
    <dd><code title="attr-lang">lang</code></dd>
    <dd><code title="attr-ref">ref</code></dd>
    <dd><code title="attr-registrationmark">registrationmark</code></dd>
    <dd><code title="attr-style">style</code></dd>
    <dd><code title="attr-tabindex">tabindex</code></dd>
-   <dd><code title="attr-template">template</code></dd>
    <dd><code title="attr-title">title</code></dd>
   </dl>
 
   <p>In addition, the following <span>event handler content
   attributes</span> may be specified on any <span>HTML
   element</span>:</p>
 
   <dl class="element">
    <dt>Event handler content attributes:</dt>
    <dd><code title="handler-onabort">onabort</code></dd>
@@ -34927,899 +34913,20 @@ menu li:not(:first-child)::before { content: ' | '; }</pre>
   <p>The <span title="command-facet-CheckedState">Checked State</span>
   of the command is always false. (The command is never checked.)</p>
 
   <p>The <span title="command-facet-Action">Action</span> of the
   command is to perform the <i>action</i> of the <code>bb</code>
   element's <code title="attr-bb-type">type</code> attribute's
   state.</p>
 
 
 
-
-  <h3 id="datatemplate">Data Templates</h3>
-
-  <h4>Introduction</h4>
-
-  <p><em>This section is non-normative.</em></p>
-
-  <p class="XXX">...examples...</p>
-
-
-  <h4>The <dfn><code>datatemplate</code></dfn> element</h4>
-
-  <dl class="element">
-   <dt>Categories</dt>
-   <dd><span>Metadata content</span>.</dd>
-   <dd><span>Flow content</span>.</dd>
-   <dt>Contexts in which this element may be used:</dt>
-   <dd>As the root element of an <span title="xml documents">XML document</span>.</dd>
-   <dd>Where <span>metadata content</span> is expected.</dd>
-   <dd>Where <span>flow content</span> is expected.</dd>
-   <dt>Content model:</dt>
-   <dd>Zero or more <code>rule</code> elements.</dd>
-   <dt>Element-specific attributes:</dt>
-   <dd>None.</dd>
-   <dt>DOM interface:</dt>
-   <dd>Uses <code>HTMLElement</code>.</dd>
-  </dl>
-
-  <p>The <code>datatemplate</code> element brings together the various
-  rules that form a data template. The element doesn't itself do
-  anything exciting.</p>
-
-
-  <h4>The <dfn><code>rule</code></dfn> element</h4>
-
-  <dl class="element">
-   <dt>Categories</dt>
-   <dd>None.</dd>
-   <dt>Contexts in which this element may be used:</dt>
-   <dd>As a child of a <code>datatemplate</code> element.</dd>
-   <dt>Content model:</dt>
-   <dd>Anything, regardless of the children's required contexts (but see prose).</dd>
-   <dt>Element-specific attributes:</dt>
-   <dd><code title="attr-rule-condition">condition</code></dd>
-   <dd><code title="attr-rule-mode">mode</code></dd>
-   <dt>DOM interface:</dt>
-   <dd>
-<pre class="idl">interface <dfn>HTMLRuleElement</dfn> : <span>HTMLElement</span> {
-           attribute DOMString <span title="dom-rule-condition">condition</span>;
-           attribute DOMString <span title="dom-rule-mode">mode</span>;
-  readonly attribute DOMTokenString <span title="dom-rule-modeList">modeList</span>;
-};</pre>
-   </dd>
-  </dl>
-
-  <p>The <code>rule</code> element represents a template of content
-  that is to be used for elements when <span
-  title="datatemplate-regen">updating an element's generated
-  content</span>.</p>
-
-  <p>The <dfn title="attr-rule-condition"><code>condition</code></dfn>
-  attribute, if specified, must contain a valid selector. It specifies
-  which nodes in the data tree will have the condition's template
-  applied. <a href="#refsSELECTORS">[SELECTORS]</a></p>
-
-  <p>If the <code title="attr-rule-condition">condition</code>
-  attribute is not specified, then the condition applies to all
-  elements, text nodes, <code>CDATASection</code> nodes, and
-  processing instructions.</p>
-
-  <p>The <dfn title="attr-rule-mode"><code>mode</code></dfn>
-  attribute, if specified, must have a value that is an
-  <span>unordered set of unique space-separated tokens</span>
-  representing the various modes for which the rule applies. When, and
-  only when, the <code title="attr-rule-mode">mode</code> attribute is
-  omitted, the rule applies if and only if the mode is the empty
-  string. A mode is invoked by the <code>nest</code> element; for the
-  first node (the root node) of the data tree, the mode is the empty
-  string.</p>
-
-  <p>The contents of <code>rule</code> elements form a template, and
-  may be anything that, when the parent <code>datatemplate</code> is
-  applied to some conforming data, results in a conforming DOM
-  tree.</p> <!-- XXX examples of conforming and non-conforming rules
-  -->
-
-  <p>The <dfn title="dom-rule-condition"><code>condition</code></dfn>
-  DOM attribute must <span>reflect</span> the <code
-  title="attr-rule-condition">condition</code> content attribute.</p>
-
-  <p>The <dfn title="dom-rule-mode"><code>mode</code></dfn> and <dfn
-  title="dom-rule-modeList"><code>modeList</code></dfn> DOM attributes
-  must <span>reflect</span> the <code title="attr-rule-mode">mode</code> content
-  attribute.</p>
-
-
-  <h4>The <dfn><code>nest</code></dfn> element</h4>
-
-  <dl class="element">
-   <dt>Categories</dt>
-   <dd>None.</dd>
-   <dt>Contexts in which this element may be used:</dt>
-   <dd>As a child of a descendant of a <code>rule</code> element, regardless of the element's content model.</dd>
-   <dt>Content model:</dt>
-   <dd>Empty.</dd>
-   <dt>Element-specific attributes:</dt>
-   <dd><code title="attr-nest-filter">filter</code></dd>
-   <dd><code title="attr-nest-mode">mode</code></dd>
-   <dt>DOM interface:</dt>
-   <dd>
-<pre class="idl">interface <dfn>HTMLNestElement</dfn> : <span>HTMLElement</span> {
-           attribute DOMString <span title="dom-nest-filter">filter</span>;
-           attribute DOMString <span title="dom-nest-mode">mode</span>;
-};</pre>
-   </dd>
-  </dl>
-
-  <p>The <code>nest</code> element represents a point in a template
-  where the user agent should recurse and start inserting the children
-  of the data node that matches the <code>rule</code> in which the
-  <code>nest</code> element finds itself.</p>
-
-  <p>The <dfn title="attr-nest-filter"><code>filter</code></dfn>
-  attribute, if specified, must contain a valid selector. It specifies
-  which of the child nodes in the data tree will be examined for
-  further processing at this point. <a
-  href="#refsSELECTORS">[SELECTORS]</a></p>
-
-  <p>If the <code title="attr-nest-filter">filter</code> attribute is
-  not specified, then all elements, text nodes,
-  <code>CDATASection</code> nodes, and processing instructions are
-  processed.</p>
-
-  <p>The <dfn title="attr-nest-mode"><code>mode</code></dfn>
-  attribute, if specified, must have a value that is a word token
-  consisting of one or more characters, none of which are <span
-  title="space character">space characters</span>. It gives the mode
-  which will be in effect when looking at the rules in the data
-  template.</p>
-
-  <p>The <dfn title="dom-nest-filter"><code>filter</code></dfn> DOM
-  attribute must <span>reflect</span> the <code
-  title="attr-nest-filter">filter</code> content attribute.</p>
-
-  <p>The <dfn title="dom-nest-mode"><code>mode</code></dfn> DOM
-  attribute must <span>reflect</span> the <code
-  title="attr-nest-mode">mode</code> content attribute.</p>
-
-
-
-
-  <h4>Global attributes for data templates</h4>
-  <!-- authoring side, with DOM reflections -->
-
-  <p>The <dfn title="attr-template"><code>template</code></dfn>
-  attribute may be added to an element to indicate that the template
-  processing model is to be applied to that element.</p>
-
-  <p>The <code title="attr-template">template</code> attribute, when
-  specified, must be a <span>valid URL</span> to an XML or HTML
-  document, or a fragment identifier pointing at another part of the
-  document. If there is a fragment identifier present, then the
-  element with that ID in the target document must be a
-  <code>datatemplate</code> element, otherwise, the root element must
-  be a <code>datatemplate</code> element.</p>
-
-  <p>The <dfn title="dom-template"><code>template</code></dfn> DOM
-  attribute must <span>reflect</span> the <code
-  title="attr-template">template</code> content attribute.</p>
-
-
-  <p>The <dfn title="attr-ref"><code>ref</code></dfn> attribute may be
-  specified on any element on which the <code
-  title="attr-template">template</code> attribute is specified. If it
-  is specified, it must be a <span>valid URL</span> to an XML or HTML
-  document, or a fragment identifier pointing at another part of the
-  document.</p>
-
-  <p>When an element has a <code title="attr-template">template</code>
-  attribute but no <code title="attr-ref">ref</code> attribute, the
-  element may, instead of its usual content model, have a single
-  element of any kind. That element is then used as the root node of
-  the data for the template.</p>
-
-  <p>The <dfn title="dom-ref"><code>ref</code></dfn> DOM
-  attribute must <span>reflect</span> the <code
-  title="attr-ref">ref</code> content attribute.</p>
-
-
-  <p>The <dfn
-  title="attr-registrationmark"><code>registrationmark</code></dfn>
-  attribute may be specified on any element that is a descendant of a
-  <code>rule</code> element, except <code>nest</code> elements. Its
-  value may be any string, including the empty string (which is the
-  value that is assumed if the attribute is omitted). This attribute
-  performs a role similar to registration marks in printing presses:
-  when the generated content is regenerated, elements with the same
-  <code title="attr-registrationmark">registrationmark</code> are
-  lined up. This allows the author to disambiguate how elements should
-  be moved around when generated content is regenerated in the face of
-  changes to the data tree.</p>
-
-  <p>The <dfn
-  title="dom-registrationMark"><code>registrationMark</code></dfn> DOM
-  attribute must <span>reflect</span> the <code
-  title="attr-registrationmark">registrationmark</code> content
-  attribute.</p>
-
-
-
-  <h4>Processing model</h4>
-  <!-- ua side -->
-
-  <p>The <span>task source</span> for all <span
-  title="concept-task">tasks</span> <span title="queue a
-  task">queued</span> by algorithms in this section and its
-  subsections is the <dfn>template task source</dfn>.</p>
-
-
-  <h5>The <code title="dom-originalContent">originalContent</code> DOM
-  attribute</h5>
-
-  <p>The <dfn
-  title="dom-originalContent"><code>originalContent</code></dfn> is
-  set to a <code>DocumentFragment</code> to hold the original children
-  of an element that has been replaced by content generated for a data
-  template. Initially, it must be null. Its value is set when the
-  <code title="attr-template">template</code> attribute is set to a
-  usable value, and is unset when the attribute is removed.</p>
-
-  <p class="note">The <code
-  title="dom-originalContent">originalContent</code> DOM attribute can
-  thus be used as an indicator of whether a template is currently
-  being applied, just as the <code
-  title="dom-templateElement">templateElement</code> DOM attribute
-  can.</p>
-
-
-  <h5>The <code title="attr-template">template</code> attribute</h5>
-
-  <p><dfn title="datatemplate-template-set">Setting</dfn>: When an
-  <span title="HTML elements">HTML element</span> without a <code
-  title="attr-template">template</code> attribute has its <code
-  title="attr-template">template</code> attribute set, the user agent
-  must <span>fetch</span> the specified file and parse it (without a
-  <span>browsing context</span>) to obtain a DOM. If the
-  <span>URL</span>, when <span title="resolve a url">resolved</span>,
-  is the same as <span>the document's address</span><!-- XXXDOCURL
-  xref -->, then the current document's DOM must be assumed to be that
-  parsed DOM. While this loading and parsing is in progress, the
-  element is said to be <i>busy loading the template rules or
-  data</i>.</p>
-
-  <p>If the resource specified by the <code
-  title="attr-template">template</code> attribute is not the current
-  document<!-- XXX xref --> and does not have an XML MIME type, or if
-  an XML parse error is found while parsing the resource, then the
-  resource cannot be successfully parsed, and the user agent must jump
-  to the <span title="datatemplate-template-failed">failed to
-  parse</span> steps below.</p>
-
-  <p>Once the DOM in question has been parsed, assuming that it indeed
-  can be parsed and does so successfully, the user agent must
-  <span>queue a task</span> to run the following algorithm:</p>
-
-  <ol>
-   <!-- precondition: the originalContent is null and the element
-        contains its original content. -->
-
-   <li>
-
-    <p>If the <code title="attr-template">template</code> attribute's
-    value has a fragment identifier, and, in the DOM in question, it
-    identifies<!-- XXX how --> a <code>datatemplate</code> element,
-    then set the <code
-    title="dom-templateElement">templateElement</code> DOM attribute
-    to that element.</p>
-
-    <p>Otherwise, if the <code title="attr-template">template</code>
-    attribute value does not have a fragment identifier, and the root
-    element of the DOM in question is a <code>datatemplate</code>
-    element, then set the <code
-    title="dom-templateElement">templateElement</code> DOM attribute
-    to that element.</p>
-
-    <p>Otherwise, jump to the <span
-    title="datatemplate-template-failed">failed to parse</span> steps
-    below.</p>
-
-   </li>
-
-   <li><p>Create a new <code>DocumentFragment</code> and move all the
-   nodes that are children of the element to that
-   <code>DocumentFragment</code> object. Set the <code
-   title="dom-originalContent">originalContent</code> DOM attribute on
-   the element to this new <code>DocumentFragment</code>
-   object.</p></li>
-
-   <li><p>Jump to the steps below for <span
-   title="datatemplate-regen">updating the generated
-   content</span>.</p></li>
-
-  </ol>
-
-  <p>If the resource has <dfn
-  title="datatemplate-template-failed">failed to parse</dfn>, the user
-  agent must <span>fire a simple event</span> with the name <code
-  title="event-error">error</code> at the element on which the <code
-  title="attr-template">template</code> attribute was found.</p>
-
-  <p><dfn title="datatemplate-template-unset">Unsetting</dfn>: When an
-  <span title="HTML elements">HTML element</span> with a <code
-  title="attr-template">template</code> attribute has its <code
-  title="attr-template">template</code> attribute removed or
-  dynamically changed from one value to another, the user agent must
-  run the following algorithm:</p>
-
-  <ol>
-
-   <li><p>Set the <code
-   title="dom-templateElement">templateElement</code> DOM attribute to
-   null.</p></li>
-
-   <li>
-
-    <p>If the <code title="dom-originalContent">originalContent</code>
-    DOM attribute of the element is not null, run these substeps:</p>
-
-    <ol>
-
-     <li><p>Remove all the nodes that are children of the
-     element.</p></li>
-
-     <li><p>Append the nodes in the <code
-     title="dom-originalContent">originalContent</code>
-     <code>DocumentFragment</code> to the element.</p></li>
-
-     <li><p>Set <code title="dom-originalContent">originalContent</code>
-     to null.</p></li>
-
-    </ol>
-
-    <p>(If the <code
-    title="dom-originalContent">originalContent</code> DOM attribute
-    of the element is null, then either there was an error loading or
-    parsing the previous template, or the previous template never
-    finished loading; in either case, there is nothing to undo.)</p>
-
-   </li>
-
-   <li><p>If the <code title="attr-template">template</code> attribute
-   was changed (as opposed to simply removed), then <span
-   title="datatemplate-template-set">act as if it was now set to its
-   new value</span> (fetching the specified page, etc, as described
-   above).</p></li>
-
-  </ol>
-
-  <p>The <dfn
-  title="dom-templateElement"><code>templateElement</code></dfn> DOM
-  attribute is updated by the above algorithm to point to the
-  currently active <code>datatemplate</code> element. Initially, the
-  attribute must have the value null.</p>
-
-
-  <h5>The <code title="attr-ref">ref</code> attribute</h5>
-
-  <p><dfn title="datatemplate-ref-set">Setting</dfn>: When an <span
-  title="HTML elements">HTML element</span> without a <code
-  title="attr-ref">ref</code> attribute has its <code
-  title="attr-ref">ref</code> attribute set, the user agent must
-  <span>fetch</span> the specified file and parse it (without a
-  <span>browsing context</span>) to obtain a DOM. If the
-  <span>URL</span>, when <span title="resolve a url">resolved</span>,
-  is the same as <span>the document's address</span><!-- XXXDOCURL
-  xref -->, then the current document's DOM must be assumed to be that
-  parsed DOM. While this loading and parsing is in progress, the
-  element is said to be <i>busy loading the template rules or
-  data</i>.</p>
-
-  <p>If the resource specified by the <code
-  title="attr-ref">ref</code> attribute is not the current
-  document<!-- XXX xref --> and does not have an XML MIME type, or if
-  an XML parse error is found while parsing the resource, then the
-  resource cannot be successfully parsed, and the user agent must jump
-  to the <span title="datatemplate-ref-failed">failed to parse</span>
-  steps below.</p>
-
-  <p>Once the DOM in question has been parsed, assuming that it indeed
-  can be parsed and does so successfully, the user agent must
-  <span>queue a task</span> to run the following algorithm:</p>
-
-  <ol>
-
-   <li>
-
-    <p>If the <code title="attr-ref">ref</code> attribute value does
-    not have a fragment identifier, then set the <code
-    title="dom-refNode">refNode</code> DOM attribute to the
-    <code>Document</code> node of that DOM.</p>
-
-    <p>Otherwise, if the <code title="attr-ref">ref</code> attribute's
-    value has a fragment identifier, and, in the DOM in question, that
-    fragment identifier identifies an element, then set the <code
-    title="dom-refNode">refNode</code> DOM attribute to that
-    element.</p>
-
-    <p>Otherwise, jump to the <span
-    title="datatemplate-ref-failed">failed to parse</span> steps
-    below.</p>
-
-   </li>
-
-   <li><p>Jump to the steps below for <span
-   title="datatemplate-regen">updating the generated
-   content</span>.</p></li>
-
-  </ol>
-
-  <p>If the resource has <dfn
-  title="datatemplate-ref-failed">failed to parse</dfn>, the user
-  agent must <span>fire a simple event</span> with the name <code
-  title="event-error">error</code> at the element on which the <code
-  title="attr-ref">ref</code> attribute was found, and must then jump
-  to the steps below for <span title="datatemplate-regen">updating the
-  generated content</span> (the contents of the element will be used
-  instead of the specified resource).</p>
-
-  <p><dfn title="datatemplate-ref-unset">Unsetting</dfn>: When an
-  <span title="HTML elements">HTML element</span> with a <code
-  title="attr-ref">ref</code> attribute has its <code
-  title="attr-ref">ref</code> attribute removed or dynamically changed
-  from one value to another, the user agent must run the following
-  algorithm:</p>
-
-  <ol>
-
-   <li><p>Set the <code title="dom-refNode">refNode</code> DOM
-   attribute to null.</p></li>
-
-   <li><p>If the <code title="attr-ref">ref</code> attribute was
-   changed (as opposed to simply removed), then <span
-   title="datatemplate-ref-set">act as if it was now set to its new
-   value</span> (fetching the specified page, etc, as described
-   above). Otherwise, jump to the steps below for <span
-   title="datatemplate-regen">updating the generated
-   content</span>.</p></li>
-
-  </ol>
-
-  <p>The <dfn title="dom-refNode"><code>refNode</code></dfn> DOM
-  attribute is updated by the above algorithm to point to the current
-  data tree, if one is specified explicitly. If it is null, then the
-  data tree is given by the <code
-  title="dom-originalContent">originalContent</code> DOM attribute,
-  unless that is also null, in which case no template is currently
-  being applied. Initially, the attribute must have the value
-  null.</p>
-
-
-  <h5>The <code>NodeDataTemplate</code> interface</h5>
-
-  <p>All objects that implement the <code>Node</code> interface must
-  also implement the <code>NodeDataTemplate</code> interface, whose
-  members must be accessible using binding-specific casting
-  mechanisms.</p>
-
-  <pre class="idl">interface <dfn>NodeDataTemplate</dfn> {
-  readonly attribute Node <span title="dom-dataNode">dataNode</span>;
-};</pre>
-
-  <p>The <dfn title="dom-dataNode"><code>dataNode</code></dfn> DOM
-  attribute returns the node for which <em>this</em> node was
-  generated. It must initially be null. It is set on the nodes that
-  form the content generated during the <span
-  title="datatemplate-regen">algorithm for updating the generated
-  content</span> of elements that are using the data template
-  feature.</p>
-
-
-  <h5>Mutations</h5>
-
-  <p>An element with a non-null <code
-  title="dom-templateElement">templateElement</code> is said to be a
-  <dfn>data tree user</dfn> of the node identified by the element's
-  <code title="dom-refNode">refNode</code> attribute, as well as all
-  of that node's children, or, if that attribute is null, of the node
-  identified by the element's <code
-  title="dom-originalContent">originalContent</code>, as well as all
-  <em>that</em> node's children.</p>
-
-  <p>Nodes that have one or more <span title="data tree user">data
-  tree users</span> associated with them (as per the previous
-  paragraph) are themselves termed <dfn title="data tree component
-  node">data tree component nodes</dfn>.</p>
-
-  <p>Whenever a <span>data tree component node</span> changes its name
-  or value, or has one of its attributes change name or value, or has
-  an attribute added or removed, or has a child added or removed, the
-  user agent must <span>update the generated content</span> of all of
-  that node's <span title="data tree user">data tree users</span>.</p>
-
-  <p>An element with a non-null <code
-  title="dom-templateElement">templateElement</code> is also said to
-  be a <dfn>template tree user</dfn> of the node identified by the
-  element's <code title="dom-templateElement">templateElement</code>
-  attribute, as well as all of that node's children.</p>
-
-  <p>Nodes that have one or more <span title="template tree
-  user">template tree users</span> associated with them (as per the
-  previous paragraph) are themselves termed <dfn title="template tree
-  component node">template tree component nodes</dfn>.</p>
-
-  <p>Whenever a <span>template tree component node</span> changes its
-  name or value, or has one of its attributes change name or value, or
-  has an attribute added or removed, or has a child added or removed,
-  the user agent must <span>update the generated content</span> of all
-  of that node's <span title="template tree user">template tree
-  users</span>.</p>
-
-  <p class="note">In other words, user agents update the content
-  generated from a template whenever either the backing data changes
-  or the template itself changes.</p>
-
-
-  <h5>Updating the generated content</h5>
-
-  <p>When the user agent is to <dfn title="datatemplate-regen">update
-  the generated content</dfn> of an element that uses a template, the
-  user agent must run the following steps:</p>
-
-  <ol>
-
-   <li><p>Let <var title="">destination</var> be the element whose
-   generated content is being updated.</p></li>
-
-   <li><p>If the <var title="">destination</var> element is <i>busy
-   loading the template rules or data</i>, then abort these
-   steps. Either the steps will be invoked again once the loading has
-   completed, or the loading will fail and the generated content will
-   be removed at that point.</p></li>
-
-   <li><p>Let <var title="">template tree</var> be the element given
-   by <var title="">destination</var>'s <code
-   title="dom-templateElement">templateElement</code> DOM
-   attribute. If it is null, then abort these steps. There are no
-   rules to apply.</p></li>
-
-   <li><p>Let <var title="">data tree</var> be the node given by <var
-   title="">destination</var>'s <code
-   title="dom-refNode">refNode</code> DOM attribute. If it is null,
-   then let <var title="">data tree</var> be the node given by the
-   <code title="dom-originalContent">originalContent</code> DOM
-   node.</p></li>
-
-   <li><p>Let <var title="">existing nodes</var> be a set of ordered
-   lists of nodes, each list being identified by a tuple consisting of
-   a node, a node type and name, and a <span
-   title="attr-registrationmark">registration mark</span> (a
-   string).</p></li>
-
-   <li><p>For each node <var title="">node</var> that is a descendant
-   of <var title="">destination</var>, if any, add <var
-   title="">node</var> to the list identified by the tuple given by:
-   <var title="">node</var>'s <code
-   title="dom-dataNode">dataNode</code> DOM attribute; the <var
-   title="">node</var>'s node type and, if it's an element, its
-   qualified name (that is, its namespace and local name), or, if it's
-   a processing instruction, its target name<!-- we're basically
-   indexing on nodeName here -->, and the value of the <var
-   title="">node</var>'s <code
-   title="attr-registrationmark">registrationmark</code> attribute, if
-   it has one, or the empty string otherwise.</p></li> <!-- XXX should
-   non-element nodes inherit the registration marks of their parent?
-   or have it set via a PI? -->
-
-   <li><p>Remove all the child nodes of <var
-   title="">destination</var>, so that its child node list is
-   empty.</p></li>
-
-   <li><p>Run the <span>Levenberg data node algorithm</span>
-   (described below) using <var title="">destination</var> as the
-   destination node, <var title="">data tree</var> as the source node,
-   <var title="">template tree</var> as the rule container, the empty
-   string as the mode, and the <var title="">existing nodes</var> lists
-   as the lists of existing nodes.</p></li>
-
-<!--(for now, since we can't guarantee that we'll reset the dataNode
-attribute of nodes that are dynamically moved around between regens,
-we'll just act as if the dataNode attribute is set on creation and
-never reset. This is nice and consistent.)
-
-   <li><p>Set the <code title="dom-dataNode">dataNode</code> DOM
-   attribute of every node in the <var title="">existing nodes</var>
-   lists to null.</p></li>
--->
-
-  </ol>
-
-  <!--<h6 class="notoc">The Levenberg algorithm</h6>-->
-
-  <p>The Levenberg algorithm consists of two algorithms that invoke
-  each other recursively, the <span>Levenberg data node
-  algorithm</span> and the <span>Levenberg template node
-  algorithm</span>. These algorithms use the data structures
-  initialized by the set of steps described above.</p>
-
-  <p>The <dfn>Levenberg data node algorithm</dfn> is as follows. It is
-  always invoked with three DOM nodes, one string, and a set of lists
-  as arguments: the <var title="">destination node</var>, the <var
-  title="">source node</var>, the <var title="">rule container</var>,
-  the <var title="">mode string</var>, and the <var title="">existing
-  nodes lists</var> respectively.</p>
-
-  <ol>
-
-   <li><p>Let <var title="">condition</var> be the first
-   <code>rule</code> element child of the <var title="">rule
-   container</var> element, or null if there aren't any.</p>
-
-   <li><p>If <var title="">condition</var> is null, follow these
-   substeps:</p>
-
-    <ol>
-
-     <li><p>If the <var title="">source node</var> is an element,
-     then, for each child <var title="">child node</var> of the <var
-     title="">source node</var> element, in tree order, invoke the
-     <span>Levenberg data node algorithm</span> recursively, with <var
-     title="">destination node</var>, <var title="">child node</var>,
-     <var title="">rule container</var>, the empty string, and <var
-     title="">existing nodes lists</var> as the five arguments
-     respectively.</p></li>
-
-     <li><p>Abort the current instance of the <span>Levenberg data
-     node algorithm</span>, returning to whatever algorithm invoked
-     it.</p></li>
-
-    </ol>
-
-   </li>
-
-   <li><p>Let <var title="">matches</var> be a boolean with the value
-   true.</p></li>
-
-   <li><p>If the <var title="">condition</var> element has a <code
-   title="attr-rule-mode">mode</code> attribute, but the value of that
-   attribute is not a <span>mode match</span> for the current
-   <span>mode string</span>, then let <var title="">matches</var> be
-   false.</p></li>
-
-   <li><p>If the <var title="">condition</var> element has a <code
-   title="attr-rule-condition">condition</code> attribute, and the
-   attribute's value, when <span>evaluated as a selector</span>, does
-   not match the current <var title="">source node</var>, then let
-   <var title="">matches</var> be false.</p></li>
-
-   <li><p>If <var title="">matches</var> is true, then follow these
-   substeps:</p>
-
-    <ol>
-
-     <li><p>For each child <var title="">child node</var> of the
-     <var title="">condition</var> element, in tree order, invoke the
-     <span>Levenberg template node algorithm</span> recursively, with
-     the five arguments being <var title="">destination node</var>,
-     <var title="">source node</var>, <var title="">rule
-     container</var>, <var title="">child node</var>, and <var
-     title="">existing nodes lists</var> respectively.</p></li>
-
-     <li><p>Abort the current instance of the <span>Levenberg data
-     node algorithm</span>, returning to whatever algorithm invoked
-     it.</p></li>
-
-    </ol>
-
-   </li>
-
-   <li><p>Let <var title="">condition</var> be the next
-   <code>rule</code> element that is a child of the <var
-   title="">rule container</var> element, after the <var
-   title="">condition</var> element itself, or null if there are no
-   more <code>rule</code> elements.</p></li>
-
-   <li><p>Jump to step 2 in this set of steps.</p></li>
-
-  </ol>
-
-  <p>The <dfn>Levenberg template node algorithm</dfn> is as
-  follows. It is always invoked with four DOM nodes and a set of lists
-  as arguments: the <var title="">destination node</var>, the <var
-  title="">source node</var>, the <var title="">rule container</var>,
-  the <var title="">template node</var>, and the <var
-  title="">existing nodes lists</var> respectively.</p>
-
-  <ol>
-
-   <li><p>If <var title="">template node</var> is a comment node,
-   abort the current instance of the <span>Levenberg template node
-   algorithm</span>, returning to whatever algorithm invoked
-   it.</p></li>
-
-   <li><p>If <var title="">template node</var> is a <code>nest</code>
-   element, then run these substeps:</p>
-
-    <ol>
-
-     <li><p>If <var title="">source node</var> is not an element, then
-     abort the current instance of the <span>Levenberg template node
-     algorithm</span>, returning to whatever algorithm invoked
-     it.</p></li>
-
-     <li><p>If the <var title="">template node</var> has a <code
-     title="attr-nest-mode">mode</code> attribute, then let <var
-     title="">mode</var> be the value of that attribute; otherwise,
-     let <var title="">mode</var> be the empty string.</p></li>
-
-     <li><p>Let <var title="">child node</var> be the first child of
-     the <var title="">source node</var> element, or null if <var
-     title="">source node</var> has no children.</p></li>
-
-     <li><p>If <var title="">child node</var> is null, abort the
-     current instance of the <span>Levenberg template node
-     algorithm</span>, returning to whatever algorithm invoked
-     it.</p></li>
-
-     <li><p>If the <var title="">template node</var> element has a
-     <code title="attr-nest-filter">filter</code> attribute, and the
-     attribute's value, when <span>evaluated as a selector</span>,
-     matches <var title="">child node</var>, then invoke the
-     <span>Levenberg data node algorithm</span> recursively, with <var
-     title="">destination node</var>, <var title="">child node</var>,
-     <var title="">rule container</var>, <var title="">mode</var>, and
-     <var title="">existing nodes lists</var> as the five arguments
-     respectively.</p></li>
-
-     <li><p>Let <var title="">child node</var> be <var title="">child
-     node</var>'s next sibling, or null if <var title="">child
-     node</var> was the last node of <var title="">source
-     node</var>.</p></li>
-
-     <li><p>Return to step 4 in this set of substeps.</p></li>
-
-    </ol>
-
-   </li>
-
-   <li><p>If <var title="">template node</var> is an element, and that
-   element has a <code
-   title="attr-registrationmark">registrationmark</code> attribute,
-   then let <var title="">registration mark</var> have the value of
-   that attribute. Otherwise, let <var title="">registration
-   mark</var> be the empty string.</p></li>
-
-   <li>
-
-    <p>If there is a list in the <var title="">existing nodes
-    lists</var> corresponding to the tuple (<var title="">source
-    node</var>, the node type and name of <var title="">template
-    node</var>, <var title="">registration mark</var>), and that list
-    is not empty, then run the following substeps. (For an element
-    node, the name of the node is its qualified tag name, i.e. its
-    namespace and local name. For a processing instruction, its name
-    is the target. For other types of nodes, there is no name.)</p>
-
-    <ol>
-
-     <li><p>Let <var title="">new node</var> be the first node in that
-     list.</p></li>
-
-     <li><p>Remove <var title="">new node</var> from that
-     list.</p></li>
-
-     <li><p>If <var title="">new node</var> is an element, remove all
-     the child nodes of <var title="">new node</var>, so that its
-     child node list is empty.</p></li>
-
-    </ol>
-
-    <p>Otherwise, if there is no matching list, or there was, but it
-    is now empty, then run these steps instead:</p>
-
-    <ol>
-
-     <li><p>Let <var title="">new node</var> be a shallow clone of
-     <var title="">template node</var>.</p></li>
-
-     <li><p>Let <var title="">new node</var>'s <code
-     title="dom-dataNode">dataNode</code> DOM attribute be <var
-     title="">source node</var>.</p></li>
-
-    </ol>
-
-   </li>
-
-   <li>
-
-    <p>If <var title="">new node</var> is an element, run these substeps:</p>
-
-    <ol>
-
-     <li><p>For each attribute on <var title="">new node</var>, if
-     an attribute with the same qualified name is not present on
-     <var title="">template node</var>, remove that attribute.</p>
-
-     <li>
-
-      <p>For each attribute <var title="">attribute</var> on <var
-      title="">template node</var>, run these substeps:</p>
-
-      <ol>
-
-       <li><p>Let <var title="">expanded</var> be the result of
-       passing the value of <var title="">attribute</var> to the
-       <span>text expansion algorithm for templates</span> along
-       with <var title="">source node</var>.</p></li>
-
-       <li><p>If an attribute with the same qualified name as <var
-       title="">attribute</var> is already present on <var
-       title="">new node</var>, then: if its value is different from
-       <var title="">expanded</var>, replace its value with <var
-       title="">expanded</var>.</p></li>
-
-       <li><p>Otherwise, if there is no attribute with the same
-       qualified name as <var title="">attribute</var> on <var
-       title="">new node</var>, then add an attribute with the same
-       namespace, prefix, and local name as <var
-       title="">attribute</var>, with its value set to <var
-       title="">expanded</var>'s.</p></li>
-
-      </ol>
-
-     </li>
-
-    </ol>
-
-    <p>Otherwise, the <var title="">new node</var> is a text node,
-    <code>CDATASection</code> node, or processing instruction. Run
-    these substeps instead:</p>
-
-    <ol>
-
-     <li><p>Let <var title="">expanded</var> be the result of passing
-     the node value of <var title="">template node</var> (the content
-     of the text node, <code>CDATASection</code> node, or processing
-     instruction) to the <span>text expansion algorithm for
-     templates</span> along with <var title="">source
-     node</var>.</p></li>
-
-     <li><p>If the value of the <var title="">new node</var> is
-     different from <var title="">expanded</var>, then set the value
-     of <var title="">new node</var> to <var
-     title="">expanded</var>.</p></li>
-
-    </ol>
-
-   </li>
-
-   <li><p>Append <var title="">new node</var> to <var
-   title="">destination</var>.</p></li>
-
-   <li><p>If <var title="">template node</var> is an element, then,
-   for each child <var title="">child node</var> of the <var
-   title="">template node</var> element, in tree order, invoke the
-   <span>Levenberg template node algorithm</span> recursively, with
-   the five arguments being <var title="">new child</var>, <var
-   title="">source node</var>, <var title="">rule container</var>,
-   <var title="">child node</var>, and <var title="">existing nodes
-   lists</var> respectively.</p></li>
-
-  </ol>
-
-  <p class="XXX">Define: <dfn>evaluated as a selector</dfn></p>
-
-  <p class="XXX">Define: <dfn>text expansion algorithm for
-  templates</dfn></p> <!-- this is basically used for expanding
-  nodeValue values -->
-
-
   <h3>Miscellaneous elements</h3>
 
   <h4>The <dfn><code>legend</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As the first child of a <code>fieldset</code> element.</dd>
    <dd>As the first child of a <code>details</code> element.</dd>
@@ -57987,22 +57094,20 @@ interface <dfn>TimeoutHandler</dfn> {
   acknowledgements three times! -->
 
 <!--
 TODO (or delay):
  XXX * simple color picker
  XXX * in-window modal dialogs
         - escape/enter handling
         - dragging the window out of the tab
  XXX * in-window non-modal palettes
         - with a solution for the mobile space
- XXX * a way of selecting rows, so that you can declaratively have buttons
-       outside the template that move a "selected row" around
  XXX * calendar with list of days that have events (think: blog calendars)
  XXX * find object at (x,y)
        http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/elementfrompoint.asp
  XXX * find mouse position
  XXX * styling scrollbars:
        ::scrollbars { ... }
  XXX * automatic table of contents
  XXX * a way to show icons for file types
        e.g. http://www.gadgetopia.com/2004/05/04/FileIconTag.html
  XXX * custom syntax highlighting in <textarea>, <pre> (ack Ryan Johnson)
@@ -58156,24 +57261,20 @@ TODO (or delay):
        popup/area/thing.
        http://slashdot.org/comments.pl?sid=110240&cid=9359006
  XXX * Validating only part of a form. - Anja Lehmann
  XXX * Reminder to add a way to expose access keys in buttons, i.e.
        Sub&mit where & signifies the m is the access key to use. Possibly
        automatic? <input accesskey="m" value="Submit"> browser would be
        smart enough to underline the first instance of the access key if
        it exists (case insensitive)? - kerz
        [or deprecate the lot (->web apps)]
  XXX * option.text should do the same as option.textContent
- XXX * select.options.add(), .remove() should exist (and forward to the select)
- XXX * select.add()'s second argument should also be allowed to be an integer (negative means append)
-       + see: http://bugzilla.mozilla.org/show_bug.cgi?id=240304
-              http://junkyard.damowmow.com/138
  XXX * need an attribute that says "the children of this element are in
        their own tabbing universe, tabindex should be relative to each
        other, not to the document"
        -> web apps?
  XXX * make optgroups selectable if they have a value.
  XXX * make select widgets have multiple columns
        or ->web apps with list view
  XXX * required as a group (one of the following must be available):
        + i propose something like the following:
            <input type="text" group="contact" name="voicephone"> Voice phone

|