wed
Version:
Wed is a schema-aware editor for XML documents.
174 lines (173 loc) • 6.5 kB
TypeScript
/// <reference types="jquery" />
/**
* Editing menu manager.
* @author Louis-Dominique Dubeau
* @license MPL 2.0
* @copyright Mangalam Research Center for Buddhist Languages
*/
import { Action } from "../action";
import { Editor } from "../editor";
import { ActionContextMenu, Item } from "./action-context-menu";
import { TypeaheadPopup } from "./typeahead-popup";
/**
* Manages the editing menus for a specific editing view. An "editing menu" is a
* menu that appears in the editing pane. The context menu and completion menu
* are editing menus.
*
* Only one editing menu may be shown at any given time.
*/
export declare class EditingMenuManager {
private readonly editor;
private readonly caretManager;
private readonly guiRoot;
private readonly dataRoot;
private currentDropdown;
private readonly modeTree;
private readonly doc;
private currentTypeahead;
/**
* @param editor The editor for which the manager is created.
*/
constructor(editor: Editor);
/**
* This is the default menu handler called when the user right-clicks in the
* contents of a document or uses the keyboard shortcut.
*
* The menu handler which is invoked when a user right-clicks on an element
* start or end label is defined by the decorator that the mode is using.
*/
contextMenuHandler(e: JQueryEventObject): boolean;
/**
* Dismiss the menu currently shown. If there is no menu currently shown, does
* nothing.
*/
dismiss(): void;
/**
* Compute an appropriate position for a context menu, and display it. This is
* a convenience function that essentially combines [[computeMenuPosition]]
* and [[displayContextMenu]].
*
* @param cmClass See [[displayContextMenu]].
*
* @param items See [[displayContextMenu]].
*
* @param readonly See [[displayContextMenu]].
*
* @param e See [[computeMenuPosition]].
*
* @param bottom See [[computeMenuPosition]].
*/
setupContextMenu(cmClass: typeof ActionContextMenu, items: Item[], readonly: boolean, e: JQueryEventObject | undefined, bottom?: boolean): void;
/**
* Display a context menu.
*
* @param cmClass The class to use to create the menu.
*
* @param x The position of the menu.
*
* @param y The position of the menu.
*
* @param items The menu items to show.
*
* @param readonly If true, don't include in the menu any operation that
* would trigger a ``Transformation``.
*/
displayContextMenu(cmClass: typeof ActionContextMenu, x: number, y: number, items: Item[], readonly: boolean): void;
private getMenuItemsForAttribute();
private getMenuItemsForElement(node, offset, wrap);
/**
* Make the menu items that should appear in all contextual menus.
*
* @param dataNode The element for which we are creating the menu.
*
* @returns Menu items.
*/
makeCommonItems(dataNode: Node): Item[];
/**
* Make a standardized menu item for a specific action. This method formats
* the menu item and sets an even handler appropriate to invoke the action's
* event handler.
*
* @param action The action for which we make a menu item.
*
* @param data The data that accompanies the action.
*
* @param start This parameter determines whether we are creating an item for
* a start label (``true``) an end label (``false``) or
* something which is neither a start or end label
* (``undefined``).
*
* @returns A HTML element which is fit to serve as a menu item.
*/
makeMenuItemForAction<D>(action: Action<D>, data: D, start?: boolean): HTMLElement;
/**
* Makes an HTML link to open the documentation of an element.
*
* @param docUrl The URL to the documentation to open.
*
* @returns A ``<a>`` element that links to the documentation.
*/
makeDocumentationMenuItem(docURL: string): HTMLElement;
private getPossibleAttributeValues();
setupCompletionMenu(): void;
setupReplacementMenu(): void;
/**
* Compute an appropriate position for a typeahead popup, and display it. This
* is a convenience function that essentially combines [[computeMenuPosition]]
* and [[displayTypeaheadPopup]].
*
* @param width See [[displayTypeaheadPopup]].
*
* @param placeholder See [[displayTypeaheadPopup]].
*
* @param options See [[displayTypeaheadPopup]].
*
* @param dismissCallback See [[displayTypeaheadPopup]].
*
* @param e See [[computeMenuPosition]].
*
* @param bottom See [[computeMenuPosition]].
*
* @returns The popup that was created.
*/
setupTypeaheadPopup(width: number, placeholder: string, options: any, dismissCallback: (obj?: any) => void, e: JQueryEventObject | undefined, bottom?: boolean): TypeaheadPopup;
/**
* Brings up a typeahead popup.
*
* @param x The position of the popup.
*
* @param y The position of the popup.
*
* @param width The width of the popup.
*
* @param placeholder Placeholder text to put in the input field.
*
* @param options Options for Twitter Typeahead.
*
* @param dismissCallback The callback to be called upon dismissal. It will be
* called with the object that was selected, if any.
*
* @returns The popup that was created.
*/
displayTypeaheadPopup(x: number, y: number, width: number, placeholder: string, options: any, dismissCallback: (obj?: {
value: string;
}) => void): TypeaheadPopup;
/**
* Computes where a menu should show up, depending on the event that triggered
* it.
*
* @param e The event that triggered the menu. If no event is passed, it is
* assumed that the menu was not triggered by a mouse event.
*
* @param bottom Only used when the event was not triggered by a mouse event
* (``e === undefined``). If ``bottom`` is true, use the bottom of the DOM
* entity used to compute the ``left`` coordinate. Otherwise, use its middle
* to determine the ``left`` coordinate.
*
* @returns The top and left coordinates where the menu should appear.
*/
computeMenuPosition(e: JQueryEventObject | undefined, bottom?: boolean): {
top: number;
left: number;
};
}