diff --git a/umap/static/umap/js/modules/data/features.js b/umap/static/umap/js/modules/data/features.js index 25c91a48..e15b4924 100644 --- a/umap/static/umap/js/modules/data/features.js +++ b/umap/static/umap/js/modules/data/features.js @@ -114,7 +114,8 @@ class Feature { } makeUI() { - this._ui = new this.uiClass(this, this.toLatLngs()) + const klass = this.getUIClass() + this._ui = new klass(this, this.toLatLngs()) } getClassName() { @@ -568,7 +569,7 @@ class Feature { redraw() { if (this.datalayer?.isVisible()) { - if (this.uiClass !== this.ui.getClass()) { + if (this.getUIClass() !== this.ui.getClass()) { this.datalayer.hideFeature(this) this.makeUI() this.datalayer.showFeature(this) @@ -580,8 +581,6 @@ class Feature { } export class Point extends Feature { - uiClass = LeafletMarker - constructor(datalayer, geojson, id) { super(datalayer, geojson, id) this.staticOptions = { @@ -598,6 +597,10 @@ export class Point extends Feature { return { coordinates: GeoJSON.latLngToCoords(latlng), type: 'Point' } } + getUIClass() { + return LeafletMarker + } + hasGeom() { return Boolean(this.coordinates) } @@ -784,8 +787,6 @@ class Path extends Feature { } export class LineString extends Path { - uiClass = LeafletPolyline - constructor(datalayer, geojson, id) { super(datalayer, geojson, id) this.staticOptions = { @@ -815,6 +816,10 @@ export class LineString extends Path { return !this.coordinates.length } + getUIClass() { + return LeafletPolyline + } + isSameClass(other) { return other instanceof LineString } @@ -908,11 +913,6 @@ export class Polygon extends Path { } } - get uiClass() { - if (this.getOption('mask')) return MaskPolygon - return LeafletPolygon - } - toLatLngs() { return GeoJSON.coordsToLatLngs(this.coordinates, this.type === 'Polygon' ? 1 : 2) } @@ -933,6 +933,11 @@ export class Polygon extends Path { return !this.coordinates.length || !this.coordinates[0].length } + getUIClass() { + if (this.getOption('mask')) return MaskPolygon + return LeafletPolygon + } + isSameClass(other) { return other instanceof Polygon }