|
|
import _WidgetBase = require("./_WidgetBase");
|
|
|
import { PlacePosition, PlaceLocation } from "./place";
|
|
|
|
|
|
interface PopupOpenArgs {
|
|
|
/**
|
|
|
* widget to display
|
|
|
*/
|
|
|
popup?: _WidgetBase;
|
|
|
|
|
|
/**
|
|
|
* the button etc. that is displaying this popup
|
|
|
*/
|
|
|
parent?: _WidgetBase;
|
|
|
|
|
|
/**
|
|
|
* DOM node (typically a button); place popup relative to this node. (Specify this *or* "x" and "y" parameters.)
|
|
|
*/
|
|
|
around?: HTMLElement;
|
|
|
|
|
|
/**
|
|
|
* Absolute horizontal position (in pixels) to place node at. (Specify this *or* "around" parameter.)
|
|
|
*/
|
|
|
x?: number;
|
|
|
|
|
|
/**
|
|
|
* Absolute vertical position (in pixels) to place node at. (Specify this *or* "around" parameter.)
|
|
|
*/
|
|
|
y?: number;
|
|
|
|
|
|
/**
|
|
|
* When the around parameter is specified, orient should be a list of positions to try
|
|
|
*/
|
|
|
orient?: string | string[] | { BL?: string; TR?: string; TL?: string; BR?: string; };
|
|
|
|
|
|
/**
|
|
|
* callback when user has canceled the popup by:
|
|
|
*
|
|
|
* 1. hitting ESC or
|
|
|
* 2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog);
|
|
|
* i.e. whenever popupWidget.onCancel() is called, args.onCancel is called
|
|
|
*/
|
|
|
onCancel?: () => void;
|
|
|
|
|
|
/**
|
|
|
* callback whenever this popup is closed
|
|
|
*/
|
|
|
onClose?: () => void;
|
|
|
|
|
|
/**
|
|
|
* callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only)
|
|
|
*/
|
|
|
onExecute?: () => void;
|
|
|
|
|
|
/**
|
|
|
* adding a buffer around the opening position. This is only useful when around is not set.
|
|
|
*/
|
|
|
padding?: PlacePosition;
|
|
|
|
|
|
/**
|
|
|
* The max height for the popup. Any popup taller than this will have scrollbars.
|
|
|
* Set to Infinity for no max height. Default is to limit height to available space in viewport,
|
|
|
* above or below the aroundNode or specified x/y position.
|
|
|
*/
|
|
|
maxHeight?: number;
|
|
|
}
|
|
|
|
|
|
interface PopupManager {
|
|
|
/**
|
|
|
* Stack of currently popped up widgets.
|
|
|
* (someone opened _stack[0], and then it opened _stack[1], etc.)
|
|
|
*/
|
|
|
_stack: _WidgetBase[];
|
|
|
|
|
|
/**
|
|
|
* Z-index of the first popup. (If first popup opens other
|
|
|
* popups they get a higher z-index.)
|
|
|
*/
|
|
|
_beginZIndex: number;
|
|
|
|
|
|
_idGen: number;
|
|
|
|
|
|
/**
|
|
|
* If screen has been scrolled, reposition all the popups in the stack.
|
|
|
* Then set timer to check again later.
|
|
|
*/
|
|
|
_repositionAll(): void;
|
|
|
|
|
|
/**
|
|
|
* Initialization for widgets that will be used as popups.
|
|
|
* Puts widget inside a wrapper DIV (if not already in one),
|
|
|
* and returns pointer to that wrapper DIV.
|
|
|
*/
|
|
|
_createWrapper(widget: _WidgetBase): HTMLDivElement;
|
|
|
|
|
|
/**
|
|
|
* Moves the popup widget off-screen.
|
|
|
* Do not use this method to hide popups when not in use, because
|
|
|
* that will create an accessibility issue: the offscreen popup is
|
|
|
* still in the tabbing order.
|
|
|
*/
|
|
|
moveOffScreen(widget: _WidgetBase): HTMLDivElement;
|
|
|
|
|
|
/**
|
|
|
* Hide this popup widget (until it is ready to be shown).
|
|
|
* Initialization for widgets that will be used as popups
|
|
|
*
|
|
|
* Also puts widget inside a wrapper DIV (if not already in one)
|
|
|
*
|
|
|
* If popup widget needs to layout it should
|
|
|
* do so when it is made visible, and popup._onShow() is called.
|
|
|
*/
|
|
|
hide(widget: _WidgetBase): void;
|
|
|
|
|
|
/**
|
|
|
* Compute the closest ancestor popup that's *not* a child of another popup.
|
|
|
* Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button.
|
|
|
*/
|
|
|
getTopPopup(): _WidgetBase;
|
|
|
|
|
|
/**
|
|
|
* Popup the widget at the specified position
|
|
|
*/
|
|
|
open(args: PopupOpenArgs): PlaceLocation;
|
|
|
|
|
|
/**
|
|
|
* Close specified popup and any popups that it parented.
|
|
|
* If no popup is specified, closes all popups.
|
|
|
*/
|
|
|
close(popup?: _WidgetBase): void;
|
|
|
}
|
|
|
|