mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-29 20:07:30 +09:00
parent
9220996e92
commit
9d8343e19c
16 changed files with 330 additions and 205 deletions
|
|
@ -1422,16 +1422,15 @@ HTMLEditRules::WillInsertText(EditAction aAction,
|
|||
if (!mDocChangeRange) {
|
||||
mDocChangeRange = new nsRange(selNode);
|
||||
}
|
||||
rv = mDocChangeRange->SetStart(selNode, selOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (curNode) {
|
||||
rv = mDocChangeRange->SetEnd(curNode, curOffset);
|
||||
rv = mDocChangeRange->SetStartAndEnd(selNode, selOffset,
|
||||
curNode, curOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
} else {
|
||||
rv = mDocChangeRange->SetEnd(selNode, selOffset);
|
||||
rv = mDocChangeRange->CollapseTo(selNode, selOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
|
@ -5093,10 +5092,11 @@ HTMLEditRules::ExpandSelectionForDeletion(Selection& aSelection)
|
|||
|
||||
// Create a range that represents expanded selection
|
||||
RefPtr<nsRange> range = new nsRange(selStartNode);
|
||||
nsresult rv = range->SetStart(selStartNode, selStartOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = range->SetEnd(selEndNode, selEndOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsresult rv = range->SetStartAndEnd(selStartNode, selStartOffset,
|
||||
selEndNode, selEndOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
// Check if block is entirely inside range
|
||||
if (brBlock) {
|
||||
|
|
@ -5558,26 +5558,27 @@ HTMLEditRules::PromoteRange(nsRange& aRange,
|
|||
// This is tricky. The basic idea is to push out the range endpoints to
|
||||
// truly enclose the blocks that we will affect.
|
||||
|
||||
nsCOMPtr<nsIDOMNode> opStartNode;
|
||||
nsCOMPtr<nsIDOMNode> opEndNode;
|
||||
nsCOMPtr<nsIDOMNode> opDOMStartNode;
|
||||
nsCOMPtr<nsIDOMNode> opDOMEndNode;
|
||||
int32_t opStartOffset, opEndOffset;
|
||||
|
||||
GetPromotedPoint(kStart, GetAsDOMNode(startNode), startOffset,
|
||||
aOperationType, address_of(opStartNode), &opStartOffset);
|
||||
aOperationType, address_of(opDOMStartNode), &opStartOffset);
|
||||
GetPromotedPoint(kEnd, GetAsDOMNode(endNode), endOffset, aOperationType,
|
||||
address_of(opEndNode), &opEndOffset);
|
||||
address_of(opDOMEndNode), &opEndOffset);
|
||||
|
||||
// Make sure that the new range ends up to be in the editable section.
|
||||
if (!htmlEditor->IsDescendantOfEditorRoot(
|
||||
EditorBase::GetNodeAtRangeOffsetPoint(opStartNode, opStartOffset)) ||
|
||||
EditorBase::GetNodeAtRangeOffsetPoint(opDOMStartNode, opStartOffset)) ||
|
||||
!htmlEditor->IsDescendantOfEditorRoot(
|
||||
EditorBase::GetNodeAtRangeOffsetPoint(opEndNode, opEndOffset - 1))) {
|
||||
EditorBase::GetNodeAtRangeOffsetPoint(opDOMEndNode, opEndOffset - 1))) {
|
||||
return;
|
||||
}
|
||||
|
||||
DebugOnly<nsresult> rv = aRange.SetStart(opStartNode, opStartOffset);
|
||||
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
||||
rv = aRange.SetEnd(opEndNode, opEndOffset);
|
||||
nsCOMPtr<nsINode> opStartNode = do_QueryInterface(opDOMStartNode);
|
||||
nsCOMPtr<nsINode> opEndNode = do_QueryInterface(opDOMEndNode);
|
||||
DebugOnly<nsresult> rv =
|
||||
aRange.SetStartAndEnd(opStartNode, opStartOffset, opEndNode, opEndOffset);
|
||||
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
||||
}
|
||||
|
||||
|
|
@ -7196,10 +7197,10 @@ HTMLEditRules::PinSelectionToNewBlock(Selection* aSelection)
|
|||
nsCOMPtr<nsINode> node = do_QueryInterface(selNode);
|
||||
NS_ENSURE_STATE(node);
|
||||
RefPtr<nsRange> range = new nsRange(node);
|
||||
rv = range->SetStart(selNode, selOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = range->SetEnd(selNode, selOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = range->CollapseTo(node, selOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
bool nodeBefore, nodeAfter;
|
||||
rv = nsRange::CompareNodeToRange(mNewBlock, range, &nodeBefore, &nodeAfter);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
|
@ -8095,10 +8096,13 @@ HTMLEditRules::DidSplitNode(nsIDOMNode* aExistingRightNode,
|
|||
if (!mListenerEnabled) {
|
||||
return NS_OK;
|
||||
}
|
||||
nsresult rv = mUtilRange->SetStart(aNewLeftNode, 0);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = mUtilRange->SetEnd(aExistingRightNode, 0);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsINode> newLeftNode = do_QueryInterface(aNewLeftNode);
|
||||
nsCOMPtr<nsINode> existingRightNode = do_QueryInterface(aExistingRightNode);
|
||||
nsresult rv = mUtilRange->SetStartAndEnd(newLeftNode, 0,
|
||||
existingRightNode, 0);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
return UpdateDocChangeRange(mUtilRange);
|
||||
}
|
||||
|
||||
|
|
@ -8123,11 +8127,12 @@ HTMLEditRules::DidJoinNodes(nsIDOMNode* aLeftNode,
|
|||
if (!mListenerEnabled) {
|
||||
return NS_OK;
|
||||
}
|
||||
nsCOMPtr<nsINode> rightNode = do_QueryInterface(aRightNode);
|
||||
// assumption that Join keeps the righthand node
|
||||
nsresult rv = mUtilRange->SetStart(aRightNode, mJoinOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = mUtilRange->SetEnd(aRightNode, mJoinOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsresult rv = mUtilRange->CollapseTo(rightNode, mJoinOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
return UpdateDocChangeRange(mUtilRange);
|
||||
}
|
||||
|
||||
|
|
@ -8149,11 +8154,12 @@ HTMLEditRules::DidInsertText(nsIDOMCharacterData* aTextNode,
|
|||
return NS_OK;
|
||||
}
|
||||
int32_t length = aString.Length();
|
||||
nsCOMPtr<nsIDOMNode> theNode = do_QueryInterface(aTextNode);
|
||||
nsresult rv = mUtilRange->SetStart(theNode, aOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = mUtilRange->SetEnd(theNode, aOffset+length);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsINode> theNode = do_QueryInterface(aTextNode);
|
||||
nsresult rv = mUtilRange->SetStartAndEnd(theNode, aOffset,
|
||||
theNode, aOffset + length);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
return UpdateDocChangeRange(mUtilRange);
|
||||
}
|
||||
|
||||
|
|
@ -8174,11 +8180,11 @@ HTMLEditRules::DidDeleteText(nsIDOMCharacterData* aTextNode,
|
|||
if (!mListenerEnabled) {
|
||||
return NS_OK;
|
||||
}
|
||||
nsCOMPtr<nsIDOMNode> theNode = do_QueryInterface(aTextNode);
|
||||
nsresult rv = mUtilRange->SetStart(theNode, aOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = mUtilRange->SetEnd(theNode, aOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsINode> theNode = do_QueryInterface(aTextNode);
|
||||
nsresult rv = mUtilRange->CollapseTo(theNode, aOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
return UpdateDocChangeRange(mUtilRange);
|
||||
}
|
||||
|
||||
|
|
@ -8193,22 +8199,27 @@ HTMLEditRules::WillDeleteSelection(nsISelection* aSelection)
|
|||
}
|
||||
RefPtr<Selection> selection = aSelection->AsSelection();
|
||||
// get the (collapsed) selection location
|
||||
nsCOMPtr<nsIDOMNode> selNode;
|
||||
int32_t selOffset;
|
||||
|
||||
nsCOMPtr<nsINode> startNode;
|
||||
int32_t startOffset;
|
||||
NS_ENSURE_STATE(mHTMLEditor);
|
||||
nsresult rv =
|
||||
mHTMLEditor->GetStartNodeAndOffset(selection,
|
||||
getter_AddRefs(selNode), &selOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = mUtilRange->SetStart(selNode, selOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
getter_AddRefs(startNode), &startOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
nsCOMPtr<nsINode> endNode;
|
||||
int32_t endOffset;
|
||||
NS_ENSURE_STATE(mHTMLEditor);
|
||||
rv = mHTMLEditor->GetEndNodeAndOffset(selection,
|
||||
getter_AddRefs(selNode), &selOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = mUtilRange->SetEnd(selNode, selOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
getter_AddRefs(endNode), &endOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
rv = mUtilRange->SetStartAndEnd(startNode, startOffset, endNode, endOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
return UpdateDocChangeRange(mUtilRange);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3284,8 +3284,8 @@ HTMLEditor::DoContentInserted(nsIDocument* aDocument,
|
|||
sibling = sibling->GetNextSibling();
|
||||
}
|
||||
}
|
||||
nsresult rv = range->Set(aContainer, aIndexInContainer,
|
||||
aContainer, endIndex);
|
||||
nsresult rv = range->SetStartAndEnd(aContainer, aIndexInContainer,
|
||||
aContainer, endIndex);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
mInlineSpellChecker->SpellCheckRange(range);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -541,9 +541,11 @@ HTMLEditor::SplitStyleAboveRange(nsRange* inRange,
|
|||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// reset the range
|
||||
rv = inRange->SetStart(startNode, startOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return inRange->SetEnd(endNode, endOffset);
|
||||
rv = inRange->SetStartAndEnd(startNode, startOffset, endNode, endOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
|
@ -885,10 +887,11 @@ HTMLEditor::PromoteRangeIfStartsOrEndsInNamedAnchor(nsRange& aRange)
|
|||
endOffset = endNode ? endNode->IndexOf(parent) + 1 : 0;
|
||||
}
|
||||
|
||||
nsresult rv = aRange.SetStart(startNode, startOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = aRange.SetEnd(endNode, endOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsresult rv = aRange.SetStartAndEnd(startNode, startOffset,
|
||||
endNode, endOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
@ -918,10 +921,11 @@ HTMLEditor::PromoteInlineRange(nsRange& aRange)
|
|||
endNode = parent;
|
||||
}
|
||||
|
||||
nsresult rv = aRange.SetStart(startNode, startOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = aRange.SetEnd(endNode, endOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsresult rv = aRange.SetStartAndEnd(startNode, startOffset,
|
||||
endNode, endOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -686,7 +686,8 @@ already_AddRefed<nsRange>
|
|||
RangeItem::GetRange()
|
||||
{
|
||||
RefPtr<nsRange> range = new nsRange(startNode);
|
||||
if (NS_FAILED(range->Set(startNode, startOffset, endNode, endOffset))) {
|
||||
if (NS_FAILED(range->SetStartAndEnd(startNode, startOffset,
|
||||
endNode, endOffset))) {
|
||||
return nullptr;
|
||||
}
|
||||
return range.forget();
|
||||
|
|
|
|||
|
|
@ -1315,7 +1315,7 @@ WSRunObject::DeleteChars(nsINode* aStartNode,
|
|||
if (!range) {
|
||||
range = new nsRange(aStartNode);
|
||||
nsresult rv =
|
||||
range->Set(aStartNode, aStartOffset, aEndNode, aEndOffset);
|
||||
range->SetStartAndEnd(aStartNode, aStartOffset, aEndNode, aEndOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
bool nodeBefore, nodeAfter;
|
||||
|
|
|
|||
|
|
@ -406,11 +406,13 @@ nsTextServicesDocument::ExpandRangeToWordBoundaries(nsIDOMRange *aRange)
|
|||
|
||||
// Now adjust the range so that it uses our new
|
||||
// end points.
|
||||
|
||||
rv = range->SetEnd(rngEndNode, rngEndOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return range->SetStart(rngStartNode, rngStartOffset);
|
||||
nsCOMPtr<nsINode> startNode = do_QueryInterface(rngStartNode);
|
||||
nsCOMPtr<nsINode> endNode = do_QueryInterface(rngEndNode);
|
||||
rv = range->SetStartAndEnd(startNode, rngStartOffset, endNode, rngEndOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue