From 343e0ffce947ce5b8b41d5ae9f5ddbfa45b6af0b Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sat, 19 Jun 2021 14:22:23 +0200 Subject: [PATCH] Replace getChangeEventType() with add/removeChangeListener methods --- src/ol/Feature.js | 17 ++++------------- src/ol/Geolocation.js | 12 +++--------- src/ol/Object.js | 33 +++++++++++++++++---------------- src/ol/Overlay.js | 27 ++++++--------------------- src/ol/PluggableMap.js | 21 ++++++--------------- src/ol/control/MousePosition.js | 6 +----- src/ol/control/OverviewMap.js | 9 ++++----- src/ol/control/ScaleLine.js | 6 +----- src/ol/interaction/Draw.js | 6 +----- src/ol/interaction/Translate.js | 5 ++--- src/ol/layer/Group.js | 6 +----- src/ol/layer/Heatmap.js | 6 +----- src/ol/layer/Layer.js | 5 ++--- 13 files changed, 49 insertions(+), 110 deletions(-) diff --git a/src/ol/Feature.js b/src/ol/Feature.js index 502c623e20..6e8fdb8b3e 100644 --- a/src/ol/Feature.js +++ b/src/ol/Feature.js @@ -1,7 +1,7 @@ /** * @module ol/Feature */ -import BaseObject, {getChangeEventType} from './Object.js'; +import BaseObject from './Object.js'; import EventType from './events/EventType.js'; import {assert} from './asserts.js'; import {listen, unlistenByKey} from './events.js'; @@ -100,10 +100,7 @@ class Feature extends BaseObject { */ this.geometryChangeKey_ = null; - this.addEventListener( - getChangeEventType(this.geometryName_), - this.handleGeometryChanged_ - ); + this.addChangeListener(this.geometryName_, this.handleGeometryChanged_); if (opt_geometryOrProperties) { if ( @@ -274,15 +271,9 @@ class Feature extends BaseObject { * @api */ setGeometryName(name) { - this.removeEventListener( - getChangeEventType(this.geometryName_), - this.handleGeometryChanged_ - ); + this.removeChangeListener(this.geometryName_, this.handleGeometryChanged_); this.geometryName_ = name; - this.addEventListener( - getChangeEventType(this.geometryName_), - this.handleGeometryChanged_ - ); + this.addChangeListener(this.geometryName_, this.handleGeometryChanged_); this.handleGeometryChanged_(); } } diff --git a/src/ol/Geolocation.js b/src/ol/Geolocation.js index 62d2621652..d363159b75 100644 --- a/src/ol/Geolocation.js +++ b/src/ol/Geolocation.js @@ -2,7 +2,7 @@ * @module ol/Geolocation */ import BaseEvent from './events/Event.js'; -import BaseObject, {getChangeEventType} from './Object.js'; +import BaseObject from './Object.js'; import EventType from './events/EventType.js'; import {circular as circularPolygon} from './geom/Polygon.js'; import { @@ -112,14 +112,8 @@ class Geolocation extends BaseObject { */ this.watchId_ = undefined; - this.addEventListener( - getChangeEventType(Property.PROJECTION), - this.handleProjectionChanged_ - ); - this.addEventListener( - getChangeEventType(Property.TRACKING), - this.handleTrackingChanged_ - ); + this.addChangeListener(Property.PROJECTION, this.handleProjectionChanged_); + this.addChangeListener(Property.TRACKING, this.handleTrackingChanged_); if (options.projection !== undefined) { this.setProjection(options.projection); diff --git a/src/ol/Object.js b/src/ol/Object.js index 3343b6521f..1a42c65624 100644 --- a/src/ol/Object.js +++ b/src/ol/Object.js @@ -149,12 +149,28 @@ class BaseObject extends Observable { */ notify(key, oldValue) { let eventType; - eventType = getChangeEventType(key); + eventType = `change:${key}`; this.dispatchEvent(new ObjectEvent(eventType, key, oldValue)); eventType = ObjectEventType.PROPERTYCHANGE; this.dispatchEvent(new ObjectEvent(eventType, key, oldValue)); } + /** + * @param {string} key Key name. + * @param {import("./events.js").Listener} listener Listener. + */ + addChangeListener(key, listener) { + this.addEventListener(`change:${key}`, listener); + } + + /** + * @param {string} key Key name. + * @param {import("./events.js").Listener} listener Listener. + */ + removeChangeListener(key, listener) { + this.removeEventListener(`change:${key}`, listener); + } + /** * Sets a value. * @param {string} key Key name. @@ -220,19 +236,4 @@ class BaseObject extends Observable { } } -/** - * @type {Object} - */ -const changeEventTypeCache = {}; - -/** - * @param {string} key Key name. - * @return {string} Change name. - */ -export function getChangeEventType(key) { - return changeEventTypeCache.hasOwnProperty(key) - ? changeEventTypeCache[key] - : (changeEventTypeCache[key] = 'change:' + key); -} - export default BaseObject; diff --git a/src/ol/Overlay.js b/src/ol/Overlay.js index 869eac4614..7c47de2006 100644 --- a/src/ol/Overlay.js +++ b/src/ol/Overlay.js @@ -1,7 +1,7 @@ /** * @module ol/Overlay */ -import BaseObject, {getChangeEventType} from './Object.js'; +import BaseObject from './Object.js'; import MapEventType from './MapEventType.js'; import OverlayPositioning from './OverlayPositioning.js'; import {CLASS_SELECTABLE} from './css.js'; @@ -176,26 +176,11 @@ class Overlay extends BaseObject { */ this.mapPostrenderListenerKey = null; - this.addEventListener( - getChangeEventType(Property.ELEMENT), - this.handleElementChanged - ); - this.addEventListener( - getChangeEventType(Property.MAP), - this.handleMapChanged - ); - this.addEventListener( - getChangeEventType(Property.OFFSET), - this.handleOffsetChanged - ); - this.addEventListener( - getChangeEventType(Property.POSITION), - this.handlePositionChanged - ); - this.addEventListener( - getChangeEventType(Property.POSITIONING), - this.handlePositioningChanged - ); + this.addChangeListener(Property.ELEMENT, this.handleElementChanged); + this.addChangeListener(Property.MAP, this.handleMapChanged); + this.addChangeListener(Property.OFFSET, this.handleOffsetChanged); + this.addChangeListener(Property.POSITION, this.handlePositionChanged); + this.addChangeListener(Property.POSITIONING, this.handlePositioningChanged); if (options.element !== undefined) { this.setElement(options.element); diff --git a/src/ol/PluggableMap.js b/src/ol/PluggableMap.js index f21179a16a..475df19c58 100644 --- a/src/ol/PluggableMap.js +++ b/src/ol/PluggableMap.js @@ -1,7 +1,7 @@ /** * @module ol/PluggableMap */ -import BaseObject, {getChangeEventType} from './Object.js'; +import BaseObject from './Object.js'; import Collection from './Collection.js'; import CollectionEventType from './CollectionEventType.js'; import EventType from './events/EventType.js'; @@ -345,22 +345,13 @@ class PluggableMap extends BaseObject { this.handleTileChange_.bind(this) ); - this.addEventListener( - getChangeEventType(MapProperty.LAYERGROUP), + this.addChangeListener( + MapProperty.LAYERGROUP, this.handleLayerGroupChanged_ ); - this.addEventListener( - getChangeEventType(MapProperty.VIEW), - this.handleViewChanged_ - ); - this.addEventListener( - getChangeEventType(MapProperty.SIZE), - this.handleSizeChanged_ - ); - this.addEventListener( - getChangeEventType(MapProperty.TARGET), - this.handleTargetChanged_ - ); + this.addChangeListener(MapProperty.VIEW, this.handleViewChanged_); + this.addChangeListener(MapProperty.SIZE, this.handleSizeChanged_); + this.addChangeListener(MapProperty.TARGET, this.handleTargetChanged_); // setProperties will trigger the rendering of the map if the map // is "defined" already. diff --git a/src/ol/control/MousePosition.js b/src/ol/control/MousePosition.js index be69cad9cb..7a660cd437 100644 --- a/src/ol/control/MousePosition.js +++ b/src/ol/control/MousePosition.js @@ -4,7 +4,6 @@ import Control from './Control.js'; import EventType from '../pointer/EventType.js'; -import {getChangeEventType} from '../Object.js'; import { get as getProjection, getTransformFromProjections, @@ -69,10 +68,7 @@ class MousePosition extends Control { target: options.target, }); - this.addEventListener( - getChangeEventType(PROJECTION), - this.handleProjectionChanged_ - ); + this.addChangeListener(PROJECTION, this.handleProjectionChanged_); if (options.coordinateFormat) { this.setCoordinateFormat(options.coordinateFormat); diff --git a/src/ol/control/OverviewMap.js b/src/ol/control/OverviewMap.js index 9fc0268252..a7185100dd 100644 --- a/src/ol/control/OverviewMap.js +++ b/src/ol/control/OverviewMap.js @@ -20,7 +20,6 @@ import { getTopLeft, scaleFromCenter, } from '../extent.js'; -import {getChangeEventType} from '../Object.js'; import {listen, listenOnce} from '../events.js'; import {fromExtent as polygonFromExtent} from '../geom/Polygon.js'; import {replaceNode} from '../dom.js'; @@ -348,8 +347,8 @@ class OverviewMap extends Control { this.ovmap_.setView(newView); } - view.addEventListener( - getChangeEventType(ViewProperty.ROTATION), + view.addChangeListener( + ViewProperty.ROTATION, this.boundHandleRotationChanged_ ); // Sync once with the new view @@ -362,8 +361,8 @@ class OverviewMap extends Control { * @private */ unbindView_(view) { - view.removeEventListener( - getChangeEventType(ViewProperty.ROTATION), + view.removeChangeListener( + ViewProperty.ROTATION, this.boundHandleRotationChanged_ ); } diff --git a/src/ol/control/ScaleLine.js b/src/ol/control/ScaleLine.js index 10af5361ab..54b7465783 100644 --- a/src/ol/control/ScaleLine.js +++ b/src/ol/control/ScaleLine.js @@ -6,7 +6,6 @@ import ProjUnits from '../proj/Units.js'; import {CLASS_UNSELECTABLE} from '../css.js'; import {METERS_PER_UNIT, getPointResolution} from '../proj.js'; import {assert} from '../asserts.js'; -import {getChangeEventType} from '../Object.js'; /** * @type {string} @@ -131,10 +130,7 @@ class ScaleLine extends Control { */ this.renderedHTML_ = ''; - this.addEventListener( - getChangeEventType(UNITS_PROP), - this.handleUnitsChanged_ - ); + this.addChangeListener(UNITS_PROP, this.handleUnitsChanged_); this.setUnits(options.units || Units.METRIC); diff --git a/src/ol/interaction/Draw.js b/src/ol/interaction/Draw.js index 960945320f..95a58d456a 100644 --- a/src/ol/interaction/Draw.js +++ b/src/ol/interaction/Draw.js @@ -29,7 +29,6 @@ import { } from '../extent.js'; import {createEditingStyle} from '../style/Style.js'; import {fromUserCoordinate, getUserProjection} from '../proj.js'; -import {getChangeEventType} from '../Object.js'; import {squaredDistance as squaredCoordinateDistance} from '../coordinate.js'; /** @@ -477,10 +476,7 @@ class Draw extends PointerInteraction { : shiftKeyOnly; } - this.addEventListener( - getChangeEventType(InteractionProperty.ACTIVE), - this.updateState_ - ); + this.addChangeListener(InteractionProperty.ACTIVE, this.updateState_); } /** diff --git a/src/ol/interaction/Translate.js b/src/ol/interaction/Translate.js index b40de7ff89..c0f9353527 100644 --- a/src/ol/interaction/Translate.js +++ b/src/ol/interaction/Translate.js @@ -7,7 +7,6 @@ import InteractionProperty from './Property.js'; import PointerInteraction from './Pointer.js'; import {TRUE} from '../functions.js'; import {always} from '../events/condition.js'; -import {getChangeEventType} from '../Object.js'; import {includes} from '../array.js'; /** @@ -192,8 +191,8 @@ class Translate extends PointerInteraction { */ this.lastFeature_ = null; - this.addEventListener( - getChangeEventType(InteractionProperty.ACTIVE), + this.addChangeListener( + InteractionProperty.ACTIVE, this.handleActiveChanged_ ); } diff --git a/src/ol/layer/Group.js b/src/ol/layer/Group.js index 7629b12971..90cad451f5 100644 --- a/src/ol/layer/Group.js +++ b/src/ol/layer/Group.js @@ -9,7 +9,6 @@ import ObjectEventType from '../ObjectEventType.js'; import SourceState from '../source/State.js'; import {assert} from '../asserts.js'; import {assign, clear} from '../obj.js'; -import {getChangeEventType} from '../Object.js'; import {getIntersection} from '../extent.js'; import {getUid} from '../util.js'; import {listen, unlistenByKey} from '../events.js'; @@ -77,10 +76,7 @@ class LayerGroup extends BaseLayer { */ this.listenerKeys_ = {}; - this.addEventListener( - getChangeEventType(Property.LAYERS), - this.handleLayersChanged_ - ); + this.addChangeListener(Property.LAYERS, this.handleLayersChanged_); if (layers) { if (Array.isArray(layers)) { diff --git a/src/ol/layer/Heatmap.js b/src/ol/layer/Heatmap.js index 1db870f645..c3e3306c8f 100644 --- a/src/ol/layer/Heatmap.js +++ b/src/ol/layer/Heatmap.js @@ -6,7 +6,6 @@ import WebGLPointsLayerRenderer from '../renderer/webgl/PointsLayer.js'; import {assign} from '../obj.js'; import {clamp} from '../math.js'; import {createCanvasContext2D} from '../dom.js'; -import {getChangeEventType} from '../Object.js'; /** * @typedef {Object} Options @@ -86,10 +85,7 @@ class Heatmap extends VectorLayer { */ this.gradient_ = null; - this.addEventListener( - getChangeEventType(Property.GRADIENT), - this.handleGradientChanged_ - ); + this.addChangeListener(Property.GRADIENT, this.handleGradientChanged_); this.setGradient(options.gradient ? options.gradient : DEFAULT_GRADIENT); diff --git a/src/ol/layer/Layer.js b/src/ol/layer/Layer.js index 1dc67905d2..6ad294e10d 100644 --- a/src/ol/layer/Layer.js +++ b/src/ol/layer/Layer.js @@ -8,7 +8,6 @@ import RenderEventType from '../render/EventType.js'; import SourceState from '../source/State.js'; import {assert} from '../asserts.js'; import {assign} from '../obj.js'; -import {getChangeEventType} from '../Object.js'; import {listen, unlistenByKey} from '../events.js'; /** @@ -130,8 +129,8 @@ class Layer extends BaseLayer { this.setMap(options.map); } - this.addEventListener( - getChangeEventType(LayerProperty.SOURCE), + this.addChangeListener( + LayerProperty.SOURCE, this.handleSourcePropertyChange_ );