ol-contextmenu
Version:
Custom Context Menu for Openlayers
137 lines (124 loc) • 5.17 kB
TypeScript
import { CombinedOnSignature } from 'ol/Observable';
import { Coordinate } from 'ol/coordinate';
import { default as default_2 } from 'ol/control/Control';
import { default as default_3 } from 'ol/Map';
import { default as default_4 } from 'ol/events/Event';
import { default as default_5 } from 'ol/MapBrowserEvent';
import { EventsKey } from 'ol/events';
import { EventTypes as EventTypes_2 } from 'ol/Observable';
import { ObjectEvent } from 'ol/Object';
import { OnSignature } from 'ol/Observable';
import { Pixel } from 'ol/pixel';
import { TinyEmitter } from 'tiny-emitter';
import { Types } from 'ol/ObjectEventType';
export declare type CallbackObject = {
coordinate: Coordinate;
data: unknown;
};
declare class ContextMenu extends default_2 {
protected map: default_3;
protected emitter: TinyEmitter;
protected container: HTMLDivElement;
protected coordinate: Coordinate;
protected pixel: Pixel;
protected contextMenuEventListener: (evt: MouseEvent) => void;
protected entryCallbackEventListener: (evt: MouseEvent) => void;
protected mapMoveListener: () => void;
protected lineHeight: number;
protected disabled: boolean;
protected opened: boolean;
protected items: Item[];
protected menuEntries: Map<string, MenuEntry>;
on: OnSignature<EventTypes_2 | `${CustomEventTypes.CLOSE}`, default_4, EventsKey> & OnSignature<`${CustomEventTypes.OPEN}` | `${CustomEventTypes.BEFOREOPEN}`, ContextMenuEvent, EventsKey> & OnSignature<Types, ObjectEvent, EventsKey> & CombinedOnSignature<EventTypes_2 | Types | `${CustomEventTypes.OPEN}` | `${CustomEventTypes.CLOSE}` | `${CustomEventTypes.BEFOREOPEN}`, EventsKey>;
once: OnSignature<EventTypes_2 | `${CustomEventTypes.CLOSE}`, default_4, EventsKey> & OnSignature<`${CustomEventTypes.OPEN}` | `${CustomEventTypes.BEFOREOPEN}`, ContextMenuEvent, EventsKey> & OnSignature<Types, ObjectEvent, EventsKey> & CombinedOnSignature<EventTypes_2 | Types | `${CustomEventTypes.OPEN}` | `${CustomEventTypes.CLOSE}` | `${CustomEventTypes.BEFOREOPEN}`, EventsKey>;
un: OnSignature<EventTypes_2 | `${CustomEventTypes.CLOSE}`, default_4, void> & OnSignature<`${CustomEventTypes.OPEN}` | `${CustomEventTypes.BEFOREOPEN}`, ContextMenuEvent, EventsKey> & OnSignature<Types, ObjectEvent, void> & CombinedOnSignature<EventTypes_2 | Types | `${CustomEventTypes.OPEN}` | `${CustomEventTypes.CLOSE}` | `${CustomEventTypes.BEFOREOPEN}`, void>;
options: Options;
constructor(opts?: Partial<Options>);
clear(): void;
enable(): void;
disable(): void;
getDefaultItems(): SingleItem[];
countItems(): number;
extend(items: Item[]): void;
closeMenu(): void;
isOpen(): boolean;
updatePosition(pixel: Pixel): void;
pop(): void;
shift(): void;
push(item: Item): void;
setMap(map: default_3): void;
protected removeListeners(): void;
protected removeMenuEntry(id: string): void;
protected handleContextMenu(evt: MouseEvent): void;
protected openMenu(evt: MouseEvent): void;
protected getMenuEntriesLength(): number;
protected calculateMenuSize(): {
h: number;
w: number;
};
protected calculateVerticalPosition(mapSize: [number, number], spaceLeft: {
h: number;
w: number;
}, menuSize: {
h: number;
w: number;
}): number;
protected adjustPositionAfterRender(mapSize: [number, number], menuSize: {
h: number;
w: number;
}): void;
protected positionContainer(): void;
protected handleMapMove(): void;
protected handleEntryCallback(evt: MouseEvent): void;
protected handleAddMenuEntry(item: MenuEntry, element: HTMLLIElement): void;
}
export default ContextMenu;
export declare class ContextMenuEvent extends default_5<any> {
constructor(options: {
map: default_3;
originalEvent: MouseEvent | PointerEvent;
type: `${CustomEventTypes.OPEN}` | `${CustomEventTypes.BEFOREOPEN}`;
});
}
export declare enum CustomEventTypes {
BEFOREOPEN = "beforeopen",
OPEN = "open",
CLOSE = "close",
ADD_MENU_ENTRY = "add-menu-entry"
}
export declare enum EventTypes {
CONTEXTMENU = "contextmenu",
CLICK = "click",
DBLCLICK = "dblclick"
}
export declare type Item = SingleItem | ItemSeparator | ItemWithNested;
export declare type ItemSeparator = '-';
export declare type ItemWithNested = {
classname?: string;
icon?: string;
items: Item[];
text: string;
};
export declare type MenuEntry = {
callback: null | SingleItem['callback'];
data: unknown;
id: string;
isInsideSubmenu: boolean;
isSeparator: boolean;
isSubmenu: boolean;
};
export declare type Options = {
defaultItems: boolean;
eventType: `${EventTypes}`;
items: Item[];
scrollAt: number;
width: number;
};
export declare type SingleItem = {
callback: (object: CallbackObject, map: default_3) => void;
classname?: string;
data?: unknown;
icon?: string;
text: string;
};
export { }