--- a/editcommands.html Sun Jul 24 13:10:41 2011 -0600
+++ b/editcommands.html Sun Jul 24 13:13:51 2011 -0600
@@ -109,29 +109,30 @@
<li><a href=#block-formatting-command-definitions><span class=secno>8.1 </span>Block formatting command definitions</a></li>
<li><a href=#assorted-block-formatting-command-algorithms><span class=secno>8.2 </span>Assorted block formatting command algorithms</a></li>
<li><a href=#block-extending-a-range><span class=secno>8.3 </span>Block-extending a range</a></li>
- <li><a href=#deleting-the-contents-of-a-range><span class=secno>8.4 </span>Deleting the contents of a range</a></li>
- <li><a href="#splitting-a-node-list's-parent"><span class=secno>8.5 </span>Splitting a node list's parent</a></li>
- <li><a href=#canonical-space-sequences><span class=secno>8.6 </span>Canonical space sequences</a></li>
- <li><a href=#indenting-and-outdenting><span class=secno>8.7 </span>Indenting and outdenting</a></li>
- <li><a href=#toggling-lists><span class=secno>8.8 </span>Toggling lists</a></li>
- <li><a href=#justifying-the-selection><span class=secno>8.9 </span>Justifying the selection</a></li>
- <li><a href=#the-delete-command><span class=secno>8.10 </span>The <code title="">delete</code> command</a></li>
- <li><a href=#the-formatblock-command><span class=secno>8.11 </span>The <code title="">formatBlock</code> command</a></li>
- <li><a href=#the-forwarddelete-command><span class=secno>8.12 </span>The <code title="">forwardDelete</code> command</a></li>
- <li><a href=#the-indent-command><span class=secno>8.13 </span>The <code title="">indent</code> command</a></li>
- <li><a href=#the-inserthorizontalrule-command><span class=secno>8.14 </span>The <code title="">insertHorizontalRule</code> command</a></li>
- <li><a href=#the-inserthtml-command><span class=secno>8.15 </span>The <code title="">insertHTML</code> command</a></li>
- <li><a href=#the-insertimage-command><span class=secno>8.16 </span>The <code title="">insertImage</code> command</a></li>
- <li><a href=#the-insertlinebreak-command><span class=secno>8.17 </span>The <code title="">insertLineBreak</code> command</a></li>
- <li><a href=#the-insertorderedlist-command><span class=secno>8.18 </span>The <code title="">insertOrderedList</code> command</a></li>
- <li><a href=#the-insertparagraph-command><span class=secno>8.19 </span>The <code title="">insertParagraph</code> command</a></li>
- <li><a href=#the-inserttext-command><span class=secno>8.20 </span>The <code title="">insertText</code> command</a></li>
- <li><a href=#the-insertunorderedlist-command><span class=secno>8.21 </span>The <code title="">insertUnorderedList</code> command</a></li>
- <li><a href=#the-justifycenter-command><span class=secno>8.22 </span>The <code title="">justifyCenter</code> command</a></li>
- <li><a href=#the-justifyfull-command><span class=secno>8.23 </span>The <code title="">justifyFull</code> command</a></li>
- <li><a href=#the-justifyleft-command><span class=secno>8.24 </span>The <code title="">justifyLeft</code> command</a></li>
- <li><a href=#the-justifyright-command><span class=secno>8.25 </span>The <code title="">justifyRight</code> command</a></li>
- <li><a href=#the-outdent-command><span class=secno>8.26 </span>The <code title="">outdent</code> command</a></ol></li>
+ <li><a href=#recording-and-restoring-overrides><span class=secno>8.4 </span>Recording and restoring overrides</a></li>
+ <li><a href=#deleting-the-contents-of-a-range><span class=secno>8.5 </span>Deleting the contents of a range</a></li>
+ <li><a href="#splitting-a-node-list's-parent"><span class=secno>8.6 </span>Splitting a node list's parent</a></li>
+ <li><a href=#canonical-space-sequences><span class=secno>8.7 </span>Canonical space sequences</a></li>
+ <li><a href=#indenting-and-outdenting><span class=secno>8.8 </span>Indenting and outdenting</a></li>
+ <li><a href=#toggling-lists><span class=secno>8.9 </span>Toggling lists</a></li>
+ <li><a href=#justifying-the-selection><span class=secno>8.10 </span>Justifying the selection</a></li>
+ <li><a href=#the-delete-command><span class=secno>8.11 </span>The <code title="">delete</code> command</a></li>
+ <li><a href=#the-formatblock-command><span class=secno>8.12 </span>The <code title="">formatBlock</code> command</a></li>
+ <li><a href=#the-forwarddelete-command><span class=secno>8.13 </span>The <code title="">forwardDelete</code> command</a></li>
+ <li><a href=#the-indent-command><span class=secno>8.14 </span>The <code title="">indent</code> command</a></li>
+ <li><a href=#the-inserthorizontalrule-command><span class=secno>8.15 </span>The <code title="">insertHorizontalRule</code> command</a></li>
+ <li><a href=#the-inserthtml-command><span class=secno>8.16 </span>The <code title="">insertHTML</code> command</a></li>
+ <li><a href=#the-insertimage-command><span class=secno>8.17 </span>The <code title="">insertImage</code> command</a></li>
+ <li><a href=#the-insertlinebreak-command><span class=secno>8.18 </span>The <code title="">insertLineBreak</code> command</a></li>
+ <li><a href=#the-insertorderedlist-command><span class=secno>8.19 </span>The <code title="">insertOrderedList</code> command</a></li>
+ <li><a href=#the-insertparagraph-command><span class=secno>8.20 </span>The <code title="">insertParagraph</code> command</a></li>
+ <li><a href=#the-inserttext-command><span class=secno>8.21 </span>The <code title="">insertText</code> command</a></li>
+ <li><a href=#the-insertunorderedlist-command><span class=secno>8.22 </span>The <code title="">insertUnorderedList</code> command</a></li>
+ <li><a href=#the-justifycenter-command><span class=secno>8.23 </span>The <code title="">justifyCenter</code> command</a></li>
+ <li><a href=#the-justifyfull-command><span class=secno>8.24 </span>The <code title="">justifyFull</code> command</a></li>
+ <li><a href=#the-justifyleft-command><span class=secno>8.25 </span>The <code title="">justifyLeft</code> command</a></li>
+ <li><a href=#the-justifyright-command><span class=secno>8.26 </span>The <code title="">justifyRight</code> command</a></li>
+ <li><a href=#the-outdent-command><span class=secno>8.27 </span>The <code title="">outdent</code> command</a></ol></li>
<li><a href=#miscellaneous-commands><span class=secno>9 </span>Miscellaneous commands</a>
<ol>
<li><a href=#the-copy-command><span class=secno>9.1 </span>The <code title="">copy</code> command</a></li>
@@ -973,105 +974,6 @@
<a href=#remove-extraneous-line-breaks-before>remove extraneous line breaks before</a> it, then <a href=#remove-extraneous-line-breaks-at-the-end-of>remove
extraneous line breaks at the end of</a> it.
-<p>To <dfn id=record-current-overrides>record current overrides</dfn>:
-
-<ol>
- <li>Let <var title="">overrides</var> be a list of (string, string or boolean) ordered
- pairs, initially empty.
-
- <!--
- When restoring, some commands can interfere with others. Specifically, we
- want to restore createLink before foreColor and underline, and subscript and
- superscript before fontSize. TODO: This approach only works for default
- styles (although I'm not sure offhand how we could handle non-default styles
- in principle).
- -->
- <li>If there is a <a href=#value-override>value override</a> for "createLink", add
- ("createLink", <a href=#value-override>value override</a> for "createLink") to
- <var title="">overrides</var>.
-
- <li>For each <var title="">command</var> in the list "bold", "italic",
- "strikethrough", "subscript", "superscript", "underline", in order: if there
- is a <a href=#state-override>state override</a> for <var title="">command</var>, add
- (<var title="">command</var>, <var title="">command</var>'s <a href=#state-override>state override</a>) to
- <var title="">overrides</var>.
-
- <li>For each <var title="">command</var> in the list "fontName", "fontSize",
- "foreColor", "hiliteColor", in order: if there is a <a href=#value-override>value
- override</a> for <var title="">command</var>, add (<var title="">command</var>,
- <var title="">command</var>'s <a href=#value-override>value override</a>) to <var title="">overrides</var>.
-
- <li>Return <var title="">overrides</var>.
-</ol>
-
-<p>To <dfn id=record-current-states-and-values>record current states and values</dfn>:
-
-<ol>
- <li>Let <var title="">overrides</var> be a list of (string, string or boolean) ordered
- pairs, initially empty.
-
- <li>Let <var title="">node</var> be the first <a href=#editable>editable</a> <code class=external data-anolis-spec=domcore><a href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#text>Text</a></code> node
- <a href=#effectively-contained>effectively contained</a> in the <a href=#active-range>active range</a>, or null
- if there is none.
-
- <li>If <var title="">node</var> is null, return <var title="">overrides</var>.
-
- <li>Add ("createLink", <a href=#value>value</a> for "createLink") to
- <var title="">overrides</var>.
-
- <li>For each <var title="">command</var> in the list "bold", "italic",
- "strikethrough", "subscript", "superscript", "underline", in order: if
- <var title="">node</var>'s <a href=#effective-command-value>effective command value</a> for <var title="">command</var>
- is one of its <a href=#inline-command-activated-values>inline command activated values</a>, add
- (<var title="">command</var>, true) to <var title="">overrides</var>, and otherwise add
- (<var title="">command</var>, false) to <var title="">overrides</var>.
- <!--
- Thus we will set state overrides based on the first editable text node, to
- match values. This means that if you have <p>foo<b>[bar</b>baz]</p> and hit
- backspace and hit A, you'll get <p>foo<b>a[]</b></p>, although bold was
- previously indeterminate. This is needed to match the behavior of hitting A
- straight away, since innerText doesn't strip wrappers when it invokes "delete
- the contents".
- -->
-
- <li>For each <var title="">command</var> in the list "fontName", "fontSize",
- "foreColor", "hiliteColor", in order: add (<var title="">command</var>,
- <var title="">command</var>'s <a href=#value>value</a>) to <var title="">overrides</var>.
-
- <li>Return <var title="">overrides</var>.
-</ol>
-
-<p>To <dfn id=restore-states-and-values>restore states and values</dfn> specified by a list
-<var title="">overrides</var> returned by the <a href=#record-current-overrides>record current overrides</a> or
-<a href=#record-current-states-and-values>record current states and values</a> algorithm:
-
-<ol>
- <li>If there is some <a href=#editable>editable</a> <code class=external data-anolis-spec=domcore><a href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#text>Text</a></code> node <a href=#effectively-contained>effectively
- contained</a> in the <a href=#active-range>active range</a>, then for each
- (<var title="">command</var>, <var title="">override</var>) pair in <var title="">overrides</var>, in
- order:
-
- <ol>
- <li>If <var title="">override</var> is a boolean, and <code title=queryCommandState()><a href=#querycommandstate()>queryCommandState(<var title="">command</var>)</a></code>
- returns something different from <var title="">override</var>, call <code title=execCommand()><a href=#execcommand()>execCommand(<var title="">command</var>)</a></code>.
-
- <li>If <var title="">override</var> is a string, and <code title=queryCommandValue()><a href=#querycommandvalue()>queryCommandValue(<var title="">command</var>)</a></code>
- returns something different from <var title="">override</var>, call <code title=execCommand()><a href=#execcommand()>execCommand(<var title="">command</var>, false,
- <var title="">override</var>)</a></code>.
- </ol>
-
- <li>Otherwise, for each (<var title="">command</var>, <var title="">override</var>) pair in
- <var title="">overrides</var>, in order:
-
- <ol>
- <li>If <var title="">override</var> is a boolean, set the <a href=#state-override>state
- override</a> for <var title="">command</var> to <var title="">override</var>.
-
- <li>If <var title="">override</var> is a string, set the <a href=#value-override>value override</a>
- for <var title="">command</var> to <var title="">override</var>.
- </ol>
-</ol>
-
<h3 id=wrapping-a-list-of-nodes><span class=secno>6.2 </span>Wrapping a list of nodes</h3>
@@ -3666,7 +3568,110 @@
</ol>
-<h3 id=deleting-the-contents-of-a-range><span class=secno>8.4 </span>Deleting the contents of a range</h3>
+<h3 id=recording-and-restoring-overrides><span class=secno>8.4 </span>Recording and restoring overrides</h3>
+<!--@{-->
+
+<p>To <dfn id=record-current-overrides>record current overrides</dfn>:
+
+<ol>
+ <li>Let <var title="">overrides</var> be a list of (string, string or boolean) ordered
+ pairs, initially empty.
+
+ <!--
+ When restoring, some commands can interfere with others. Specifically, we
+ want to restore createLink before foreColor and underline, and subscript and
+ superscript before fontSize. TODO: This approach only works for default
+ styles (although I'm not sure offhand how we could handle non-default styles
+ in principle).
+ -->
+ <li>If there is a <a href=#value-override>value override</a> for "createLink", add
+ ("createLink", <a href=#value-override>value override</a> for "createLink") to
+ <var title="">overrides</var>.
+
+ <li>For each <var title="">command</var> in the list "bold", "italic",
+ "strikethrough", "subscript", "superscript", "underline", in order: if there
+ is a <a href=#state-override>state override</a> for <var title="">command</var>, add
+ (<var title="">command</var>, <var title="">command</var>'s <a href=#state-override>state override</a>) to
+ <var title="">overrides</var>.
+
+ <li>For each <var title="">command</var> in the list "fontName", "fontSize",
+ "foreColor", "hiliteColor", in order: if there is a <a href=#value-override>value
+ override</a> for <var title="">command</var>, add (<var title="">command</var>,
+ <var title="">command</var>'s <a href=#value-override>value override</a>) to <var title="">overrides</var>.
+
+ <li>Return <var title="">overrides</var>.
+</ol>
+
+<p>To <dfn id=record-current-states-and-values>record current states and values</dfn>:
+
+<ol>
+ <li>Let <var title="">overrides</var> be a list of (string, string or boolean) ordered
+ pairs, initially empty.
+
+ <li>Let <var title="">node</var> be the first <a href=#editable>editable</a> <code class=external data-anolis-spec=domcore><a href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#text>Text</a></code> node
+ <a href=#effectively-contained>effectively contained</a> in the <a href=#active-range>active range</a>, or null
+ if there is none.
+
+ <li>If <var title="">node</var> is null, return <var title="">overrides</var>.
+
+ <li>Add ("createLink", <a href=#value>value</a> for "createLink") to
+ <var title="">overrides</var>.
+
+ <li>For each <var title="">command</var> in the list "bold", "italic",
+ "strikethrough", "subscript", "superscript", "underline", in order: if
+ <var title="">node</var>'s <a href=#effective-command-value>effective command value</a> for <var title="">command</var>
+ is one of its <a href=#inline-command-activated-values>inline command activated values</a>, add
+ (<var title="">command</var>, true) to <var title="">overrides</var>, and otherwise add
+ (<var title="">command</var>, false) to <var title="">overrides</var>.
+ <!--
+ Thus we will set state overrides based on the first editable text node, to
+ match values. This means that if you have <p>foo<b>[bar</b>baz]</p> and hit
+ backspace and hit A, you'll get <p>foo<b>a[]</b></p>, although bold was
+ previously indeterminate. This is needed to match the behavior of hitting A
+ straight away, since innerText doesn't strip wrappers when it invokes "delete
+ the contents".
+ -->
+
+ <li>For each <var title="">command</var> in the list "fontName", "fontSize",
+ "foreColor", "hiliteColor", in order: add (<var title="">command</var>,
+ <var title="">command</var>'s <a href=#value>value</a>) to <var title="">overrides</var>.
+
+ <li>Return <var title="">overrides</var>.
+</ol>
+
+<p>To <dfn id=restore-states-and-values>restore states and values</dfn> specified by a list
+<var title="">overrides</var> returned by the <a href=#record-current-overrides>record current overrides</a> or
+<a href=#record-current-states-and-values>record current states and values</a> algorithm:
+
+<ol>
+ <li>If there is some <a href=#editable>editable</a> <code class=external data-anolis-spec=domcore><a href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#text>Text</a></code> node <a href=#effectively-contained>effectively
+ contained</a> in the <a href=#active-range>active range</a>, then for each
+ (<var title="">command</var>, <var title="">override</var>) pair in <var title="">overrides</var>, in
+ order:
+
+ <ol>
+ <li>If <var title="">override</var> is a boolean, and <code title=queryCommandState()><a href=#querycommandstate()>queryCommandState(<var title="">command</var>)</a></code>
+ returns something different from <var title="">override</var>, call <code title=execCommand()><a href=#execcommand()>execCommand(<var title="">command</var>)</a></code>.
+
+ <li>If <var title="">override</var> is a string, and <code title=queryCommandValue()><a href=#querycommandvalue()>queryCommandValue(<var title="">command</var>)</a></code>
+ returns something different from <var title="">override</var>, call <code title=execCommand()><a href=#execcommand()>execCommand(<var title="">command</var>, false,
+ <var title="">override</var>)</a></code>.
+ </ol>
+
+ <li>Otherwise, for each (<var title="">command</var>, <var title="">override</var>) pair in
+ <var title="">overrides</var>, in order:
+
+ <ol>
+ <li>If <var title="">override</var> is a boolean, set the <a href=#state-override>state
+ override</a> for <var title="">command</var> to <var title="">override</var>.
+
+ <li>If <var title="">override</var> is a string, set the <a href=#value-override>value override</a>
+ for <var title="">command</var> to <var title="">override</var>.
+ </ol>
+</ol>
+
+<!--@}-->
+<h3 id=deleting-the-contents-of-a-range><span class=secno>8.5 </span>Deleting the contents of a range</h3>
<p>To <dfn id=delete-the-contents>delete the contents</dfn> of a <a class=external data-anolis-spec=domrange href=http://html5.org/specs/dom-range.html#concept-range title=concept-range>range</a> <var title="">range</var>, given a
<var title="">block merging</var> flag that defaults to true and a <var title="">strip
@@ -4108,7 +4113,7 @@
</ol>
-<h3 id="splitting-a-node-list's-parent"><span class=secno>8.5 </span>Splitting a node list's parent</h3>
+<h3 id="splitting-a-node-list's-parent"><span class=secno>8.6 </span>Splitting a node list's parent</h3>
<p>To <dfn id=split-the-parent>split the parent</dfn> of a list <var title="">node list</var> of consecutive
<a class=external data-anolis-spec=domcore href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-tree-sibling title=concept-tree-sibling>sibling</a> <a class=external data-anolis-spec=domcore href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-node title=concept-node>nodes</a>:
@@ -4235,7 +4240,7 @@
its <a class=external data-anolis-spec=domcore href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-tree-parent title=concept-tree-parent>parent</a>.
-<h3 id=canonical-space-sequences><span class=secno>8.6 </span>Canonical space sequences</h3>
+<h3 id=canonical-space-sequences><span class=secno>8.7 </span>Canonical space sequences</h3>
<p>The <dfn id=canonical-space-sequence>canonical space sequence</dfn> of length <var title="">n</var>, with boolean
flags <var title="">non-breaking start</var> and <var title="">non-breaking end</var>, is
@@ -4426,7 +4431,7 @@
</ol>
-<h3 id=indenting-and-outdenting><span class=secno>8.7 </span>Indenting and outdenting</h3>
+<h3 id=indenting-and-outdenting><span class=secno>8.8 </span>Indenting and outdenting</h3>
<p>To <dfn id=indent>indent</dfn> a list <var title="">node list</var> of consecutive <a class=external data-anolis-spec=domcore href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-tree-sibling title=concept-tree-sibling>sibling</a>
<a class=external data-anolis-spec=domcore href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-node title=concept-node>nodes</a>:
@@ -4720,7 +4725,7 @@
</ol>
-<h3 id=toggling-lists><span class=secno>8.8 </span>Toggling lists</h3>
+<h3 id=toggling-lists><span class=secno>8.9 </span>Toggling lists</h3>
<!--
Research for insertOrderedList/insertUnorderedList: tested the following
@@ -5274,7 +5279,7 @@
</ol>
-<h3 id=justifying-the-selection><span class=secno>8.9 </span>Justifying the selection</h3>
+<h3 id=justifying-the-selection><span class=secno>8.10 </span>Justifying the selection</h3>
<!--
There are two basic ways it works: using the align attribute, and using CSS
@@ -5388,7 +5393,7 @@
</ol>
-<h3 id=the-delete-command><span class=secno>8.10 </span><dfn>The <code title="">delete</code> command</dfn></h3>
+<h3 id=the-delete-command><span class=secno>8.11 </span><dfn>The <code title="">delete</code> command</dfn></h3>
<p><a href=#action>Action</a>:
<!--
@@ -5701,7 +5706,7 @@
</ol>
-<h3 id=the-formatblock-command><span class=secno>8.11 </span><dfn>The <code title="">formatBlock</code> command</dfn></h3>
+<h3 id=the-formatblock-command><span class=secno>8.12 </span><dfn>The <code title="">formatBlock</code> command</dfn></h3>
<!--
Tested browser versions: IE9, Firefox 4.0, Chrome 13 dev, Opera 11.10.
@@ -5996,7 +6001,7 @@
</ol>
-<h3 id=the-forwarddelete-command><span class=secno>8.12 </span><dfn>The <code title="">forwardDelete</code> command</dfn></h3>
+<h3 id=the-forwarddelete-command><span class=secno>8.13 </span><dfn>The <code title="">forwardDelete</code> command</dfn></h3>
<p><a href=#action>Action</a>:
<!-- Copy-pasted from delete, see there for comments. -->
@@ -6151,7 +6156,7 @@
</ol>
-<h3 id=the-indent-command><span class=secno>8.13 </span><dfn>The <code title="">indent</code> command</dfn></h3>
+<h3 id=the-indent-command><span class=secno>8.14 </span><dfn>The <code title="">indent</code> command</dfn></h3>
<!--
IE9: Outputs <blockquote style="margin-right: 0px" dir="ltr">, or when
@@ -6247,7 +6252,7 @@
</ol>
-<h3 id=the-inserthorizontalrule-command><span class=secno>8.14 </span><dfn>The <code title="">insertHorizontalRule</code> command</dfn></h3>
+<h3 id=the-inserthorizontalrule-command><span class=secno>8.15 </span><dfn>The <code title="">insertHorizontalRule</code> command</dfn></h3>
<p><a href=#action>Action</a>:
@@ -6313,7 +6318,7 @@
</ol>
-<h3 id=the-inserthtml-command><span class=secno>8.15 </span><dfn>The <code title="">insertHTML</code> command</dfn></h3>
+<h3 id=the-inserthtml-command><span class=secno>8.16 </span><dfn>The <code title="">insertHTML</code> command</dfn></h3>
<!--
Not supported by IE9. Handling of disallowed children is interesting:
@@ -6420,7 +6425,7 @@
</ol>
-<h3 id=the-insertimage-command><span class=secno>8.16 </span><dfn>The <code title="">insertImage</code> command</dfn></h3>
+<h3 id=the-insertimage-command><span class=secno>8.17 </span><dfn>The <code title="">insertImage</code> command</dfn></h3>
<p><a href=#action>Action</a>:
@@ -6479,7 +6484,7 @@
</ol>
-<h3 id=the-insertlinebreak-command><span class=secno>8.17 </span><dfn>The <code title="">insertLineBreak</code> command</dfn></h3>
+<h3 id=the-insertlinebreak-command><span class=secno>8.18 </span><dfn>The <code title="">insertLineBreak</code> command</dfn></h3>
<p><a href=#action>Action</a>:
@@ -6548,7 +6553,7 @@
</ol>
-<h3 id=the-insertorderedlist-command><span class=secno>8.18 </span><dfn>The <code title="">insertOrderedList</code> command</dfn></h3>
+<h3 id=the-insertorderedlist-command><span class=secno>8.19 </span><dfn>The <code title="">insertOrderedList</code> command</dfn></h3>
<p><a href=#action>Action</a>: <a href=#toggle-lists>Toggle lists</a> with <var title="">tag name</var>
"ol".
@@ -6573,7 +6578,7 @@
-->
-<h3 id=the-insertparagraph-command><span class=secno>8.19 </span><dfn>The <code title="">insertParagraph</code> command</dfn></h3>
+<h3 id=the-insertparagraph-command><span class=secno>8.20 </span><dfn>The <code title="">insertParagraph</code> command</dfn></h3>
<!--
There are three major behaviors here. Firefox 5.0a2 behaves identically to
@@ -6845,7 +6850,7 @@
</ol>
-<h3 id=the-inserttext-command><span class=secno>8.20 </span><dfn>The <code title="">insertText</code> command</dfn></h3>
+<h3 id=the-inserttext-command><span class=secno>8.21 </span><dfn>The <code title="">insertText</code> command</dfn></h3>
<!--
Supported only by WebKit. Tests in other browsers were manual. In the manual
@@ -7055,7 +7060,7 @@
</ol>
-<h3 id=the-insertunorderedlist-command><span class=secno>8.21 </span><dfn>The <code title="">insertUnorderedList</code> command</dfn></h3>
+<h3 id=the-insertunorderedlist-command><span class=secno>8.22 </span><dfn>The <code title="">insertUnorderedList</code> command</dfn></h3>
<p><a href=#action>Action</a>: <a href=#toggle-lists>Toggle lists</a> with <var title="">tag name</var>
"ul".
@@ -7067,7 +7072,7 @@
false otherwise.
-<h3 id=the-justifycenter-command><span class=secno>8.22 </span><dfn>The <code title="">justifyCenter</code> command</dfn></h3>
+<h3 id=the-justifycenter-command><span class=secno>8.23 </span><dfn>The <code title="">justifyCenter</code> command</dfn></h3>
<p><a href=#action>Action</a>: <a href=#justify-the-selection>Justify the selection</a> with
<var title="">alignment</var> "center".
@@ -7132,7 +7137,7 @@
-->
-<h3 id=the-justifyfull-command><span class=secno>8.23 </span><dfn>The <code title="">justifyFull</code> command</dfn></h3>
+<h3 id=the-justifyfull-command><span class=secno>8.24 </span><dfn>The <code title="">justifyFull</code> command</dfn></h3>
<p><a href=#action>Action</a>: <a href=#justify-the-selection>Justify the selection</a> with
<var title="">alignment</var> "justify".
@@ -7155,7 +7160,7 @@
<a class=external data-anolis-spec=domcore href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-tree-child title=concept-tree-child>children</a>. If there is no such <a class=external data-anolis-spec=domcore href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-node title=concept-node>node</a>, return "left".
-<h3 id=the-justifyleft-command><span class=secno>8.24 </span><dfn>The <code title="">justifyLeft</code> command</dfn></h3>
+<h3 id=the-justifyleft-command><span class=secno>8.25 </span><dfn>The <code title="">justifyLeft</code> command</dfn></h3>
<p><a href=#action>Action</a>: <a href=#justify-the-selection>Justify the selection</a> with
<var title="">alignment</var> "left".
@@ -7178,7 +7183,7 @@
<a class=external data-anolis-spec=domcore href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-tree-child title=concept-tree-child>children</a>. If there is no such <a class=external data-anolis-spec=domcore href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-node title=concept-node>node</a>, return "left".
-<h3 id=the-justifyright-command><span class=secno>8.25 </span><dfn>The <code title="">justifyRight</code> command</dfn></h3>
+<h3 id=the-justifyright-command><span class=secno>8.26 </span><dfn>The <code title="">justifyRight</code> command</dfn></h3>
<p><a href=#action>Action</a>: <a href=#justify-the-selection>Justify the selection</a> with
<var title="">alignment</var> "right".
@@ -7201,7 +7206,7 @@
<a class=external data-anolis-spec=domcore href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-tree-child title=concept-tree-child>children</a>. If there is no such <a class=external data-anolis-spec=domcore href=http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-node title=concept-node>node</a>, return "left".
-<h3 id=the-outdent-command><span class=secno>8.26 </span><dfn>The <code title="">outdent</code> command</dfn></h3>
+<h3 id=the-outdent-command><span class=secno>8.27 </span><dfn>The <code title="">outdent</code> command</dfn></h3>
<p><a href=#action>Action</a>:
--- a/implementation.js Sun Jul 24 13:10:41 2011 -0600
+++ b/implementation.js Sun Jul 24 13:13:51 2011 -0600
@@ -1237,132 +1237,6 @@
removeExtraneousLineBreaksAtTheEndOf(node);
}
-function recordCurrentOverrides() {
- // "Let overrides be a list of (string, string or boolean) ordered pairs,
- // initially empty."
- var overrides = [];
-
- // "If there is a value override for "createLink", add ("createLink", value
- // override for "createLink") to overrides."
- if (getValueOverride("createlink") !== undefined) {
- overrides.push(["createlink", getValueOverride("createlink")]);
- }
-
- // "For each command in the list "bold", "italic", "strikethrough",
- // "subscript", "superscript", "underline", in order: if there is a state
- // override for command, add (command, command's state override) to
- // overrides."
- ["bold", "italic", "strikethrough", "subscript", "superscript",
- "underline"].forEach(function(command) {
- if (getStateOverride(command) !== undefined) {
- overrides.push([command, getStateOverride(command)]);
- }
- });
-
- // "For each command in the list "fontName", "fontSize", "foreColor",
- // "hiliteColor", in order: if there is a value override for command, add
- // (command, command's value override) to overrides."
- ["fontname", "fontsize", "forecolor", "hilitecolor"].forEach(function(command) {
- if (getValueOverride(command) !== undefined) {
- overrides.push([command, getValueOverride(command)]);
- }
- });
-
- // "Return overrides."
- return overrides;
-}
-
-function recordCurrentStatesAndValues() {
- // "Let overrides be a list of (string, string or boolean) ordered pairs,
- // initially empty."
- var overrides = [];
-
- // "Let node be the first editable Text node effectively contained in the
- // active range, or null if there is none."
- var node = getAllEffectivelyContainedNodes(getActiveRange())
- .filter(function(node) { return isEditable(node) && node.nodeType == Node.TEXT_NODE })[0];
-
- // "If node is null, return overrides."
- if (!node) {
- return overrides;
- }
-
- // "Add ("createLink", value for "createLink") to overrides."
- overrides.push(["createlink", commands.createlink.value()]);
-
- // "For each command in the list "bold", "italic", "strikethrough",
- // "subscript", "superscript", "underline", in order: if node's effective
- // command value for command is one of its inline command activated values,
- // add (command, true) to overrides, and otherwise add (command, false) to
- // overrides."
- ["bold", "italic", "strikethrough", "subscript", "superscript",
- "underline"].forEach(function(command) {
- if (commands[command].inlineCommandActivatedValues
- .indexOf(getEffectiveCommandValue(node, command)) != -1) {
- overrides.push([command, true]);
- } else {
- overrides.push([command, false]);
- }
- });
-
- // "For each command in the list "fontName", "fontSize", "foreColor",
- // "hiliteColor", in order: add (command, command's value) to overrides."
- ["fontname", "fontsize", "forecolor", "hilitecolor"].forEach(function(command) {
- overrides.push([command, commands[command].value()]);
- });
-
- // "Return overrides."
- return overrides;
-}
-
-function restoreStatesAndValues(overrides) {
- // "If there is some editable Text node effectively contained in the active
- // range, then for each (command, override) pair in overrides, in order:"
- if (getAllEffectivelyContainedNodes(getActiveRange()).some(function(node) {
- return isEditable(node) && node.nodeType == Node.TEXT_NODE
- })) {
- for (var i = 0; i < overrides.length; i++) {
- var command = overrides[i][0];
- var override = overrides[i][1];
-
- // "If override is a boolean, and queryCommandState(command)
- // returns something different from override, call
- // execCommand(command)."
- if (typeof override == "boolean"
- && myQueryCommandState(command) != override) {
- myExecCommand(command);
- }
-
- // "If override is a string, and queryCommandValue(command) returns
- // something different from override, call execCommand(command,
- // false, override)."
- if (typeof override == "string"
- && !valuesEqual(command, myQueryCommandValue(command), override)) {
- myExecCommand(command, false, override);
- }
- }
-
- // "Otherwise, for each (command, override) pair in overrides, in order:"
- } else {
- for (var i = 0; i < overrides.length; i++) {
- var command = overrides[i][0];
- var override = overrides[i][1];
-
- // "If override is a boolean, set the state override for command to
- // override."
- if (typeof override == "boolean") {
- setStateOverride(command, override);
- }
-
- // "If override is a string, set the value override for command to
- // override."
- if (typeof override == "string") {
- setValueOverride(command, override);
- }
- }
- }
-}
-
//@}
///// Wrapping a list of nodes /////
//@{
@@ -4090,6 +3964,135 @@
return getPosition(newRange.endContainer, newRange.endOffset, node, offset) != "after";
}
+//@}
+///// Recording and restoring overrides /////
+//@{
+
+function recordCurrentOverrides() {
+ // "Let overrides be a list of (string, string or boolean) ordered pairs,
+ // initially empty."
+ var overrides = [];
+
+ // "If there is a value override for "createLink", add ("createLink", value
+ // override for "createLink") to overrides."
+ if (getValueOverride("createlink") !== undefined) {
+ overrides.push(["createlink", getValueOverride("createlink")]);
+ }
+
+ // "For each command in the list "bold", "italic", "strikethrough",
+ // "subscript", "superscript", "underline", in order: if there is a state
+ // override for command, add (command, command's state override) to
+ // overrides."
+ ["bold", "italic", "strikethrough", "subscript", "superscript",
+ "underline"].forEach(function(command) {
+ if (getStateOverride(command) !== undefined) {
+ overrides.push([command, getStateOverride(command)]);
+ }
+ });
+
+ // "For each command in the list "fontName", "fontSize", "foreColor",
+ // "hiliteColor", in order: if there is a value override for command, add
+ // (command, command's value override) to overrides."
+ ["fontname", "fontsize", "forecolor", "hilitecolor"].forEach(function(command) {
+ if (getValueOverride(command) !== undefined) {
+ overrides.push([command, getValueOverride(command)]);
+ }
+ });
+
+ // "Return overrides."
+ return overrides;
+}
+
+function recordCurrentStatesAndValues() {
+ // "Let overrides be a list of (string, string or boolean) ordered pairs,
+ // initially empty."
+ var overrides = [];
+
+ // "Let node be the first editable Text node effectively contained in the
+ // active range, or null if there is none."
+ var node = getAllEffectivelyContainedNodes(getActiveRange())
+ .filter(function(node) { return isEditable(node) && node.nodeType == Node.TEXT_NODE })[0];
+
+ // "If node is null, return overrides."
+ if (!node) {
+ return overrides;
+ }
+
+ // "Add ("createLink", value for "createLink") to overrides."
+ overrides.push(["createlink", commands.createlink.value()]);
+
+ // "For each command in the list "bold", "italic", "strikethrough",
+ // "subscript", "superscript", "underline", in order: if node's effective
+ // command value for command is one of its inline command activated values,
+ // add (command, true) to overrides, and otherwise add (command, false) to
+ // overrides."
+ ["bold", "italic", "strikethrough", "subscript", "superscript",
+ "underline"].forEach(function(command) {
+ if (commands[command].inlineCommandActivatedValues
+ .indexOf(getEffectiveCommandValue(node, command)) != -1) {
+ overrides.push([command, true]);
+ } else {
+ overrides.push([command, false]);
+ }
+ });
+
+ // "For each command in the list "fontName", "fontSize", "foreColor",
+ // "hiliteColor", in order: add (command, command's value) to overrides."
+ ["fontname", "fontsize", "forecolor", "hilitecolor"].forEach(function(command) {
+ overrides.push([command, commands[command].value()]);
+ });
+
+ // "Return overrides."
+ return overrides;
+}
+
+function restoreStatesAndValues(overrides) {
+ // "If there is some editable Text node effectively contained in the active
+ // range, then for each (command, override) pair in overrides, in order:"
+ if (getAllEffectivelyContainedNodes(getActiveRange()).some(function(node) {
+ return isEditable(node) && node.nodeType == Node.TEXT_NODE
+ })) {
+ for (var i = 0; i < overrides.length; i++) {
+ var command = overrides[i][0];
+ var override = overrides[i][1];
+
+ // "If override is a boolean, and queryCommandState(command)
+ // returns something different from override, call
+ // execCommand(command)."
+ if (typeof override == "boolean"
+ && myQueryCommandState(command) != override) {
+ myExecCommand(command);
+ }
+
+ // "If override is a string, and queryCommandValue(command) returns
+ // something different from override, call execCommand(command,
+ // false, override)."
+ if (typeof override == "string"
+ && !valuesEqual(command, myQueryCommandValue(command), override)) {
+ myExecCommand(command, false, override);
+ }
+ }
+
+ // "Otherwise, for each (command, override) pair in overrides, in order:"
+ } else {
+ for (var i = 0; i < overrides.length; i++) {
+ var command = overrides[i][0];
+ var override = overrides[i][1];
+
+ // "If override is a boolean, set the state override for command to
+ // override."
+ if (typeof override == "boolean") {
+ setStateOverride(command, override);
+ }
+
+ // "If override is a string, set the value override for command to
+ // override."
+ if (typeof override == "string") {
+ setValueOverride(command, override);
+ }
+ }
+ }
+}
//@}
///// Deleting the contents of a range /////
--- a/source.html Sun Jul 24 13:10:41 2011 -0600
+++ b/source.html Sun Jul 24 13:13:51 2011 -0600
@@ -927,109 +927,6 @@
<span>remove extraneous line breaks before</span> it, then <span>remove
extraneous line breaks at the end of</span> it.
-<p>To <dfn>record current overrides</dfn>:
-
-<ol>
- <li>Let <var>overrides</var> be a list of (string, string or boolean) ordered
- pairs, initially empty.
-
- <!--
- When restoring, some commands can interfere with others. Specifically, we
- want to restore createLink before foreColor and underline, and subscript and
- superscript before fontSize. TODO: This approach only works for default
- styles (although I'm not sure offhand how we could handle non-default styles
- in principle).
- -->
- <li>If there is a <span>value override</span> for "createLink", add
- ("createLink", <span>value override</span> for "createLink") to
- <var>overrides</var>.
-
- <li>For each <var>command</var> in the list "bold", "italic",
- "strikethrough", "subscript", "superscript", "underline", in order: if there
- is a <span>state override</span> for <var>command</var>, add
- (<var>command</var>, <var>command</var>'s <span>state override</span>) to
- <var>overrides</var>.
-
- <li>For each <var>command</var> in the list "fontName", "fontSize",
- "foreColor", "hiliteColor", in order: if there is a <span>value
- override</span> for <var>command</var>, add (<var>command</var>,
- <var>command</var>'s <span>value override</span>) to <var>overrides</var>.
-
- <li>Return <var>overrides</var>.
-</ol>
-
-<p>To <dfn>record current states and values</dfn>:
-
-<ol>
- <li>Let <var>overrides</var> be a list of (string, string or boolean) ordered
- pairs, initially empty.
-
- <li>Let <var>node</var> be the first <span>editable</span> [[text]] node
- <span>effectively contained</span> in the <span>active range</span>, or null
- if there is none.
-
- <li>If <var>node</var> is null, return <var>overrides</var>.
-
- <li>Add ("createLink", <span>value</span> for "createLink") to
- <var>overrides</var>.
-
- <li>For each <var>command</var> in the list "bold", "italic",
- "strikethrough", "subscript", "superscript", "underline", in order: if
- <var>node</var>'s <span>effective command value</span> for <var>command</var>
- is one of its <span>inline command activated values</span>, add
- (<var>command</var>, true) to <var>overrides</var>, and otherwise add
- (<var>command</var>, false) to <var>overrides</var>.
- <!--
- Thus we will set state overrides based on the first editable text node, to
- match values. This means that if you have <p>foo<b>[bar</b>baz]</p> and hit
- backspace and hit A, you'll get <p>foo<b>a[]</b></p>, although bold was
- previously indeterminate. This is needed to match the behavior of hitting A
- straight away, since innerText doesn't strip wrappers when it invokes "delete
- the contents".
- -->
-
- <li>For each <var>command</var> in the list "fontName", "fontSize",
- "foreColor", "hiliteColor", in order: add (<var>command</var>,
- <var>command</var>'s <span>value</span>) to <var>overrides</var>.
-
- <li>Return <var>overrides</var>.
-</ol>
-
-<p>To <dfn>restore states and values</dfn> specified by a list
-<var>overrides</var> returned by the <span>record current overrides</span> or
-<span>record current states and values</span> algorithm:
-
-<ol>
- <li>If there is some <span>editable</span> [[text]] node <span>effectively
- contained</span> in the <span>active range</span>, then for each
- (<var>command</var>, <var>override</var>) pair in <var>overrides</var>, in
- order:
-
- <ol>
- <li>If <var>override</var> is a boolean, and <code
- title=queryCommandState()>queryCommandState(<var>command</var>)</code>
- returns something different from <var>override</var>, call <code
- title=execCommand()>execCommand(<var>command</var>)</code>.
-
- <li>If <var>override</var> is a string, and <code
- title=queryCommandValue()>queryCommandValue(<var>command</var>)</code>
- returns something different from <var>override</var>, call <code
- title=execCommand()>execCommand(<var>command</var>, false,
- <var>override</var>)</code>.
- </ol>
-
- <li>Otherwise, for each (<var>command</var>, <var>override</var>) pair in
- <var>overrides</var>, in order:
-
- <ol>
- <li>If <var>override</var> is a boolean, set the <span>state
- override</span> for <var>command</var> to <var>override</var>.
-
- <li>If <var>override</var> is a string, set the <span>value override</span>
- for <var>command</var> to <var>override</var>.
- </ol>
-</ol>
-
<!-- @} -->
<h3>Wrapping a list of nodes</h3>
<!-- @{ -->
@@ -3657,6 +3554,113 @@
</ol>
<!-- @} -->
+<h3>Recording and restoring overrides</h3>
+<!--@{-->
+
+<p>To <dfn>record current overrides</dfn>:
+
+<ol>
+ <li>Let <var>overrides</var> be a list of (string, string or boolean) ordered
+ pairs, initially empty.
+
+ <!--
+ When restoring, some commands can interfere with others. Specifically, we
+ want to restore createLink before foreColor and underline, and subscript and
+ superscript before fontSize. TODO: This approach only works for default
+ styles (although I'm not sure offhand how we could handle non-default styles
+ in principle).
+ -->
+ <li>If there is a <span>value override</span> for "createLink", add
+ ("createLink", <span>value override</span> for "createLink") to
+ <var>overrides</var>.
+
+ <li>For each <var>command</var> in the list "bold", "italic",
+ "strikethrough", "subscript", "superscript", "underline", in order: if there
+ is a <span>state override</span> for <var>command</var>, add
+ (<var>command</var>, <var>command</var>'s <span>state override</span>) to
+ <var>overrides</var>.
+
+ <li>For each <var>command</var> in the list "fontName", "fontSize",
+ "foreColor", "hiliteColor", in order: if there is a <span>value
+ override</span> for <var>command</var>, add (<var>command</var>,
+ <var>command</var>'s <span>value override</span>) to <var>overrides</var>.
+
+ <li>Return <var>overrides</var>.
+</ol>
+
+<p>To <dfn>record current states and values</dfn>:
+
+<ol>
+ <li>Let <var>overrides</var> be a list of (string, string or boolean) ordered
+ pairs, initially empty.
+
+ <li>Let <var>node</var> be the first <span>editable</span> [[text]] node
+ <span>effectively contained</span> in the <span>active range</span>, or null
+ if there is none.
+
+ <li>If <var>node</var> is null, return <var>overrides</var>.
+
+ <li>Add ("createLink", <span>value</span> for "createLink") to
+ <var>overrides</var>.
+
+ <li>For each <var>command</var> in the list "bold", "italic",
+ "strikethrough", "subscript", "superscript", "underline", in order: if
+ <var>node</var>'s <span>effective command value</span> for <var>command</var>
+ is one of its <span>inline command activated values</span>, add
+ (<var>command</var>, true) to <var>overrides</var>, and otherwise add
+ (<var>command</var>, false) to <var>overrides</var>.
+ <!--
+ Thus we will set state overrides based on the first editable text node, to
+ match values. This means that if you have <p>foo<b>[bar</b>baz]</p> and hit
+ backspace and hit A, you'll get <p>foo<b>a[]</b></p>, although bold was
+ previously indeterminate. This is needed to match the behavior of hitting A
+ straight away, since innerText doesn't strip wrappers when it invokes "delete
+ the contents".
+ -->
+
+ <li>For each <var>command</var> in the list "fontName", "fontSize",
+ "foreColor", "hiliteColor", in order: add (<var>command</var>,
+ <var>command</var>'s <span>value</span>) to <var>overrides</var>.
+
+ <li>Return <var>overrides</var>.
+</ol>
+
+<p>To <dfn>restore states and values</dfn> specified by a list
+<var>overrides</var> returned by the <span>record current overrides</span> or
+<span>record current states and values</span> algorithm:
+
+<ol>
+ <li>If there is some <span>editable</span> [[text]] node <span>effectively
+ contained</span> in the <span>active range</span>, then for each
+ (<var>command</var>, <var>override</var>) pair in <var>overrides</var>, in
+ order:
+
+ <ol>
+ <li>If <var>override</var> is a boolean, and <code
+ title=queryCommandState()>queryCommandState(<var>command</var>)</code>
+ returns something different from <var>override</var>, call <code
+ title=execCommand()>execCommand(<var>command</var>)</code>.
+
+ <li>If <var>override</var> is a string, and <code
+ title=queryCommandValue()>queryCommandValue(<var>command</var>)</code>
+ returns something different from <var>override</var>, call <code
+ title=execCommand()>execCommand(<var>command</var>, false,
+ <var>override</var>)</code>.
+ </ol>
+
+ <li>Otherwise, for each (<var>command</var>, <var>override</var>) pair in
+ <var>overrides</var>, in order:
+
+ <ol>
+ <li>If <var>override</var> is a boolean, set the <span>state
+ override</span> for <var>command</var> to <var>override</var>.
+
+ <li>If <var>override</var> is a string, set the <span>value override</span>
+ for <var>command</var> to <var>override</var>.
+ </ol>
+</ol>
+
+<!--@}-->
<h3>Deleting the contents of a range</h3>
<!-- @{ -->
<p>To <dfn>delete the contents</dfn> of a [[range]] <var>range</var>, given a