From 4520d81153ddcd29b477fcf30d43cbaa16b775cc Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 5 Apr 2013 20:20:13 +0200 Subject: [PATCH 1/4] Don't lint examples/loader.js --- build.py | 1 + 1 file changed, 1 insertion(+) diff --git a/build.py b/build.py index 1659dab6ab..c2ff878c65 100755 --- a/build.py +++ b/build.py @@ -109,6 +109,7 @@ EXAMPLES_SRC = [path if not path.startswith('examples/font-awesome') if path != 'examples/Jugl.js' if path != 'examples/jquery.min.js' + if path != 'examples/loader.js' if path != 'examples/example-list.js'] EXAMPLES_JSON = ['build/' + example.replace('.html', '.json') From da1e5aadd31844ee02eb8ccef0c35e08d96e818d Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 5 Apr 2013 20:21:26 +0200 Subject: [PATCH 2/4] Factor out css.js and fix requires --- src/ol/control/attributioncontrol.js | 3 ++- src/ol/control/logocontrol.js | 3 ++- src/ol/control/scalelinecontrol.js | 4 ++-- src/ol/control/zoomcontrol.js | 4 ++-- src/ol/control/zoomslidercontrol.js | 6 +++--- src/ol/css.js | 9 +++++++++ src/ol/ol.js | 8 -------- src/ol/renderer/canvas/canvasmaprenderer.js | 4 ++-- src/ol/renderer/dom/dommaprenderer.js | 4 ++-- src/ol/renderer/webgl/webglmaprenderer.js | 4 ++-- 10 files changed, 26 insertions(+), 23 deletions(-) create mode 100644 src/ol/css.js diff --git a/src/ol/control/attributioncontrol.js b/src/ol/control/attributioncontrol.js index 464143f53c..9052eb8a9b 100644 --- a/src/ol/control/attributioncontrol.js +++ b/src/ol/control/attributioncontrol.js @@ -14,6 +14,7 @@ goog.require('ol.MapEvent'); goog.require('ol.MapEventType'); goog.require('ol.TileRange'); goog.require('ol.control.Control'); +goog.require('ol.css'); goog.require('ol.source.Source'); @@ -34,7 +35,7 @@ ol.control.Attribution = function(opt_options) { this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL); var element = goog.dom.createDom(goog.dom.TagName.DIV, { - 'class': 'ol-attribution ' + ol.CSS_CLASS_UNSELECTABLE + 'class': 'ol-attribution ' + ol.css.CLASS_UNSELECTABLE }, this.ulElement_); goog.base(this, { diff --git a/src/ol/control/logocontrol.js b/src/ol/control/logocontrol.js index 69897eaef1..bd08ded959 100644 --- a/src/ol/control/logocontrol.js +++ b/src/ol/control/logocontrol.js @@ -9,6 +9,7 @@ goog.require('ol.FrameState'); goog.require('ol.MapEvent'); goog.require('ol.MapEventType'); goog.require('ol.control.Control'); +goog.require('ol.css'); @@ -28,7 +29,7 @@ ol.control.Logo = function(opt_options) { this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL); var element = goog.dom.createDom(goog.dom.TagName.DIV, { - 'class': 'ol-logo ' + ol.CSS_CLASS_UNSELECTABLE + 'class': 'ol-logo ' + ol.css.CLASS_UNSELECTABLE }, this.ulElement_); goog.base(this, { diff --git a/src/ol/control/scalelinecontrol.js b/src/ol/control/scalelinecontrol.js index eb795da0a2..f554eefd86 100644 --- a/src/ol/control/scalelinecontrol.js +++ b/src/ol/control/scalelinecontrol.js @@ -3,13 +3,13 @@ goog.provide('ol.control.ScaleLineUnits'); goog.require('goog.dom'); goog.require('goog.style'); -goog.require('ol'); goog.require('ol.FrameState'); goog.require('ol.MapEvent'); goog.require('ol.MapEventType'); goog.require('ol.ProjectionUnits'); goog.require('ol.TransformFunction'); goog.require('ol.control.Control'); +goog.require('ol.css'); goog.require('ol.projection'); goog.require('ol.sphere.NORMAL'); @@ -49,7 +49,7 @@ ol.control.ScaleLine = function(opt_options) { * @type {Element} */ this.element_ = goog.dom.createDom(goog.dom.TagName.DIV, { - 'class': 'ol-scale-line ' + ol.CSS_CLASS_UNSELECTABLE + 'class': 'ol-scale-line ' + ol.css.CLASS_UNSELECTABLE }, this.innerElement_); /** diff --git a/src/ol/control/zoomcontrol.js b/src/ol/control/zoomcontrol.js index aa3585ccd5..ef9e1a7ebf 100644 --- a/src/ol/control/zoomcontrol.js +++ b/src/ol/control/zoomcontrol.js @@ -6,8 +6,8 @@ goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.events'); goog.require('goog.events.EventType'); -goog.require('ol'); goog.require('ol.control.Control'); +goog.require('ol.css'); /** @@ -44,7 +44,7 @@ ol.control.Zoom = function(opt_options) { goog.events.EventType.CLICK ], this.handleOut_, false, this); - var cssClasses = 'ol-zoom ' + ol.CSS_CLASS_UNSELECTABLE; + var cssClasses = 'ol-zoom ' + ol.css.CLASS_UNSELECTABLE; var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, inElement, outElement); diff --git a/src/ol/control/zoomslidercontrol.js b/src/ol/control/zoomslidercontrol.js index d6163d7c8a..59c49b8ec8 100644 --- a/src/ol/control/zoomslidercontrol.js +++ b/src/ol/control/zoomslidercontrol.js @@ -10,9 +10,9 @@ goog.require('goog.dom.TagName'); goog.require('goog.events'); goog.require('goog.fx.Dragger'); goog.require('goog.style'); -goog.require('ol'); goog.require('ol.MapEventType'); goog.require('ol.control.Control'); +goog.require('ol.css'); @@ -363,9 +363,9 @@ ol.control.ZoomSlider.prototype.createDraggable_ = function(elem) { ol.control.ZoomSlider.prototype.createDom_ = function(opt_elem) { var elem, sliderCssCls = ol.control.ZoomSlider.CSS_CLASS_CONTAINER + ' ' + - ol.CSS_CLASS_UNSELECTABLE, + ol.css.CLASS_UNSELECTABLE, thumbCssCls = ol.control.ZoomSlider.CSS_CLASS_THUMB + ' ' + - ol.CSS_CLASS_UNSELECTABLE; + ol.css.CLASS_UNSELECTABLE; elem = goog.dom.createDom(goog.dom.TagName.DIV, sliderCssCls, goog.dom.createDom(goog.dom.TagName.DIV, thumbCssCls)); diff --git a/src/ol/css.js b/src/ol/css.js new file mode 100644 index 0000000000..b717b3d0d4 --- /dev/null +++ b/src/ol/css.js @@ -0,0 +1,9 @@ +goog.provide('ol.css'); + + +/** + * The CSS class that we'll give the DOM elements to have them unselectable. + * + * @const {string} + */ +ol.css.CLASS_UNSELECTABLE = 'ol-unselectable'; diff --git a/src/ol/ol.js b/src/ol/ol.js index 7f89641909..14a0e3d7b2 100644 --- a/src/ol/ol.js +++ b/src/ol/ol.js @@ -7,11 +7,3 @@ if (goog.DEBUG) { var logger = goog.debug.Logger.getLogger('ol'); logger.setLevel(goog.debug.Logger.Level.FINEST); } - - -/** - * The CSS class that we'll give the DOM elements to have them unselectable. - * - * @const {string} - */ -ol.CSS_CLASS_UNSELECTABLE = 'ol-unselectable'; diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index a66bece9f5..7cfff48d00 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -6,8 +6,8 @@ goog.require('goog.array'); goog.require('goog.dom'); goog.require('goog.style'); goog.require('goog.vec.Mat4'); -goog.require('ol'); goog.require('ol.Size'); +goog.require('ol.css'); goog.require('ol.layer.ImageLayer'); goog.require('ol.layer.TileLayer'); goog.require('ol.layer.Vector'); @@ -41,7 +41,7 @@ ol.renderer.canvas.Map = function(container, map) { this.canvas_ = goog.dom.createElement(goog.dom.TagName.CANVAS); this.canvas_.height = this.canvasSize_.height; this.canvas_.width = this.canvasSize_.width; - this.canvas_.className = ol.CSS_CLASS_UNSELECTABLE; + this.canvas_.className = ol.css.CLASS_UNSELECTABLE; goog.dom.insertChildAt(container, this.canvas_, 0); /** diff --git a/src/ol/renderer/dom/dommaprenderer.js b/src/ol/renderer/dom/dommaprenderer.js index 3ca1c6cb3b..9bd2d6d5c7 100644 --- a/src/ol/renderer/dom/dommaprenderer.js +++ b/src/ol/renderer/dom/dommaprenderer.js @@ -5,7 +5,7 @@ goog.require('goog.asserts'); goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.style'); -goog.require('ol'); +goog.require('ol.css'); goog.require('ol.layer.ImageLayer'); goog.require('ol.layer.TileLayer'); goog.require('ol.renderer.Map'); @@ -29,7 +29,7 @@ ol.renderer.dom.Map = function(container, map) { * @private */ this.layersPane_ = goog.dom.createElement(goog.dom.TagName.DIV); - this.layersPane_.className = 'ol-layers ' + ol.CSS_CLASS_UNSELECTABLE; + this.layersPane_.className = 'ol-layers ' + ol.css.CLASS_UNSELECTABLE; var style = this.layersPane_.style; style.position = 'absolute'; style.width = '100%'; diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index c06eabc087..e742c4a1e1 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -10,10 +10,10 @@ goog.require('goog.events'); goog.require('goog.events.Event'); goog.require('goog.style'); goog.require('goog.webgl'); -goog.require('ol'); goog.require('ol.FrameState'); goog.require('ol.Size'); goog.require('ol.Tile'); +goog.require('ol.css'); goog.require('ol.layer.ImageLayer'); goog.require('ol.layer.TileLayer'); goog.require('ol.renderer.Map'); @@ -75,7 +75,7 @@ ol.renderer.webgl.Map = function(container, map) { this.canvas_ = goog.dom.createElement(goog.dom.TagName.CANVAS); this.canvas_.height = container.clientHeight; this.canvas_.width = container.clientWidth; - this.canvas_.className = ol.CSS_CLASS_UNSELECTABLE; + this.canvas_.className = ol.css.CLASS_UNSELECTABLE; goog.dom.insertChildAt(container, this.canvas_, 0); /** From 06bcab8374aebe4e952e1afd31c188222a9601f5 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 5 Apr 2013 20:33:50 +0200 Subject: [PATCH 3/4] Move postrender event listening into base class --- src/ol/control/attributioncontrol.js | 27 +------------------- src/ol/control/control.js | 23 +++++++++++++++++ src/ol/control/logocontrol.js | 25 ------------------- src/ol/control/mousepositioncontrol.js | 9 ++----- src/ol/control/scalelinecontrol.js | 31 ++--------------------- src/ol/control/zoomslidercontrol.js | 34 +++----------------------- 6 files changed, 31 insertions(+), 118 deletions(-) diff --git a/src/ol/control/attributioncontrol.js b/src/ol/control/attributioncontrol.js index 9052eb8a9b..04f92ff385 100644 --- a/src/ol/control/attributioncontrol.js +++ b/src/ol/control/attributioncontrol.js @@ -5,13 +5,10 @@ goog.provide('ol.control.Attribution'); goog.require('goog.array'); goog.require('goog.dom'); goog.require('goog.dom.TagName'); -goog.require('goog.events'); goog.require('goog.object'); goog.require('goog.style'); goog.require('ol.Attribution'); goog.require('ol.FrameState'); -goog.require('ol.MapEvent'); -goog.require('ol.MapEventType'); goog.require('ol.TileRange'); goog.require('ol.control.Control'); goog.require('ol.css'); @@ -62,12 +59,6 @@ ol.control.Attribution = function(opt_options) { */ this.attributionElementRenderedVisible_ = {}; - /** - * @private - * @type {?number} - */ - this.postrenderListenKey_ = null; - }; goog.inherits(ol.control.Attribution, ol.control.Control); @@ -108,29 +99,13 @@ ol.control.Attribution.prototype.getTileSourceAttributions = /** - * @param {ol.MapEvent} mapEvent Map event. + * @inheritDoc */ ol.control.Attribution.prototype.handleMapPostrender = function(mapEvent) { this.updateElement_(mapEvent.frameState); }; -/** - * @inheritDoc - */ -ol.control.Attribution.prototype.setMap = function(map) { - if (!goog.isNull(this.postrenderListenKey_)) { - goog.events.unlistenByKey(this.postrenderListenKey_); - this.postrenderListenKey_ = null; - } - goog.base(this, 'setMap', map); - if (!goog.isNull(map)) { - this.postrenderListenKey_ = goog.events.listen( - map, ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this); - } -}; - - /** * @private * @param {?ol.FrameState} frameState Frame state. diff --git a/src/ol/control/control.js b/src/ol/control/control.js index 461847c340..b911651198 100644 --- a/src/ol/control/control.js +++ b/src/ol/control/control.js @@ -2,6 +2,9 @@ goog.provide('ol.control.Control'); goog.provide('ol.control.ControlOptions'); goog.require('goog.Disposable'); +goog.require('goog.events'); +goog.require('ol.MapEvent'); +goog.require('ol.MapEventType'); /** @@ -44,6 +47,12 @@ ol.control.Control = function(controlOptions) { */ this.map_ = null; + /** + * @private + * @type {?number} + */ + this.postrenderListenKey_ = null; + if (goog.isDef(controlOptions.map)) { this.setMap(controlOptions.map); } @@ -69,6 +78,12 @@ ol.control.Control.prototype.getMap = function() { }; +/** + * @param {ol.MapEvent} mapEvent Map event. + */ +ol.control.Control.prototype.handleMapPostrender = goog.nullFunction; + + /** * Removes the control from its current map and attaches it to the new map. * Subtypes might also wish set up event handlers to get notified about changes @@ -80,10 +95,18 @@ ol.control.Control.prototype.setMap = function(map) { if (!goog.isNull(this.map_)) { goog.dom.removeNode(this.element); } + if (!goog.isNull(this.postrenderListenKey_)) { + goog.events.unlistenByKey(this.postrenderListenKey_); + this.postrenderListenKey_ = null; + } this.map_ = map; if (!goog.isNull(this.map_)) { var target = goog.isDef(this.target_) ? this.target_ : map.getOverlayContainer(); goog.dom.appendChild(target, this.element); + if (this.handleMapPostrender !== goog.nullFunction) { + this.postrenderListenKey_ = goog.events.listen(map, + ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this); + } } }; diff --git a/src/ol/control/logocontrol.js b/src/ol/control/logocontrol.js index bd08ded959..787386fa12 100644 --- a/src/ol/control/logocontrol.js +++ b/src/ol/control/logocontrol.js @@ -2,12 +2,9 @@ goog.provide('ol.control.Logo'); goog.require('goog.dom'); goog.require('goog.dom.TagName'); -goog.require('goog.events'); goog.require('goog.object'); goog.require('goog.style'); goog.require('ol.FrameState'); -goog.require('ol.MapEvent'); -goog.require('ol.MapEventType'); goog.require('ol.control.Control'); goog.require('ol.css'); @@ -50,12 +47,6 @@ ol.control.Logo = function(opt_options) { */ this.logoElements_ = {}; - /** - * @private - * @type {?number} - */ - this.postrenderListenKey_ = null; - }; goog.inherits(ol.control.Logo, ol.control.Control); @@ -68,22 +59,6 @@ ol.control.Logo.prototype.handleMapPostrender = function(mapEvent) { }; -/** - * @inheritDoc - */ -ol.control.Logo.prototype.setMap = function(map) { - if (!goog.isNull(this.postrenderListenKey_)) { - goog.events.unlistenByKey(this.postrenderListenKey_); - this.postrenderListenKey_ = null; - } - goog.base(this, 'setMap', map); - if (!goog.isNull(map)) { - this.postrenderListenKey_ = goog.events.listen( - map, ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this); - } -}; - - /** * @param {?ol.FrameState} frameState Frame state. * @private diff --git a/src/ol/control/mousepositioncontrol.js b/src/ol/control/mousepositioncontrol.js index 71e8b168a3..cb649f6dd1 100644 --- a/src/ol/control/mousepositioncontrol.js +++ b/src/ol/control/mousepositioncontrol.js @@ -9,8 +9,6 @@ goog.require('goog.events'); goog.require('goog.events.EventType'); goog.require('goog.style'); goog.require('ol.CoordinateFormatType'); -goog.require('ol.MapEvent'); -goog.require('ol.MapEventType'); goog.require('ol.Pixel'); goog.require('ol.Projection'); goog.require('ol.TransformFunction'); @@ -98,8 +96,7 @@ goog.inherits(ol.control.MousePosition, ol.control.Control); /** - * @param {ol.MapEvent} mapEvent Map event. - * @protected + * @inheritDoc */ ol.control.MousePosition.prototype.handleMapPostrender = function(mapEvent) { var frameState = mapEvent.frameState; @@ -151,9 +148,7 @@ ol.control.MousePosition.prototype.setMap = function(map) { goog.events.listen(viewport, goog.events.EventType.MOUSEMOVE, this.handleMouseMove, false, this), goog.events.listen(viewport, goog.events.EventType.MOUSEOUT, - this.handleMouseOut, false, this), - goog.events.listen(map, ol.MapEventType.POSTRENDER, - this.handleMapPostrender, false, this) + this.handleMouseOut, false, this) ]; } }; diff --git a/src/ol/control/scalelinecontrol.js b/src/ol/control/scalelinecontrol.js index f554eefd86..606867ed04 100644 --- a/src/ol/control/scalelinecontrol.js +++ b/src/ol/control/scalelinecontrol.js @@ -4,8 +4,6 @@ goog.provide('ol.control.ScaleLineUnits'); goog.require('goog.dom'); goog.require('goog.style'); goog.require('ol.FrameState'); -goog.require('ol.MapEvent'); -goog.require('ol.MapEventType'); goog.require('ol.ProjectionUnits'); goog.require('ol.TransformFunction'); goog.require('ol.control.Control'); @@ -65,12 +63,6 @@ ol.control.ScaleLine = function(opt_options) { this.units_ = goog.isDef(options.units) ? options.units : ol.control.ScaleLineUnits.METRIC; - /** - * @private - * @type {Array.} - */ - this.listenerKeys_ = null; - /** * @private * @type {boolean} @@ -112,30 +104,11 @@ goog.inherits(ol.control.ScaleLine, ol.control.Control); ol.control.ScaleLine.LEADING_DIGITS = [1, 2, 5]; -/** - * @param {ol.MapEvent} mapEvent Map event. - */ -ol.control.ScaleLine.prototype.handleMapPostrender = function(mapEvent) { - var frameState = mapEvent.frameState; - this.updateElement_(mapEvent.frameState); -}; - - /** * @inheritDoc */ -ol.control.ScaleLine.prototype.setMap = function(map) { - if (!goog.isNull(this.listenerKeys_)) { - goog.array.forEach(this.listenerKeys_, goog.events.unlistenByKey); - this.listenerKeys_ = null; - } - goog.base(this, 'setMap', map); - if (!goog.isNull(map)) { - this.listenerKeys_ = [ - goog.events.listen(map, ol.MapEventType.POSTRENDER, - this.handleMapPostrender, false, this) - ]; - } +ol.control.ScaleLine.prototype.handleMapPostrender = function(mapEvent) { + this.updateElement_(mapEvent.frameState); }; diff --git a/src/ol/control/zoomslidercontrol.js b/src/ol/control/zoomslidercontrol.js index 59c49b8ec8..a991b902c8 100644 --- a/src/ol/control/zoomslidercontrol.js +++ b/src/ol/control/zoomslidercontrol.js @@ -10,7 +10,6 @@ goog.require('goog.dom.TagName'); goog.require('goog.events'); goog.require('goog.fx.Dragger'); goog.require('goog.style'); -goog.require('ol.MapEventType'); goog.require('ol.control.Control'); goog.require('ol.css'); @@ -74,12 +73,6 @@ ol.control.ZoomSlider = function(zoomSliderOptions) { */ this.direction_ = ol.control.ZoomSlider.direction.VERTICAL; - /** - * @private - * @type {Array.} - */ - this.mapListenerKeys_ = null; - /** * @private * @type {Array.} @@ -157,31 +150,11 @@ ol.control.ZoomSlider.DEFAULT_MAX_RESOLUTION = 156543.0339; ol.control.ZoomSlider.prototype.setMap = function(map) { goog.base(this, 'setMap', map); this.currentResolution_ = map.getView().getResolution(); - this.initMapEventListeners_(); this.initSlider_(); this.positionThumbForResolution_(this.currentResolution_); }; -/** - * Initializes the event listeners for map events. - * - * @private - */ -ol.control.ZoomSlider.prototype.initMapEventListeners_ = function() { - if (!goog.isNull(this.mapListenerKeys_)) { - goog.array.forEach(this.mapListenerKeys_, goog.events.unlistenByKey); - this.mapListenerKeys_ = null; - } - if (!goog.isNull(this.getMap())) { - this.mapListenerKeys_ = [ - goog.events.listen(this.getMap(), ol.MapEventType.POSTRENDER, - this.handleMapPostRender_, undefined, this) - ]; - } -}; - - /** * Initializes the slider element. This will determine and set this controls * direction_ and also constrain the dragging of the thumb to always be within @@ -217,11 +190,10 @@ ol.control.ZoomSlider.prototype.initSlider_ = function() { /** - * @param {ol.MapEvent} mapEvtObj The ol.MapEvent object. - * @private + * @inheritDoc */ -ol.control.ZoomSlider.prototype.handleMapPostRender_ = function(mapEvtObj) { - var res = mapEvtObj.frameState.view2DState.resolution; +ol.control.ZoomSlider.prototype.handleMapPostrender = function(mapEvent) { + var res = mapEvent.frameState.view2DState.resolution; if (res !== this.currentResolution_) { this.currentResolution_ = res; this.positionThumbForResolution_(res); From 25eb18d2c8cc3c2707fbc4cea599387299094f99 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 5 Apr 2013 20:54:27 +0200 Subject: [PATCH 4/4] Handle unlistening in base class --- src/ol/control/control.js | 16 ++++++++-------- src/ol/control/dragboxcontrol.js | 16 +++------------- src/ol/control/mousepositioncontrol.js | 22 ++++++---------------- 3 files changed, 17 insertions(+), 37 deletions(-) diff --git a/src/ol/control/control.js b/src/ol/control/control.js index b911651198..c225082dee 100644 --- a/src/ol/control/control.js +++ b/src/ol/control/control.js @@ -48,10 +48,10 @@ ol.control.Control = function(controlOptions) { this.map_ = null; /** - * @private - * @type {?number} + * @protected + * @type {!Array.} */ - this.postrenderListenKey_ = null; + this.listenerKeys = []; if (goog.isDef(controlOptions.map)) { this.setMap(controlOptions.map); @@ -95,9 +95,9 @@ ol.control.Control.prototype.setMap = function(map) { if (!goog.isNull(this.map_)) { goog.dom.removeNode(this.element); } - if (!goog.isNull(this.postrenderListenKey_)) { - goog.events.unlistenByKey(this.postrenderListenKey_); - this.postrenderListenKey_ = null; + if (!goog.array.isEmpty(this.listenerKeys)) { + goog.array.forEach(this.listenerKeys, goog.events.unlistenByKey); + this.listenerKeys.length = 0; } this.map_ = map; if (!goog.isNull(this.map_)) { @@ -105,8 +105,8 @@ ol.control.Control.prototype.setMap = function(map) { this.target_ : map.getOverlayContainer(); goog.dom.appendChild(target, this.element); if (this.handleMapPostrender !== goog.nullFunction) { - this.postrenderListenKey_ = goog.events.listen(map, - ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this); + this.listenerKeys.push(goog.events.listen(map, + ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this)); } } }; diff --git a/src/ol/control/dragboxcontrol.js b/src/ol/control/dragboxcontrol.js index 5fcbc51596..5a70378ef5 100644 --- a/src/ol/control/dragboxcontrol.js +++ b/src/ol/control/dragboxcontrol.js @@ -42,12 +42,6 @@ ol.control.DragBox = function(dragBoxOptions) { */ this.startCoordinate_ = dragBoxOptions.startCoordinate; - /** - * @private - * @type {?number} - */ - this.dragListenKey_ = null; - goog.base(this, { element: element, map: dragBoxOptions.map @@ -61,19 +55,15 @@ goog.inherits(ol.control.DragBox, ol.control.Control); * @inheritDoc */ ol.control.DragBox.prototype.setMap = function(map) { - if (!goog.isNull(this.dragListenKey_)) { - goog.events.unlistenByKey(this.dragListenKey_); - this.dragListenKey_ = null; - } + goog.base(this, 'setMap', map); if (!goog.isNull(map)) { this.startPixel_ = map.getPixelFromCoordinate(this.startCoordinate_); goog.asserts.assert(goog.isDef(this.startPixel_)); goog.style.setPosition(this.element, this.startPixel_); goog.style.setBorderBoxSize(this.element, new ol.Size(0, 0)); - this.dragListenKey_ = goog.events.listen( - map, ol.MapBrowserEvent.EventType.DRAG, this.updateBox_, false, this); + this.listenerKeys.push(goog.events.listen( + map, ol.MapBrowserEvent.EventType.DRAG, this.updateBox_, false, this)); } - goog.base(this, 'setMap', map); }; diff --git a/src/ol/control/mousepositioncontrol.js b/src/ol/control/mousepositioncontrol.js index cb649f6dd1..57f705e16a 100644 --- a/src/ol/control/mousepositioncontrol.js +++ b/src/ol/control/mousepositioncontrol.js @@ -85,12 +85,6 @@ ol.control.MousePosition = function(opt_options) { */ this.lastMouseMovePixel_ = null; - /** - * @private - * @type {Array.} - */ - this.listenerKeys_ = null; - }; goog.inherits(ol.control.MousePosition, ol.control.Control); @@ -137,19 +131,15 @@ ol.control.MousePosition.prototype.handleMouseOut = function(browserEvent) { * @inheritDoc */ ol.control.MousePosition.prototype.setMap = function(map) { - if (!goog.isNull(this.listenerKeys_)) { - goog.array.forEach(this.listenerKeys_, goog.events.unlistenByKey); - this.listenerKeys_ = null; - } goog.base(this, 'setMap', map); if (!goog.isNull(map)) { var viewport = map.getViewport(); - this.listenerKeys_ = [ - goog.events.listen(viewport, goog.events.EventType.MOUSEMOVE, - this.handleMouseMove, false, this), - goog.events.listen(viewport, goog.events.EventType.MOUSEOUT, - this.handleMouseOut, false, this) - ]; + this.listenerKeys.push( + goog.events.listen(viewport, goog.events.EventType.MOUSEMOVE, + this.handleMouseMove, false, this), + goog.events.listen(viewport, goog.events.EventType.MOUSEOUT, + this.handleMouseOut, false, this) + ); } };