UNPKG

wed

Version:

Wed is a schema-aware editor for XML documents.

115 lines (114 loc) 4.34 kB
/** * Editing actions. * @author Louis-Dominique Dubeau * @license MPL 2.0 * @copyright Mangalam Research Center for Buddhist Languages */ import { Button } from "./gui/button"; import { EditorAPI } from "./mode-api"; export interface EventWithData<Data> extends Event { data: Data; } /** * Actions model "things the user can do." These can be contextual menu items, * menu items, buttons, keybindings, etc. The base class is always enabled but * derived classes can set their own enabled state depending on whatever * conditions they choose. */ export declare abstract class Action<Data> { readonly editor: EditorAPI; protected readonly desc: string; protected readonly abbreviatedDesc: string | undefined; protected readonly icon: string; readonly needsInput: boolean; readonly boundHandler: (this: Action<Data>, ev: Event) => void; readonly boundTerminalHandler: (this: Action<Data>, ev: Event) => boolean; /** * @param editor The editor to which this action belongs. * * @param desc A simple string description of the action. * * @param abbreviatedDesc An abbreviated description, suitable to put into a * button, for instance. * * @param icon HTML code that represents an icon for this action. This can be * a simple string or something more complex. * * @param needsInput Indicates whether this action needs input from the * user. For instance, an action which brings up a modal dialog to ask * something of the user must have this parameter set to ``true``. It is * important to record whether an action needs input because, to take one * example, the ``autoinsert`` logic will try to insert automatically any * element it can. However, doing this for elements that need user input will * just confuse the user (or could cause a crash). Therefore, it is important * that the insertion operations for such elements be marked with * ``needsInput`` set to ``true`` so that the ``autoinsert`` logic backs off * from trying to insert these elements. */ constructor(editor: EditorAPI, desc: string, abbreviatedDesc: string | undefined, icon?: string, needsInput?: boolean); /** * @param data Arbitrary data. What data must be passed is * determined by the action. */ abstract execute(data: Data): void; /** * An event handler. By default just calls [[execute]]. You probably want to * use [[boundHandler]] rather than rebind this method. This handler always * returns ``undefined`` and calls ``preventDefault()`` on the event passed to * it. * * @param ev The DOM event. */ eventHandler(ev: EventWithData<Data>): void; /** * An event handler. By default just calls [[eventHandler]]. You probably want * to use [[boundTerminalHandler]] rather than rebind this method. This * handler always returns false and calls ``preventDefault()`` and * ``stopPropagation`` on the event passed to it. * * @param ev The DOM event. * * @returns False. */ terminalEventHandler(ev: EventWithData<Data>): boolean; /** * Gets a description for this action. * * @returns A description for the action. */ getDescription(): string; /** * Gets a description for this action, contextualized by the data passed. * * @param data The same data that would be passed to [[execute]]. * * @returns The description. */ getDescriptionFor(data: Data): string; /** * Gets the abbreviated description for this action. * * @returns The abbreviated description. */ getAbbreviatedDescription(): string | undefined; /** * Gets the icon. * * @returns The icon. This is an HTML string. */ getIcon(): string; /** * This method returns the icon together with the description for the * data passed as parameter. * * @param data The same data that would be passed to [[execute]]. * * @returns The icon and the description, combined for presentation. */ getLabelFor(data: Data): string; /** * Converts this action to a string. By default calls [[getDescription]]. */ toString(): string; makeButton(data?: Data): Button; }