зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1574852 - part 32: Move `HTMLEditRules::MaybeSplitAncestorsForInsertWithTransaction()` to `HTMLEditor` r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D43193 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
337e804b70
Коммит
337a97617a
|
@ -4071,7 +4071,8 @@ nsresult HTMLEditRules::MakeList(nsAtom& aListType, bool aEntireList,
|
|||
}
|
||||
|
||||
SplitNodeResult splitAtSelectionStartResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(aListType,
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(aListType,
|
||||
atStartOfSelection);
|
||||
if (NS_WARN_IF(splitAtSelectionStartResult.Failed())) {
|
||||
return splitAtSelectionStartResult.Rv();
|
||||
|
@ -4356,7 +4357,9 @@ nsresult HTMLEditRules::MakeList(nsAtom& aListType, bool aEntireList,
|
|||
// need to make a list to put things in if we haven't already,
|
||||
if (!curList) {
|
||||
SplitNodeResult splitCurNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(aListType, atCurNode);
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(aListType,
|
||||
atCurNode);
|
||||
if (NS_WARN_IF(splitCurNodeResult.Failed())) {
|
||||
return splitCurNodeResult.Rv();
|
||||
}
|
||||
|
@ -4670,7 +4673,8 @@ nsresult HTMLEditRules::MakeBasicBlock(nsAtom& blockType) {
|
|||
}
|
||||
// Make sure we can put a block here.
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(blockType,
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(blockType,
|
||||
pointToInsertBlock);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -4866,7 +4870,8 @@ nsresult HTMLEditRules::IndentAroundSelectionWithCSS() {
|
|||
|
||||
// make sure we can put a block here
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
atStartOfSelection);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -4989,7 +4994,8 @@ nsresult HTMLEditRules::IndentAroundSelectionWithCSS() {
|
|||
atCurNode.GetContainer()->NodeInfo()->NameAtom();
|
||||
// Create a new nested list of correct type.
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(
|
||||
MOZ_KnownLive(*containerName), atCurNode);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -5042,7 +5048,8 @@ nsresult HTMLEditRules::IndentAroundSelectionWithCSS() {
|
|||
}
|
||||
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
atCurNode);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -5159,7 +5166,8 @@ nsresult HTMLEditRules::IndentAroundSelectionWithHTML() {
|
|||
|
||||
// Make sure we can put a block here.
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::blockquote,
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::blockquote,
|
||||
atStartOfSelection);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -5275,7 +5283,8 @@ nsresult HTMLEditRules::IndentAroundSelectionWithHTML() {
|
|||
atCurNode.GetContainer()->NodeInfo()->NameAtom();
|
||||
// Create a new nested list of correct type.
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(
|
||||
MOZ_KnownLive(*containerName), atCurNode);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -5339,7 +5348,8 @@ nsresult HTMLEditRules::IndentAroundSelectionWithHTML() {
|
|||
atListItem.GetContainer()->NodeInfo()->NameAtom();
|
||||
// Create a new nested list of correct type.
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(
|
||||
MOZ_KnownLive(*containerName), atListItem);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -5386,8 +5396,9 @@ nsresult HTMLEditRules::IndentAroundSelectionWithHTML() {
|
|||
}
|
||||
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::blockquote,
|
||||
atCurNode);
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(
|
||||
*nsGkAtoms::blockquote, atCurNode);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
}
|
||||
|
@ -6210,7 +6221,8 @@ nsresult HTMLEditRules::AlignContentsAtSelection(const nsAString& aAlignType) {
|
|||
}
|
||||
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
atStartOfSelection);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -6381,7 +6393,8 @@ nsresult HTMLEditRules::AlignContentsAtSelection(const nsAString& aAlignType) {
|
|||
}
|
||||
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
atCurNode);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -8730,8 +8743,9 @@ nsresult HTMLEditRules::MakeBlockquote(
|
|||
// If no curBlock, make one
|
||||
if (!curBlock) {
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::blockquote,
|
||||
EditorDOMPoint(curNode));
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(
|
||||
*nsGkAtoms::blockquote, EditorDOMPoint(curNode));
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
}
|
||||
|
@ -8962,7 +8976,9 @@ nsresult HTMLEditRules::ApplyBlockStyle(
|
|||
|
||||
// Make sure we can put a block here
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(aBlockTag, atCurNode);
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(aBlockTag,
|
||||
atCurNode);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
}
|
||||
|
@ -9015,7 +9031,9 @@ nsresult HTMLEditRules::ApplyBlockStyle(
|
|||
// The break is the first (or even only) node we encountered. Create a
|
||||
// block for it.
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(aBlockTag, atCurNode);
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(aBlockTag,
|
||||
atCurNode);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
}
|
||||
|
@ -9074,7 +9092,9 @@ nsresult HTMLEditRules::ApplyBlockStyle(
|
|||
// If no curBlock, make one
|
||||
if (!curBlock) {
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(aBlockTag, atCurNode);
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(aBlockTag,
|
||||
atCurNode);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
}
|
||||
|
@ -9134,16 +9154,16 @@ nsresult HTMLEditRules::ApplyBlockStyle(
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
SplitNodeResult HTMLEditRules::MaybeSplitAncestorsForInsertWithTransaction(
|
||||
SplitNodeResult HTMLEditor::MaybeSplitAncestorsForInsertWithTransaction(
|
||||
nsAtom& aTag, const EditorDOMPoint& aStartOfDeepestRightNode) {
|
||||
MOZ_ASSERT(IsEditorDataAvailable());
|
||||
MOZ_ASSERT(IsEditActionDataAvailable());
|
||||
|
||||
if (NS_WARN_IF(!aStartOfDeepestRightNode.IsSet())) {
|
||||
return SplitNodeResult(NS_ERROR_INVALID_ARG);
|
||||
}
|
||||
MOZ_ASSERT(aStartOfDeepestRightNode.IsSetAndValid());
|
||||
|
||||
RefPtr<Element> host = HTMLEditorRef().GetActiveEditingHost();
|
||||
RefPtr<Element> host = GetActiveEditingHost();
|
||||
if (NS_WARN_IF(!host)) {
|
||||
return SplitNodeResult(NS_ERROR_FAILURE);
|
||||
}
|
||||
|
@ -9165,7 +9185,7 @@ SplitNodeResult HTMLEditRules::MaybeSplitAncestorsForInsertWithTransaction(
|
|||
return SplitNodeResult(NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
if (HTMLEditorRef().CanContainTag(*pointToInsert.GetContainer(), aTag)) {
|
||||
if (CanContainTag(*pointToInsert.GetContainer(), aTag)) {
|
||||
// Found an ancestor node which can contain the element.
|
||||
break;
|
||||
}
|
||||
|
@ -9180,13 +9200,10 @@ SplitNodeResult HTMLEditRules::MaybeSplitAncestorsForInsertWithTransaction(
|
|||
return SplitNodeResult(aStartOfDeepestRightNode);
|
||||
}
|
||||
|
||||
SplitNodeResult splitNodeResult =
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.SplitNodeDeepWithTransaction(
|
||||
MOZ_KnownLive(*pointToInsert.GetChild()),
|
||||
aStartOfDeepestRightNode,
|
||||
SplitNodeResult splitNodeResult = SplitNodeDeepWithTransaction(
|
||||
MOZ_KnownLive(*pointToInsert.GetChild()), aStartOfDeepestRightNode,
|
||||
SplitAtEdges::eAllowToCreateEmptyContainer);
|
||||
if (NS_WARN_IF(!CanHandleEditAction())) {
|
||||
if (NS_WARN_IF(Destroyed())) {
|
||||
return SplitNodeResult(NS_ERROR_EDITOR_DESTROYED);
|
||||
}
|
||||
NS_WARNING_ASSERTION(splitNodeResult.Succeeded(),
|
||||
|
@ -10868,7 +10885,8 @@ nsresult HTMLEditRules::PrepareToMakeElementAbsolutePosition(
|
|||
|
||||
// Make sure we can put a block here.
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
atStartOfSelection);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -10943,7 +10961,8 @@ nsresult HTMLEditRules::PrepareToMakeElementAbsolutePosition(
|
|||
atCurNode.GetContainer()->NodeInfo()->NameAtom();
|
||||
// Create a new nested list of correct type.
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(
|
||||
MOZ_KnownLive(*containerName), atCurNode);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -11015,7 +11034,8 @@ nsresult HTMLEditRules::PrepareToMakeElementAbsolutePosition(
|
|||
atListItem.GetContainer()->NodeInfo()->NameAtom();
|
||||
// Create a new nested list of correct type
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(
|
||||
MOZ_KnownLive(*containerName), atListItem);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
@ -11067,7 +11087,8 @@ nsresult HTMLEditRules::PrepareToMakeElementAbsolutePosition(
|
|||
continue;
|
||||
}
|
||||
SplitNodeResult splitNodeResult =
|
||||
MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
MOZ_KnownLive(HTMLEditorRef())
|
||||
.MaybeSplitAncestorsForInsertWithTransaction(*nsGkAtoms::div,
|
||||
atCurNode);
|
||||
if (NS_WARN_IF(splitNodeResult.Failed())) {
|
||||
return splitNodeResult.Rv();
|
||||
|
|
|
@ -835,27 +835,6 @@ class HTMLEditRules : public TextEditRules {
|
|||
MOZ_MUST_USE nsresult
|
||||
MakeBlockquote(nsTArray<OwningNonNull<nsINode>>& aNodeArray);
|
||||
|
||||
/**
|
||||
* MaybeSplitAncestorsForInsertWithTransaction() does nothing if container of
|
||||
* aStartOfDeepestRightNode can have an element whose tag name is aTag.
|
||||
* Otherwise, looks for an ancestor node which is or is in active editing
|
||||
* host and can have an element whose name is aTag. If there is such
|
||||
* ancestor, its descendants are split.
|
||||
*
|
||||
* Note that this may create empty elements while splitting ancestors.
|
||||
*
|
||||
* @param aTag The name of element to be inserted
|
||||
* after calling this method.
|
||||
* @param aStartOfDeepestRightNode The start point of deepest right node.
|
||||
* This point must be descendant of
|
||||
* active editing host.
|
||||
* @return When succeeded, SplitPoint() returns
|
||||
* the point to insert the element.
|
||||
*/
|
||||
MOZ_CAN_RUN_SCRIPT MOZ_MUST_USE SplitNodeResult
|
||||
MaybeSplitAncestorsForInsertWithTransaction(
|
||||
nsAtom& aTag, const EditorDOMPoint& aStartOfDeepestRightNode);
|
||||
|
||||
/**
|
||||
* JoinNearestEditableNodesWithTransaction() joins two editable nodes which
|
||||
* are themselves or the nearest editable node of aLeftNode and aRightNode.
|
||||
|
|
|
@ -1595,6 +1595,27 @@ class HTMLEditor final : public TextEditor,
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* MaybeSplitAncestorsForInsertWithTransaction() does nothing if container of
|
||||
* aStartOfDeepestRightNode can have an element whose tag name is aTag.
|
||||
* Otherwise, looks for an ancestor node which is or is in active editing
|
||||
* host and can have an element whose name is aTag. If there is such
|
||||
* ancestor, its descendants are split.
|
||||
*
|
||||
* Note that this may create empty elements while splitting ancestors.
|
||||
*
|
||||
* @param aTag The name of element to be inserted
|
||||
* after calling this method.
|
||||
* @param aStartOfDeepestRightNode The start point of deepest right node.
|
||||
* This point must be descendant of
|
||||
* active editing host.
|
||||
* @return When succeeded, SplitPoint() returns
|
||||
* the point to insert the element.
|
||||
*/
|
||||
MOZ_CAN_RUN_SCRIPT MOZ_MUST_USE SplitNodeResult
|
||||
MaybeSplitAncestorsForInsertWithTransaction(
|
||||
nsAtom& aTag, const EditorDOMPoint& aStartOfDeepestRightNode);
|
||||
|
||||
protected: // Called by helper classes.
|
||||
virtual void OnStartToHandleTopLevelEditSubAction(
|
||||
EditSubAction aEditSubAction, nsIEditor::EDirection aDirection) override;
|
||||
|
|
Загрузка…
Ссылка в новой задаче