From d4a0f04203785bd5f0c73451a461c5b4de59f88b Mon Sep 17 00:00:00 2001 From: Oleg Kalyanov Date: Thu, 3 Nov 2022 20:26:46 +0700 Subject: [PATCH] Remove hard mapgl dependency (#24) * Remove hard mapgl dependency * fix formatting * 2.0.4 --- package-lock.json | 4 +-- package.json | 2 +- src/control/control.ts | 71 ++++++++++++++++++++++++++++++++++++++++++ src/control/index.ts | 3 +- 4 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 src/control/control.ts diff --git a/package-lock.json b/package-lock.json index 03f37f4..4a94d6a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@2gis/mapgl-ruler", - "version": "2.0.3", + "version": "2.0.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@2gis/mapgl-ruler", - "version": "2.0.3", + "version": "2.0.4", "license": "BSD-2-Clause", "devDependencies": { "@2gis/mapgl": "^1.25.0", diff --git a/package.json b/package.json index 703019f..3aeba7c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@2gis/mapgl-ruler", - "version": "2.0.3", + "version": "2.0.4", "description": "", "license": "BSD-2-Clause", "main": "dist/ruler.js", diff --git a/src/control/control.ts b/src/control/control.ts new file mode 100644 index 0000000..8a45842 --- /dev/null +++ b/src/control/control.ts @@ -0,0 +1,71 @@ +/** + * Class for the map's controls creating. + */ +export class Control { + /** + * @hidden + * @internal + */ + protected _wrap: HTMLDivElement; + + private _controlPane: any; + private _container: HTMLDivElement; + private _position: mapgl.ControlPosition; + + /** + * Example: + * ```js + * const control = new mapgl.Control( + * map, + * '', + * { position: 'topLeft' }, + * ); + * ``` + * @param map The map instance. + * @param content Control HTML content. + * @param options Control options. + */ + constructor(map: mapgl.Map, content: string, options: mapgl.ControlOptions) { + const { position } = options; + this._wrap = document.createElement('div'); + this._wrap.style.userSelect = 'none'; + this._wrap.innerHTML = content; + + this._position = position; + this._controlPane = (map as any)._controlPane; + this._container = this._controlPane.getContainerByPosition(position); + this._container?.append(this._wrap); + } + + /** + * Destroys the control. + */ + public destroy(): void { + this._wrap.remove(); + } + + /** + * Returns the position of the control. + */ + public getPosition(): mapgl.ControlPosition { + return this._position; + } + + /** + * Sets the position of the control. + * @param position Required position of the control. + */ + public setPosition(position: mapgl.ControlPosition): void { + this._container.removeChild(this._wrap); + this._container = this._controlPane.getContainerByPosition(position); + this._container.append(this._wrap); + this._position = position; + } + + /** + * Returns the container of the control. + */ + public getContainer(): HTMLDivElement { + return this._wrap; + } +} diff --git a/src/control/index.ts b/src/control/index.ts index 437d692..123f9d2 100644 --- a/src/control/index.ts +++ b/src/control/index.ts @@ -3,6 +3,7 @@ import styles from './index.module.css'; import icon_distance from 'raw-loader!./icon_distance.svg'; import icon_area from 'raw-loader!./icon_area.svg'; import { DEFAULT_RULER_MODE } from '../constants'; +import { Control } from './control'; export interface RulerControlOptions extends mapgl.ControlOptions { /** @@ -19,7 +20,7 @@ export interface RulerControlOptions extends mapgl.ControlOptions { /** * A class that provides a ruler control on the map. */ -export class RulerControl extends mapgl.Control { +export class RulerControl extends Control { private readonly ruler: Ruler; private readonly icon: any; private isEnabled: boolean;