mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-18 07:45:30 +00:00
Bug 1713334 - Part 2: Initialize TextEditor always with a text node r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D117022
This commit is contained in:
parent
8bbe7f3f11
commit
9b640ade5b
@ -339,9 +339,33 @@ nsresult EditorBase::Init(Document& aDocument, Element* aRoot,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditorBase::EnsureEmptyTextFirstChild() {
|
||||
MOZ_ASSERT(IsTextEditor());
|
||||
RefPtr<Element> root = GetRoot();
|
||||
nsIContent* firstChild = root->GetFirstChild();
|
||||
|
||||
if (!firstChild || !firstChild->IsText()) {
|
||||
RefPtr<nsTextNode> newTextNode = CreateTextNode(u""_ns);
|
||||
if (!newTextNode) {
|
||||
NS_WARNING("EditorBase::CreateTextNode() failed");
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
IgnoredErrorResult ignoredError;
|
||||
root->InsertChildBefore(newTextNode, root->GetFirstChild(), true,
|
||||
ignoredError);
|
||||
MOZ_ASSERT(!ignoredError.Failed());
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditorBase::InitEditorContentAndSelection() {
|
||||
MOZ_ASSERT(IsEditActionDataAvailable());
|
||||
|
||||
if (IsTextEditor()) {
|
||||
MOZ_TRY(EnsureEmptyTextFirstChild());
|
||||
}
|
||||
|
||||
nsresult rv = MaybeCreatePaddingBRElementForEmptyEditor();
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING(
|
||||
|
@ -2240,6 +2240,8 @@ class EditorBase : public nsIEditor,
|
||||
return mIsHTMLEditorClass ? EditorType::HTML : EditorType::Text;
|
||||
}
|
||||
|
||||
[[nodiscard]] MOZ_CAN_RUN_SCRIPT nsresult EnsureEmptyTextFirstChild();
|
||||
|
||||
/**
|
||||
* InitEditorContentAndSelection() may insert a padding `<br>` element for
|
||||
* if it's required in the anonymous `<div>` element or `<body>` element and
|
||||
|
@ -82,7 +82,7 @@ class TextEditor final : public EditorBase,
|
||||
MOZ_CAN_RUN_SCRIPT nsresult Init(Document& aDoc, Element* aRoot,
|
||||
nsISelectionController* aSelCon,
|
||||
uint32_t aFlags,
|
||||
const nsAString& aValue) final;
|
||||
const nsAString& aInitialValue) final;
|
||||
|
||||
bool IsEmpty() const final;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user