Bug 787432 - Don't strip existing empty wrappers when inserting text; r=ehsan

This commit is contained in:
Aryeh Gregor 2012-09-27 14:39:39 +02:00
Родитель 5c2c69faa2
Коммит b9ed7e8ba3
5 изменённых файлов: 32 добавлений и 78 удалений

Просмотреть файл

@ -1,16 +1,18 @@
DEPTH = @DEPTH@
# THIS FILE IS AUTOGENERATED BY parseFailures.py - DO NOT EDIT
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = @relativesrcdir@
DEPTH := @DEPTH@
DIRS = \
$(NULL)
topsrcdir := @top_srcdir@
srcdir := @srcdir@
VPATH := @srcdir@
relativesrcdir := @relativesrcdir@
include $(DEPTH)/config/autoconf.mk
MOCHITEST_FILES = \
DIRS := \
$(NULL)
MOCHITEST_FILES := \
test_event.html.json \
test_runtest.html.json \
$(NULL)

Просмотреть файл

@ -2369,16 +2369,6 @@
"[[\"formatblock\",\"<li>\"]] \"<div>[foobar]</div>\" queryCommandValue(\"formatblock\") after":true,
"[[\"formatblock\",\"<ol>\"]] \"<div>[foobar]</div>\" queryCommandValue(\"formatblock\") before":true,
"[[\"formatblock\",\"<ol>\"]] \"<div>[foobar]</div>\" queryCommandValue(\"formatblock\") after":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<p>\"]] \"<div>[foobar]</div>\": execCommand(\"defaultparagraphseparator\", false, \"div\") return value":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<p>\"]] \"<div>[foobar]</div>\" compare innerHTML":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<p>\"]] \"<div>[foobar]</div>\" queryCommandValue(\"defaultparagraphseparator\") before":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<p>\"]] \"<div>[foobar]</div>\" queryCommandValue(\"defaultparagraphseparator\") after":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<p>\"]] \"<div>[foobar]</div>\" queryCommandValue(\"formatblock\") before":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<p>\"]] \"<div>[foobar]</div>\": execCommand(\"defaultparagraphseparator\", false, \"p\") return value":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<p>\"]] \"<div>[foobar]</div>\" compare innerHTML":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<p>\"]] \"<div>[foobar]</div>\" queryCommandValue(\"defaultparagraphseparator\") before":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<p>\"]] \"<div>[foobar]</div>\" queryCommandValue(\"defaultparagraphseparator\") after":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<p>\"]] \"<div>[foobar]</div>\" queryCommandValue(\"formatblock\") before":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<pre>\"]] \"<div>[foobar]</div>\": execCommand(\"defaultparagraphseparator\", false, \"div\") return value":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<pre>\"]] \"<div>[foobar]</div>\" compare innerHTML":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<pre>\"]] \"<div>[foobar]</div>\" queryCommandValue(\"defaultparagraphseparator\") before":true,
@ -2409,14 +2399,6 @@
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<dd>\"]] \"<p>[foobar]</p>\" queryCommandValue(\"defaultparagraphseparator\") before":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<dd>\"]] \"<p>[foobar]</p>\" queryCommandValue(\"defaultparagraphseparator\") after":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<dd>\"]] \"<p>[foobar]</p>\" queryCommandValue(\"formatblock\") after":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<div>\"]] \"<p>[foobar]</p>\": execCommand(\"defaultparagraphseparator\", false, \"div\") return value":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<div>\"]] \"<p>[foobar]</p>\" queryCommandValue(\"defaultparagraphseparator\") before":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<div>\"]] \"<p>[foobar]</p>\" queryCommandValue(\"defaultparagraphseparator\") after":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"<div>\"]] \"<p>[foobar]</p>\" queryCommandValue(\"formatblock\") after":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<div>\"]] \"<p>[foobar]</p>\": execCommand(\"defaultparagraphseparator\", false, \"p\") return value":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<div>\"]] \"<p>[foobar]</p>\" queryCommandValue(\"defaultparagraphseparator\") before":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<div>\"]] \"<p>[foobar]</p>\" queryCommandValue(\"defaultparagraphseparator\") after":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"<div>\"]] \"<p>[foobar]</p>\" queryCommandValue(\"formatblock\") after":true,
"[[\"formatblock\",\"<dl>\"]] \"<p>[foobar]</p>\": execCommand(\"formatblock\", false, \"<dl>\") return value":true,
"[[\"formatblock\",\"<dl>\"]] \"<p>[foobar]</p>\" compare innerHTML":true,
"[[\"formatblock\",\"<dl>\"]] \"<p>[foobar]</p>\" queryCommandValue(\"formatblock\") after":true,
@ -3905,12 +3887,6 @@
"[[\"inserthorizontalrule\",\"\"]] \"<table><caption>foo[bar]baz</caption><tr><td>quz</table>\": execCommand(\"inserthorizontalrule\", false, \"\") return value":true,
"[[\"inserthorizontalrule\",\"\"]] \"<table><caption>foo[bar]baz</caption><tr><td>quz</table>\" compare innerHTML":true,
"[[\"inserthorizontalrule\",\"\"]] \"<dl><dt>foo[bar]baz</dt></dl>\" compare innerHTML":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"inserthorizontalrule\",\"\"]] \"<p>foo[bar]baz</p>\": execCommand(\"defaultparagraphseparator\", false, \"div\") return value":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"inserthorizontalrule\",\"\"]] \"<p>foo[bar]baz</p>\" queryCommandValue(\"defaultparagraphseparator\") before":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"inserthorizontalrule\",\"\"]] \"<p>foo[bar]baz</p>\" queryCommandValue(\"defaultparagraphseparator\") after":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"inserthorizontalrule\",\"\"]] \"<p>foo[bar]baz</p>\": execCommand(\"defaultparagraphseparator\", false, \"p\") return value":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"inserthorizontalrule\",\"\"]] \"<p>foo[bar]baz</p>\" queryCommandValue(\"defaultparagraphseparator\") before":true,
"[[\"defaultparagraphseparator\",\"p\"],[\"inserthorizontalrule\",\"\"]] \"<p>foo[bar]baz</p>\" queryCommandValue(\"defaultparagraphseparator\") after":true,
"[[\"inserthorizontalrule\",\"\"]] \"<ruby>foo[bar]baz<rt>quz</rt></ruby>\" compare innerHTML":true,
"[[\"inserthorizontalrule\",\"\"]] \"<ruby>foo<rt>bar[baz]quz</rt></ruby>\" compare innerHTML":true,
"[[\"inserthorizontalrule\",\"\"]] \"<ruby>foo<rp>bar[baz]quz</rp><rt>qoz</rt><rp>qiz</rp></ruby>\" compare innerHTML":true,
@ -6502,7 +6478,7 @@
"[[\"inserttext\",\" \"]] \"a@b<b>[]c</b>\" compare innerHTML":true,
"[[\"inserttext\",\"\\t\"]] \"http://a[]\" compare innerHTML":true,
"[[\"inserttext\",\"\\f\"]] \"http://a[]\" compare innerHTML":true,
"[[\"inserttext\",\" \"]] \"http://a[]\" compare innerHTML":true,
"[[\"inserttext\",\"\u00a0\"]] \"http://a[]\" compare innerHTML":true,
"[[\"inserttext\",\" \"]] \"foo[]\" compare innerHTML":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"inserttext\",\"a\"]] \"<p>fo[o<p>b]ar\": execCommand(\"defaultparagraphseparator\", false, \"div\") return value":true,
"[[\"defaultparagraphseparator\",\"div\"],[\"inserttext\",\"a\"]] \"<p>fo[o<p>b]ar\" queryCommandValue(\"defaultparagraphseparator\") before":true,
@ -6519,30 +6495,13 @@
"[[\"inserttext\",\"a\"]] \"{}<br>\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"<p>{}<br>\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"<p><span>{}<br></span>\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"<p>foo<span style=color:#aBcDeF>[bar]</span>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"<p>foo<span style=color:#aBcDeF>{bar}</span>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"<p>foo{<span style=color:#aBcDeF>bar</span>}baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"<p>[foo<span style=color:#aBcDeF>bar]</span>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"<p>[foo<span style=color:#aBcDeF>bar]</span>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"<p>{foo<span style=color:#aBcDeF>bar}</span>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"<p>{foo<span style=color:#aBcDeF>bar}</span>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"<p>foo<span style=color:#aBcDeF>[bar</span>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"<p>foo<span style=color:#aBcDeF>{bar</span>baz}\" compare innerHTML":true,
"[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"<p>foo<span style=color:#aBcDeF>[bar</span><span style=color:#fEdCbA>baz]</span>quz\" compare innerHTML":true,
"[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"<p>foo<span style=color:#aBcDeF>[bar</span><span style=color:#fEdCbA>baz]</span>quz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<s>[bar]</s>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<a href=http://www.google.com>[bar]</a>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font color=#0000FF>[bar]</font>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<span style=background-color:#00FFFF>[bar]</span>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<a href=http://www.google.com><font color=blue>[bar]</font></a>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font color=blue><a href=http://www.google.com>[bar]</a></font>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<a href=http://www.google.com><font color=brown>[bar]</font></a>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font color=brown><a href=http://www.google.com>[bar]</a></font>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<a href=http://www.google.com><font color=black>[bar]</font></a>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<a href=http://www.google.com><u>[bar]</u></a>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<u><a href=http://www.google.com>[bar]</a></u>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font size=2><sub>[bar]</sub></font>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font size=3><sub>[bar]</sub></font>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foo<b>bar]</b>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foo<b>bar]</b>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foo<i>bar]</i>baz\" compare innerHTML":true,
@ -6586,28 +6545,6 @@
"[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foo<sub><font size=3>bar]</font></sub>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foo<font size=3><sub>bar]</sub></font>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foo<font size=3><sub>bar]</sub></font>baz\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<b>[bar</b>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<i>[bar</i>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<s>[bar</s>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<sub>[bar</sub>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<sup>[bar</sup>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<u>[bar</u>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<a href=http://www.google.com>[bar</a>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font face=sans-serif>[bar</font>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font size=4>[bar</font>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font color=#0000FF>[bar</font>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<span style=background-color:#00FFFF>[bar</span>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<a href=http://www.google.com><font color=blue>[bar</font></a>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font color=blue><a href=http://www.google.com>[bar</a></font>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<a href=http://www.google.com><font color=brown>[bar</font></a>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font color=brown><a href=http://www.google.com>[bar</a></font>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<a href=http://www.google.com><font color=black>[bar</font></a>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<a href=http://www.google.com><u>[bar</u></a>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<u><a href=http://www.google.com>[bar</a></u>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<sub><font size=2>[bar</font></sub>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font size=2><sub>[bar</sub></font>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<sub><font size=3>[bar</font></sub>baz]\" compare innerHTML":true,
"[[\"inserttext\",\"a\"]] \"foo<font size=3><sub>[bar</sub></font>baz]\" compare innerHTML":true,
"[[\"insertunorderedlist\",\"\"]] \"foo<br>[bar]\" compare innerHTML":true,
"[[\"insertunorderedlist\",\"\"]] \"[foo<ol><li>bar]</ol>baz\" queryCommandIndeterm(\"insertunorderedlist\") before":true,
"[[\"insertunorderedlist\",\"\"]] \"foo<ol><li>[bar</ol>baz]\" queryCommandIndeterm(\"insertunorderedlist\") before":true,
@ -11218,10 +11155,6 @@
"[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"foo<s style=\\\"text-decoration: overline\\\">b[a]r</s>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"foo<u style=\\\"text-decoration: overline\\\">[bar]</u>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"foo<u style=\\\"text-decoration: overline\\\">b[a]r</u>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"true\"],[\"strikethrough\",\"\"]] \"<p style=\\\"text-decoration: line-through\\\">foo[bar]baz</p>\" compare innerHTML":true,
"[[\"stylewithcss\",\"true\"],[\"strikethrough\",\"\"]] \"<p style=\\\"text-decoration: line-through\\\">foo[bar]baz</p>\" queryCommandState(\"strikethrough\") after":true,
"[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"<p style=\\\"text-decoration: line-through\\\">foo[bar]baz</p>\" compare innerHTML":true,
"[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"<p style=\\\"text-decoration: line-through\\\">foo[bar]baz</p>\" queryCommandState(\"strikethrough\") after":true,
"[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"<p style=\\\"text-decoration: overline\\\">foo[bar]baz</p>\" compare innerHTML":true,
"[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"foo<span class=\\\"underline\\\">[bar]</span>baz\" compare innerHTML":true,
"[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"foo<span class=\\\"underline\\\">b[a]r</span>baz\" compare innerHTML":true,

Просмотреть файл

@ -1271,9 +1271,10 @@ nsHTMLEditRules::WillInsertText(EditAction aAction,
nsCOMPtr<nsIDOMNode> selNode;
int32_t selOffset;
// if the selection isn't collapsed, delete it.
// If the selection isn't collapsed, delete it. Don't delete existing inline
// tags, because we're hopefully going to insert text (bug 787432).
if (!aSelection->Collapsed()) {
res = mHTMLEditor->DeleteSelection(nsIEditor::eNone, nsIEditor::eStrip);
res = mHTMLEditor->DeleteSelection(nsIEditor::eNone, nsIEditor::eNoStrip);
NS_ENSURE_SUCCESS(res, res);
}

Просмотреть файл

@ -80,6 +80,7 @@ MOCHITEST_FILES = \
test_bug757371.html \
test_bug767684.html \
test_bug780035.html \
test_bug787432.html \
$(NULL)
ifneq (mobile,$(MOZ_BUILD_APP))

Просмотреть файл

@ -0,0 +1,17 @@
<!DOCTYPE html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=787432
-->
<title>Test for Bug 787432</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css">
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=787432">Mozilla Bug 787432</a>
<div id="test" contenteditable><span class="insert">%</span><br></div>
<script>
var div = document.getElementById("test");
getSelection().collapse(div.firstChild, 0);
getSelection().extend(div.firstChild, 1);
document.execCommand("inserttext", false, "x");
is(div.innerHTML, '<span class="insert">x</span><br>',
"Empty <span> needs to not be removed");
</script>