gecko-dev/editor/libeditor/EditorCommands.h
Aryeh Gregor f6c34fc75b Bug 748308 - Support insertParagraph and insertLineBreak per spec/Blink/WebKit; r=masayuki
Previously we supported insertParagraph as a synonym for formatBlock
"p", which is both useless and incompatible with all other browsers.
Edge's behavior doesn't look useful and looks redundant with insertHTML
(although it matches the name nicely, probably because they invented
the command).  Blink/WebKit treat it the same as hitting Enter, which is
useful for cross-browser testing until we get synthesizeKey() in wpt.

At the same time, I added insertLineBreak, which Blink/WebKit support
with the same functionality as pressing Shift-Enter.

The new event.html failures are spurious -- we used to pass by mistake
because we didn't support insertlinebreak at all.  insertlinebreak.html
has only new passes, no new failures, although it's not clear on the
diff.

MozReview-Commit-ID: 16oPcxXwGcj
2016-08-23 14:13:17 +03:00

107 lines
3.7 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 EditorCommands_h_
#define EditorCommands_h_
#include "nsIControllerCommand.h"
#include "nsISupportsImpl.h"
#include "nscore.h"
class nsICommandParams;
class nsISupports;
namespace mozilla {
/**
* This is a virtual base class for commands registered with the editor
* controller. Note that such commands can be shared by more than on editor
* instance, so MUST be stateless. Any state must be stored via the refCon
* (an nsIEditor).
*/
class EditorCommandBase : public nsIControllerCommand
{
public:
EditorCommandBase();
NS_DECL_ISUPPORTS
NS_IMETHOD IsCommandEnabled(const char* aCommandName,
nsISupports* aCommandRefCon,
bool* aIsEnabled) override = 0;
NS_IMETHOD DoCommand(const char* aCommandName,
nsISupports* aCommandRefCon) override = 0;
protected:
virtual ~EditorCommandBase() {}
};
#define NS_DECL_EDITOR_COMMAND(_cmd) \
class _cmd final : public EditorCommandBase \
{ \
public: \
NS_IMETHOD IsCommandEnabled(const char* aCommandName, \
nsISupports* aCommandRefCon, \
bool* aIsEnabled) override; \
NS_IMETHOD DoCommand(const char* aCommandName, \
nsISupports* aCommandRefCon) override; \
NS_IMETHOD DoCommandParams(const char* aCommandName, \
nsICommandParams* aParams, \
nsISupports* aCommandRefCon) override; \
NS_IMETHOD GetCommandStateParams(const char* aCommandName, \
nsICommandParams* aParams, \
nsISupports* aCommandRefCon) override; \
};
// basic editor commands
NS_DECL_EDITOR_COMMAND(UndoCommand)
NS_DECL_EDITOR_COMMAND(RedoCommand)
NS_DECL_EDITOR_COMMAND(ClearUndoCommand)
NS_DECL_EDITOR_COMMAND(CutCommand)
NS_DECL_EDITOR_COMMAND(CutOrDeleteCommand)
NS_DECL_EDITOR_COMMAND(CopyCommand)
NS_DECL_EDITOR_COMMAND(CopyOrDeleteCommand)
NS_DECL_EDITOR_COMMAND(CopyAndCollapseToEndCommand)
NS_DECL_EDITOR_COMMAND(PasteCommand)
NS_DECL_EDITOR_COMMAND(PasteTransferableCommand)
NS_DECL_EDITOR_COMMAND(SwitchTextDirectionCommand)
NS_DECL_EDITOR_COMMAND(DeleteCommand)
NS_DECL_EDITOR_COMMAND(SelectAllCommand)
NS_DECL_EDITOR_COMMAND(SelectionMoveCommands)
// Insert content commands
NS_DECL_EDITOR_COMMAND(InsertPlaintextCommand)
NS_DECL_EDITOR_COMMAND(InsertParagraphCommand)
NS_DECL_EDITOR_COMMAND(InsertLineBreakCommand)
NS_DECL_EDITOR_COMMAND(PasteQuotationCommand)
#if 0
// template for new command
NS_IMETHODIMP
FooCommand::IsCommandEnabled(const char* aCommandName,
nsISupports* aCommandRefCon,
bool* aIsEnabled)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
FooCommand::DoCommand(const char* aCommandName,
const nsAString& aCommandParams,
nsISupports* aCommandRefCon)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
#endif
} // namespace mozilla
#endif // #ifndef EditorCommands_h_