Bug 1174452: Part 2 -- scan nsTextNode's parent element for preformat in nsDocumentEncoder r=masayuki,hsivonen

This takes into account `white-space: pre` style of `nsTextNode`'s
parent element when formatting the selected text of the `nsTextNode`
node.

Differential Revision: https://phabricator.services.mozilla.com/D29159

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Mirko Brodesser 2019-05-09 07:40:47 +00:00
parent fad4ead1a4
commit 331e0a761b
2 changed files with 20 additions and 6 deletions

View File

@ -338,8 +338,15 @@ nsresult nsDocumentEncoder::SerializeNodeStart(nsINode& aOriginalNode,
int32_t aEndOffset,
nsAString& aStr,
nsINode* aFixupNode) {
if (mNeedsPreformatScanning && aOriginalNode.IsElement()) {
mSerializer->ScanElementForPreformat(aOriginalNode.AsElement());
if (mNeedsPreformatScanning) {
if (aOriginalNode.IsElement()) {
mSerializer->ScanElementForPreformat(aOriginalNode.AsElement());
} else if (aOriginalNode.IsText()) {
const nsCOMPtr<nsINode> parent = aOriginalNode.GetParent();
if (parent && parent->IsElement()) {
mSerializer->ScanElementForPreformat(parent->AsElement());
}
}
}
if (!IsVisibleNode(&aOriginalNode)) {
@ -393,8 +400,15 @@ nsresult nsDocumentEncoder::SerializeNodeStart(nsINode& aOriginalNode,
}
nsresult nsDocumentEncoder::SerializeNodeEnd(nsINode& aNode, nsAString& aStr) {
if (mNeedsPreformatScanning && aNode.IsElement()) {
mSerializer->ForgetElementForPreformat(aNode.AsElement());
if (mNeedsPreformatScanning) {
if (aNode.IsElement()) {
mSerializer->ForgetElementForPreformat(aNode.AsElement());
} else if (aNode.IsText()) {
const nsCOMPtr<nsINode> parent = aNode.GetParent();
if (parent && parent->IsElement()) {
mSerializer->ForgetElementForPreformat(parent->AsElement());
}
}
}
if (!IsVisibleNode(&aNode)) {

View File

@ -293,7 +293,7 @@ function test()
e = document.getElementById('testG');
synthesizeMouse(e, 1, 1, {});
synthesizeMouse(e, 400, 180, { shiftKey: true });
checkText("aaaa bbbb", e); // XXX this doesn't seem right - bug 1247799
checkText("aaaa\n\n\n\nbbbb", e);
checkRanges([[0,0,-1,1],[2,0,-1,3],[4,0,-1,5],[6,0,6,5]], e);
doneTest(e);
@ -303,7 +303,7 @@ function test()
synthesizeMouse(e, 30, 90, { shiftKey: true });
synthesizeMouse(e, 50, 90, { shiftKey: true });
synthesizeMouse(e, 70, 90, { shiftKey: true });
checkText("aaaa bbb", e);
checkText("aaaa\n\nbbb", e);
checkRanges([[0,0,-1,1],[-1,2,3,4]], e);
doneTest(e);