Rationale: a command is supported if it can be converted to an internal Midas
command. `nsCommandManager::IsCommandSupported' might not be needed any more.
Corollary: document.queryCommandEnabled should return false on unsupported
commands without raising any exception.
Browserscope tests: +43 points = 258 failed tests...
* Q section: 0/48 => 42/48
42 tests used to fail (execution exception), now pass
* QE section: 36/46 => 37/46
garbage-1_TEXT-1 used to fail, now passes
In these two sections, a lot of tests that used to raise an exception now return
`false' (that's still a FAIL, but that's not the same kind of FAIL).
Other Browserscope tests are not affected by this patch.
The status of this test suite (currentStatus.js) has been updated accordingly.
Given the way GetPromotedPoint / IsNodeInActiveEditor are designed, when the
selection is in the first child element of the active editing host the
selection is extended outside of editor node.
As a result, `GetNodesFromSelection' (which is called at the beginning of
`WillAlign') returns two nodes:
1. an empty text node, which is enclosed in a <div style="text-align: ***">;
2. the first child element, which is destroyed when it's a <div>;
Proposed solution:
#1 can be avoided by checking that the node is editable in `WillAlign';
#2 can be avoided by not dropping <div> blocks in `RemoveAlignment'.
This is an opportunity to simplify `RemoveAlignment' a bit.
In design mode, pressing [Return] twice in a list (ol, ul, dl) splits the list
and inserts a paragraph. When the list is the active editing host, it should not
be split.
In some situations, pressing Enter in a contentEditable node fails:
* in an editable paragraph, list item or header, pressing Enter
creates another editable block;
* in an inline editable node, pressing Enter does nothing.
That's because nsHTMLEditRules::WillInsertBreak doesn't check for the active
editing host. This patch should fix it.
When a selection in an inline element is to be deleted, it is first expanded to
the parent block in order not to leave any empty inline element. This patch
ensures that the selection cannot be expanded outside of the contentEditable
element (active editing host).
In editable elements, create a paragraph instead of a <br> node
when [Return] is pressed:
* once in a header node (<h[1..6]>);
* twice in a list item node (<li>).
The main fix here involves the introduction of the nsHTMLEditor::IsNodeInActiveEditor
API. This API returns true if the current selection in the document falls
inside the active editable section. The patch adds a bunch of checks using
this API to various places in the code to make sure that editing operations do
not escape their editing host.
There are also some unrelated fixes to range promotion code which fix the
bugs that have existed in that code before, but because of the lack of this
check were not uncovered before.
This patch also removes the nsTextEditUtils::InBody API which only made sense
in designMode documents, and was insufficient for contenteditable elements.