mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-13 18:27:35 +00:00
0440ea1f97
The out params mean the last collapsed selection range's result (although, the meaning is odd and offset and length are not overwritten when there is another collapsed range and it causes `DeleteNodeTransaction`). Additionally, when and only when `DeleteNodeTransaction` and `DeleteTextTransaction` are added to the `EditAggregationTransaction` created by `CreateTransactionForSelection()`. Therefore, same result can be looked for from its only caller, `DeleteSelectionWithTransaction()`. Note that this makes the method slower if there are too many selection ranges, but such case must be rare because: 1. We can assume that users rarely use multiple selection ranges for removing multiple ranges of content except table. 2. Multiple selection is supported only by Gecko. Therefore, web apps must not use multiple selection for this purpose. So, it must be okay to use this slower approach for making the methods simpler. If it'd become damage to some benchmarks, let's create faster access to get transaction type. Depends on D72293 Differential Revision: https://phabricator.services.mozilla.com/D72294
95 lines
3.2 KiB
C++
95 lines
3.2 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef DeleteTextTransaction_h
|
|
#define DeleteTextTransaction_h
|
|
|
|
#include "mozilla/EditTransactionBase.h"
|
|
#include "mozilla/dom/Text.h"
|
|
#include "nsCOMPtr.h"
|
|
#include "nsCycleCollectionParticipant.h"
|
|
#include "nsID.h"
|
|
#include "nsString.h"
|
|
#include "nscore.h"
|
|
|
|
namespace mozilla {
|
|
|
|
class EditorBase;
|
|
class RangeUpdater;
|
|
|
|
/**
|
|
* A transaction that removes text from a content node.
|
|
*/
|
|
class DeleteTextTransaction final : public EditTransactionBase {
|
|
protected:
|
|
DeleteTextTransaction(EditorBase& aEditorBase, dom::Text& aTextNode,
|
|
uint32_t aOffset, uint32_t aLengthToDelete);
|
|
|
|
public:
|
|
/**
|
|
* Creates a delete text transaction to remove given range. This returns
|
|
* nullptr if it cannot modify the text node.
|
|
*
|
|
* @param aEditorBase The provider of basic editing operations.
|
|
* @param aTextNode The content node to remove text from.
|
|
* @param aOffset The location in aElement to begin the deletion.
|
|
* @param aLenthToDelete The length to delete.
|
|
*/
|
|
static already_AddRefed<DeleteTextTransaction> MaybeCreate(
|
|
EditorBase& aEditorBase, dom::Text& aTextNode, uint32_t aOffset,
|
|
uint32_t aLengthToDelete);
|
|
|
|
/**
|
|
* Creates a delete text transaction to remove a previous or next character.
|
|
* Those methods MAY return nullptr.
|
|
*
|
|
* @param aEditorBase The provider of basic editing operations.
|
|
* @param aTextNode The content node to remove text from.
|
|
* @param aOffset The location in aElement to begin the deletion.
|
|
*/
|
|
static already_AddRefed<DeleteTextTransaction>
|
|
MaybeCreateForPreviousCharacter(EditorBase& aEditorBase, dom::Text& aTextNode,
|
|
uint32_t aOffset);
|
|
static already_AddRefed<DeleteTextTransaction> MaybeCreateForNextCharacter(
|
|
EditorBase& aEditorBase, dom::Text& aTextNode, uint32_t aOffset);
|
|
|
|
/**
|
|
* CanDoIt() returns true if there are enough members and can modify the
|
|
* text. Otherwise, false.
|
|
*/
|
|
bool CanDoIt() const;
|
|
|
|
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(DeleteTextTransaction,
|
|
EditTransactionBase)
|
|
NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr) override;
|
|
|
|
NS_DECL_EDITTRANSACTIONBASE
|
|
NS_DECL_EDITTRANSACTIONBASE_GETASMETHODS_OVERRIDE(DeleteTextTransaction)
|
|
|
|
dom::Text* GetText() const { return mTextNode; }
|
|
uint32_t Offset() const { return mOffset; }
|
|
uint32_t LengthToDelete() const { return mLengthToDelete; }
|
|
|
|
protected:
|
|
// The provider of basic editing operations.
|
|
RefPtr<EditorBase> mEditorBase;
|
|
|
|
// The CharacterData node to operate upon.
|
|
RefPtr<dom::Text> mTextNode;
|
|
|
|
// The offset into mTextNode where the deletion is to take place.
|
|
uint32_t mOffset;
|
|
|
|
// The length to delete.
|
|
uint32_t mLengthToDelete;
|
|
|
|
// The text that was deleted.
|
|
nsString mDeletedText;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif // #ifndef DeleteTextTransaction_h
|