diff --git a/externs/oli.js b/externs/oli.js index 16f5a8a201..903fd6e893 100644 --- a/externs/oli.js +++ b/externs/oli.js @@ -137,22 +137,6 @@ oli.control.Control.prototype.setMap = function(map) {}; oli.interaction; - -/** - * @interface - */ -oli.interaction.Interaction = function() {}; - -/** - * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. - * @return {boolean} Whether the map browser event should continue - * through the chain of interactions. `false` means stop, `true` - * means continue. - */ -oli.interaction.Interaction.prototype.handleMapBrowserEvent = - function(mapBrowserEvent) {}; - - /** * @interface */ diff --git a/externs/olx.js b/externs/olx.js index d58a126bb3..4370a7602f 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -172,6 +172,25 @@ olx.GraticuleOptions.prototype.strokeStyle; olx.GraticuleOptions.prototype.targetSize; +/** + * Object literal with config options for interactions. + * @typedef {{handleEvent: function(ol.MapBrowserEvent):boolean}} + * @api + */ +olx.interaction.InteractionOptions; + + +/** + * Method called by the map to notify the interaction that a browser event was + * dispatched to the map. The function may return `false` to prevent the + * propagation of the event to other interactions in the map's interactions + * chain. Required. + * @type {function(ol.MapBrowserEvent):boolean} + * @api + */ +olx.interaction.InteractionOptions.prototype.handleEvent; + + /** * Object literal with config options for the map. * @typedef {{controls: (ol.Collection.|Array.|undefined), @@ -802,6 +821,7 @@ olx.control; * tipLabel: (string|undefined), * label: (string|undefined), * collapseLabel: (string|undefined), + * render: (function(ol.MapEvent)|undefined), * target: (Element|undefined)}} * @api */ @@ -865,8 +885,19 @@ olx.control.AttributionOptions.prototype.label; */ olx.control.AttributionOptions.prototype.collapseLabel; + +/** + * Function called when the control should be re-rendered. This is called + * in a requestAnimationFrame callback. + * @type {function(ol.MapEvent)|undefined} + * @api + */ +olx.control.AttributionOptions.prototype.render; + + /** * @typedef {{element: (Element|undefined), + * render: (function(ol.MapEvent)|undefined), * target: (Element|string|undefined)}} * @api stable */ @@ -882,6 +913,15 @@ olx.control.ControlOptions; olx.control.ControlOptions.prototype.element; +/** + * Function called when the control should be re-rendered. This is called + * in a requestAnimationFrame callback. + * @type {function(ol.MapEvent)|undefined} + * @api + */ +olx.control.ControlOptions.prototype.render; + + /** * Specify a target if you want the control to be rendered outside of the map's * viewport. @@ -997,6 +1037,7 @@ olx.control.FullScreenOptions.prototype.target; * @typedef {{className: (string|undefined), * coordinateFormat: (ol.CoordinateFormatType|undefined), * projection: ol.proj.ProjectionLike, + * render: (function(ol.MapEvent)|undefined), * target: (Element|undefined), * undefinedHTML: (string|undefined)}} * @api stable @@ -1028,6 +1069,15 @@ olx.control.MousePositionOptions.prototype.coordinateFormat; olx.control.MousePositionOptions.prototype.projection; +/** + * Function called when the control should be re-rendered. This is called + * in a requestAnimationFrame callback. + * @type {function(ol.MapEvent)|undefined} + * @api + */ +olx.control.MousePositionOptions.prototype.render; + + /** * Target. * @type {Element|undefined} @@ -1050,6 +1100,7 @@ olx.control.MousePositionOptions.prototype.undefinedHTML; * collapsible: (boolean|undefined), * label: (string|undefined), * layers: (Array.|ol.Collection|undefined), + * render: (function(ol.MapEvent)|undefined), * target: (Element|undefined), * tipLabel: (string|undefined)}} * @api @@ -1099,6 +1150,15 @@ olx.control.OverviewMapOptions.prototype.label; olx.control.OverviewMapOptions.prototype.layers; +/** + * Function called when the control should be re-rendered. This is called + * in a requestAnimationFrame callback. + * @type {function(ol.MapEvent)|undefined} + * @api + */ +olx.control.OverviewMapOptions.prototype.render; + + /** * Specify a target if you want the control to be rendered outside of the map's * viewport. @@ -1119,6 +1179,7 @@ olx.control.OverviewMapOptions.prototype.tipLabel; /** * @typedef {{className: (string|undefined), * minWidth: (number|undefined), + * render: (function(ol.MapEvent)|undefined), * target: (Element|undefined), * units: (ol.control.ScaleLineUnits|string|undefined)}} * @api stable @@ -1142,6 +1203,15 @@ olx.control.ScaleLineOptions.prototype.className; olx.control.ScaleLineOptions.prototype.minWidth; +/** + * Function called when the control should be re-rendered. This is called + * in a requestAnimationFrame callback. + * @type {function(ol.MapEvent)|undefined} + * @api + */ +olx.control.ScaleLineOptions.prototype.render; + + /** * Target. * @type {Element|undefined} @@ -1164,6 +1234,7 @@ olx.control.ScaleLineOptions.prototype.units; * label: (string|undefined), * tipLabel: (string|undefined), * target: (Element|undefined), + * render: (function(ol.MapEvent)|undefined), * autoHide: (boolean|undefined)}} * @api stable */ @@ -1210,6 +1281,15 @@ olx.control.RotateOptions.prototype.duration; olx.control.RotateOptions.prototype.autoHide; +/** + * Function called when the control should be re-rendered. This is called + * in a requestAnimationFrame callback. + * @type {function(ol.MapEvent)|undefined} + * @api + */ +olx.control.RotateOptions.prototype.render; + + /** * Target. * @type {Element|undefined} @@ -1299,8 +1379,9 @@ olx.control.ZoomOptions.prototype.target; /** * @typedef {{className: (string|undefined), * maxResolution: (number|undefined), - * minResolution: (number|undefined)}} - * @api stable + * minResolution: (number|undefined), + * render: (function(ol.MapEvent)|undefined)}} + * @api */ olx.control.ZoomSliderOptions; @@ -1329,6 +1410,15 @@ olx.control.ZoomSliderOptions.prototype.maxResolution; olx.control.ZoomSliderOptions.prototype.minResolution; +/** + * Function called when the control should be re-rendered. This is called + * in a requestAnimationFrame callback. + * @type {function(ol.MapEvent)|undefined} + * @api + */ +olx.control.ZoomSliderOptions.prototype.render; + + /** * @typedef {{className: (string|undefined), * target: (Element|undefined), @@ -2339,6 +2429,24 @@ olx.interaction.PinchZoomOptions; olx.interaction.PinchZoomOptions.prototype.duration; +/** + * @typedef {{handleEvent: function(ol.MapBrowserEvent):boolean}} + * @api + */ +olx.interaction.PointerOptions; + + +/** + * Method called by the map to notify the interaction that a browser event was + * dispatched to the map. The function may return `false` to prevent the + * propagation of the event to other interactions in the map's interactions + * chain. + * @type {function(ol.MapBrowserEvent):boolean} + * @api + */ +olx.interaction.PointerOptions.prototype.handleEvent; + + /** * @typedef {{addCondition: (ol.events.ConditionType|undefined), * condition: (ol.events.ConditionType|undefined), diff --git a/src/ol/control/attributioncontrol.js b/src/ol/control/attributioncontrol.js index 6953af7843..224f4dc167 100644 --- a/src/ol/control/attributioncontrol.js +++ b/src/ol/control/attributioncontrol.js @@ -113,8 +113,12 @@ ol.control.Attribution = function(opt_options) { var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, this.ulElement_, button); + var render = goog.isDef(options.render) ? + options.render : ol.control.Attribution.render; + goog.base(this, { element: element, + render: render, target: options.target }); @@ -192,9 +196,11 @@ ol.control.Attribution.prototype.getSourceAttributions = function(frameState) { /** - * @inheritDoc + * @param {ol.MapEvent} mapEvent Map event. + * @this {ol.control.Attribution} + * @api */ -ol.control.Attribution.prototype.handleMapPostrender = function(mapEvent) { +ol.control.Attribution.render = function(mapEvent) { this.updateElement_(mapEvent.frameState); }; diff --git a/src/ol/control/control.js b/src/ol/control/control.js index 1695780971..73ce0e112e 100644 --- a/src/ol/control/control.js +++ b/src/ol/control/control.js @@ -66,6 +66,11 @@ ol.control.Control = function(options) { */ this.listenerKeys = []; + /** + * @type {function(ol.MapEvent)} + */ + this.render = goog.isDef(options.render) ? options.render : goog.nullFunction; + }; goog.inherits(ol.control.Control, ol.Object); @@ -89,15 +94,6 @@ ol.control.Control.prototype.getMap = function() { }; -/** - * Function called on each map render. Executes in a requestAnimationFrame - * callback. Can be implemented in sub-classes to re-render the control's - * UI. - * @param {ol.MapEvent} mapEvent Map event. - */ -ol.control.Control.prototype.handleMapPostrender = goog.nullFunction; - - /** * Remove the control from its current map and attach it to the new map. * Subclasses may set up event handlers to get notified about changes to @@ -118,9 +114,9 @@ ol.control.Control.prototype.setMap = function(map) { var target = !goog.isNull(this.target_) ? this.target_ : map.getOverlayContainerStopEvent(); goog.dom.appendChild(target, this.element); - if (this.handleMapPostrender !== goog.nullFunction) { + if (this.render !== goog.nullFunction) { this.listenerKeys.push(goog.events.listen(map, - ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this)); + ol.MapEventType.POSTRENDER, this.render, false, this)); } map.render(); } diff --git a/src/ol/control/mousepositioncontrol.js b/src/ol/control/mousepositioncontrol.js index 110f59a58e..ef558344aa 100644 --- a/src/ol/control/mousepositioncontrol.js +++ b/src/ol/control/mousepositioncontrol.js @@ -47,8 +47,12 @@ ol.control.MousePosition = function(opt_options) { var element = goog.dom.createDom(goog.dom.TagName.DIV, className); + var render = goog.isDef(options.render) ? + options.render : ol.control.MousePosition.render; + goog.base(this, { element: element, + render: render, target: options.target }); @@ -99,9 +103,11 @@ goog.inherits(ol.control.MousePosition, ol.control.Control); /** - * @inheritDoc + * @param {ol.MapEvent} mapEvent Map event. + * @this {ol.control.MousePosition} + * @api */ -ol.control.MousePosition.prototype.handleMapPostrender = function(mapEvent) { +ol.control.MousePosition.render = function(mapEvent) { var frameState = mapEvent.frameState; if (goog.isNull(frameState)) { this.mapProjection_ = null; diff --git a/src/ol/control/overviewmapcontrol.js b/src/ol/control/overviewmapcontrol.js index a7b5abcdae..628bdc77a1 100644 --- a/src/ol/control/overviewmapcontrol.js +++ b/src/ol/control/overviewmapcontrol.js @@ -136,8 +136,12 @@ ol.control.OverviewMap = function(opt_options) { var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, ovmapDiv, button); + var render = goog.isDef(options.render) ? + options.render : ol.control.OverviewMap.render; + goog.base(this, { element: element, + render: render, target: options.target }); }; @@ -201,12 +205,11 @@ ol.control.OverviewMap.prototype.bindView_ = function() { /** - * Function called on each map render. Executes in a requestAnimationFrame - * callback. Manage the extent of the overview map accordingly, - * then update the overview map box. - * @param {goog.events.Event} event Event. + * @param {ol.MapEvent} mapEvent Map event. + * @this {ol.control.OverviewMap} + * @api */ -ol.control.OverviewMap.prototype.handleMapPostrender = function(event) { +ol.control.OverviewMap.render = function(mapEvent) { this.validateExtent_(); this.updateBox_(); }; diff --git a/src/ol/control/rotatecontrol.js b/src/ol/control/rotatecontrol.js index 8f70495f83..4073063fe7 100644 --- a/src/ol/control/rotatecontrol.js +++ b/src/ol/control/rotatecontrol.js @@ -62,8 +62,12 @@ ol.control.Rotate = function(opt_options) { ol.css.CLASS_CONTROL; var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, button); + var render = goog.isDef(options.render) ? + options.render : ol.control.Rotate.render; + goog.base(this, { element: element, + render: render, target: options.target }); @@ -135,9 +139,11 @@ ol.control.Rotate.prototype.resetNorth_ = function() { /** - * @inheritDoc + * @param {ol.MapEvent} mapEvent Map event. + * @this {ol.control.Rotate} + * @api */ -ol.control.Rotate.prototype.handleMapPostrender = function(mapEvent) { +ol.control.Rotate.render = function(mapEvent) { var frameState = mapEvent.frameState; if (goog.isNull(frameState)) { return; diff --git a/src/ol/control/scalelinecontrol.js b/src/ol/control/scalelinecontrol.js index cf2777df2b..6ef6e4cc28 100644 --- a/src/ol/control/scalelinecontrol.js +++ b/src/ol/control/scalelinecontrol.js @@ -112,8 +112,12 @@ ol.control.ScaleLine = function(opt_options) { */ this.toEPSG4326_ = null; + var render = goog.isDef(options.render) ? + options.render : ol.control.ScaleLine.render; + goog.base(this, { element: this.element_, + render: render, target: options.target }); @@ -152,9 +156,11 @@ goog.exportProperty( /** - * @inheritDoc + * @param {ol.MapEvent} mapEvent Map event. + * @this {ol.control.ScaleLine} + * @api */ -ol.control.ScaleLine.prototype.handleMapPostrender = function(mapEvent) { +ol.control.ScaleLine.render = function(mapEvent) { var frameState = mapEvent.frameState; if (goog.isNull(frameState)) { this.viewState_ = null; diff --git a/src/ol/control/zoomslidercontrol.js b/src/ol/control/zoomslidercontrol.js index 2bac8ca4c0..a2fb2162f5 100644 --- a/src/ol/control/zoomslidercontrol.js +++ b/src/ol/control/zoomslidercontrol.js @@ -100,8 +100,12 @@ ol.control.ZoomSlider = function(opt_options) { goog.events.listen(thumbElement, goog.events.EventType.CLICK, goog.events.Event.stopPropagation); + var render = goog.isDef(options.render) ? + options.render : ol.control.ZoomSlider.render; + goog.base(this, { - element: containerElement + element: containerElement, + render: render }); }; goog.inherits(ol.control.ZoomSlider, ol.control.Control); @@ -166,9 +170,11 @@ ol.control.ZoomSlider.prototype.initSlider_ = function() { /** - * @inheritDoc + * @param {ol.MapEvent} mapEvent Map event. + * @this {ol.control.ZoomSlider} + * @api */ -ol.control.ZoomSlider.prototype.handleMapPostrender = function(mapEvent) { +ol.control.ZoomSlider.render = function(mapEvent) { if (goog.isNull(mapEvent.frameState)) { return; } diff --git a/src/ol/interaction/doubleclickzoominteraction.js b/src/ol/interaction/doubleclickzoominteraction.js index e840045e8d..a01d7ba25c 100644 --- a/src/ol/interaction/doubleclickzoominteraction.js +++ b/src/ol/interaction/doubleclickzoominteraction.js @@ -26,7 +26,9 @@ ol.interaction.DoubleClickZoom = function(opt_options) { */ this.delta_ = goog.isDef(options.delta) ? options.delta : 1; - goog.base(this); + goog.base(this, { + handleEvent: ol.interaction.DoubleClickZoom.handleEvent + }); /** * @private @@ -39,10 +41,12 @@ goog.inherits(ol.interaction.DoubleClickZoom, ol.interaction.Interaction); /** - * @inheritDoc + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @this {ol.interaction.DoubleClickZoom} + * @api */ -ol.interaction.DoubleClickZoom.prototype.handleMapBrowserEvent = - function(mapBrowserEvent) { +ol.interaction.DoubleClickZoom.handleEvent = function(mapBrowserEvent) { var stopEvent = false; var browserEvent = mapBrowserEvent.browserEvent; if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK) { diff --git a/src/ol/interaction/draganddropinteraction.js b/src/ol/interaction/draganddropinteraction.js index 382e27d8ea..3769fa094b 100644 --- a/src/ol/interaction/draganddropinteraction.js +++ b/src/ol/interaction/draganddropinteraction.js @@ -29,7 +29,9 @@ ol.interaction.DragAndDrop = function(opt_options) { var options = goog.isDef(opt_options) ? opt_options : {}; - goog.base(this); + goog.base(this, { + handleEvent: ol.interaction.DragAndDrop.handleEvent + }); /** * @private @@ -133,10 +135,12 @@ ol.interaction.DragAndDrop.prototype.handleResult_ = function(file, result) { /** - * @inheritDoc + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @this {ol.interaction.DragAndDrop} + * @api */ -ol.interaction.DragAndDrop.prototype.handleMapBrowserEvent = - goog.functions.TRUE; +ol.interaction.DragAndDrop.handleEvent = goog.functions.TRUE; /** diff --git a/src/ol/interaction/drawinteraction.js b/src/ol/interaction/drawinteraction.js index 5ce00a70d0..94354c66bc 100644 --- a/src/ol/interaction/drawinteraction.js +++ b/src/ol/interaction/drawinteraction.js @@ -85,7 +85,9 @@ goog.inherits(ol.DrawEvent, goog.events.Event); */ ol.interaction.Draw = function(options) { - goog.base(this); + goog.base(this, { + handleEvent: ol.interaction.Draw.handleEvent + }); /** * @type {ol.Pixel} @@ -236,20 +238,23 @@ ol.interaction.Draw.prototype.setMap = function(map) { /** - * @inheritDoc + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @this {ol.interaction.Draw} + * @api */ -ol.interaction.Draw.prototype.handleMapBrowserEvent = function(event) { - var map = event.map; +ol.interaction.Draw.handleEvent = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; if (!map.isDef()) { return true; } var pass = true; - if (event.type === ol.MapBrowserEvent.EventType.POINTERMOVE) { - pass = this.handlePointerMove_(event); - } else if (event.type === ol.MapBrowserEvent.EventType.DBLCLICK) { + if (mapBrowserEvent.type === ol.MapBrowserEvent.EventType.POINTERMOVE) { + pass = this.handlePointerMove_(mapBrowserEvent); + } else if (mapBrowserEvent.type === ol.MapBrowserEvent.EventType.DBLCLICK) { pass = false; } - return (goog.base(this, 'handleMapBrowserEvent', event) && pass); + return ol.interaction.Pointer.handleEvent.call(this, mapBrowserEvent) && pass; }; diff --git a/src/ol/interaction/interaction.js b/src/ol/interaction/interaction.js index 76b15d261b..3db0a9c405 100644 --- a/src/ol/interaction/interaction.js +++ b/src/ol/interaction/interaction.js @@ -32,11 +32,11 @@ ol.interaction.InteractionProperty = { * vectors and so are visible on the screen. * * @constructor + * @param {olx.interaction.InteractionOptions} options Options. * @extends {ol.Object} - * @implements {oli.interaction.Interaction} * @api */ -ol.interaction.Interaction = function() { +ol.interaction.Interaction = function(options) { goog.base(this); @@ -48,6 +48,11 @@ ol.interaction.Interaction = function() { this.setActive(true); + /** + * @type {function(ol.MapBrowserEvent):boolean} + */ + this.handleEvent = options.handleEvent; + }; goog.inherits(ol.interaction.Interaction, ol.Object); @@ -76,22 +81,6 @@ ol.interaction.Interaction.prototype.getMap = function() { }; -/** - * Method called by the map to notify the interaction that a browser - * event was dispatched on the map. If the interaction wants to handle - * that event it can return `false` to prevent the propagation of the - * event to other interactions in the map's interactions chain. - * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. - * @return {boolean} Whether the map browser event should continue - * through the chain of interactions. `false` means stop, `true` - * means continue. - * @function - * @api - */ -ol.interaction.Interaction.prototype.handleMapBrowserEvent = - goog.abstractMethod; - - /** * Activate or deactivate the interaction. * @param {boolean} active Active. diff --git a/src/ol/interaction/keyboardpaninteraction.js b/src/ol/interaction/keyboardpaninteraction.js index 62dab76038..9cfee2d707 100644 --- a/src/ol/interaction/keyboardpaninteraction.js +++ b/src/ol/interaction/keyboardpaninteraction.js @@ -31,7 +31,9 @@ goog.require('ol.interaction.Interaction'); */ ol.interaction.KeyboardPan = function(opt_options) { - goog.base(this); + goog.base(this, { + handleEvent: ol.interaction.KeyboardPan.handleEvent + }); var options = goog.isDef(opt_options) ? opt_options : {}; @@ -54,10 +56,12 @@ goog.inherits(ol.interaction.KeyboardPan, ol.interaction.Interaction); /** - * @inheritDoc + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @this {ol.interaction.KeyboardPan} + * @api */ -ol.interaction.KeyboardPan.prototype.handleMapBrowserEvent = - function(mapBrowserEvent) { +ol.interaction.KeyboardPan.handleEvent = function(mapBrowserEvent) { var stopEvent = false; if (mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) { var keyEvent = /** @type {goog.events.KeyEvent} */ diff --git a/src/ol/interaction/keyboardzoominteraction.js b/src/ol/interaction/keyboardzoominteraction.js index a629ae8ff8..b76f8a0587 100644 --- a/src/ol/interaction/keyboardzoominteraction.js +++ b/src/ol/interaction/keyboardzoominteraction.js @@ -27,7 +27,9 @@ goog.require('ol.interaction.Interaction'); */ ol.interaction.KeyboardZoom = function(opt_options) { - goog.base(this); + goog.base(this, { + handleEvent: ol.interaction.KeyboardZoom.handleEvent + }); var options = goog.isDef(opt_options) ? opt_options : {}; @@ -55,10 +57,12 @@ goog.inherits(ol.interaction.KeyboardZoom, ol.interaction.Interaction); /** - * @inheritDoc + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @this {ol.interaction.KeyboardZoom} + * @api */ -ol.interaction.KeyboardZoom.prototype.handleMapBrowserEvent = - function(mapBrowserEvent) { +ol.interaction.KeyboardZoom.handleEvent = function(mapBrowserEvent) { var stopEvent = false; if (mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) { var keyEvent = /** @type {goog.events.KeyEvent} */ diff --git a/src/ol/interaction/modifyinteraction.js b/src/ol/interaction/modifyinteraction.js index a78ad7f22b..147d668840 100644 --- a/src/ol/interaction/modifyinteraction.js +++ b/src/ol/interaction/modifyinteraction.js @@ -47,8 +47,9 @@ ol.interaction.SegmentDataType; */ ol.interaction.Modify = function(options) { - goog.base(this); - + goog.base(this, { + handleEvent: ol.interaction.Modify.handleEvent + }); /** * @type {ol.events.ConditionType} @@ -485,10 +486,12 @@ ol.interaction.Modify.prototype.handlePointerUp = function(evt) { /** - * @inheritDoc + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @this {ol.interaction.Modify} + * @api */ -ol.interaction.Modify.prototype.handleMapBrowserEvent = - function(mapBrowserEvent) { +ol.interaction.Modify.handleEvent = function(mapBrowserEvent) { var handled; if (!mapBrowserEvent.map.getView().getHints()[ol.ViewHint.INTERACTING] && mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERMOVE) { @@ -500,7 +503,8 @@ ol.interaction.Modify.prototype.handleMapBrowserEvent = goog.asserts.assertInstanceof(geometry, ol.geom.Point); handled = this.removeVertex_(); } - return goog.base(this, 'handleMapBrowserEvent', mapBrowserEvent) && !handled; + return ol.interaction.Pointer.handleEvent.call(this, mapBrowserEvent) && + !handled; }; diff --git a/src/ol/interaction/mousewheelzoominteraction.js b/src/ol/interaction/mousewheelzoominteraction.js index 0e0f713d18..547ccb577f 100644 --- a/src/ol/interaction/mousewheelzoominteraction.js +++ b/src/ol/interaction/mousewheelzoominteraction.js @@ -21,9 +21,11 @@ goog.require('ol.interaction.Interaction'); */ ol.interaction.MouseWheelZoom = function(opt_options) { - var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this, { + handleEvent: ol.interaction.MouseWheelZoom.handleEvent + }); - goog.base(this); + var options = goog.isDef(opt_options) ? opt_options : {}; /** * @private @@ -60,10 +62,12 @@ goog.inherits(ol.interaction.MouseWheelZoom, ol.interaction.Interaction); /** - * @inheritDoc + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @this {ol.interaction.MouseWheelZoom} + * @api */ -ol.interaction.MouseWheelZoom.prototype.handleMapBrowserEvent = - function(mapBrowserEvent) { +ol.interaction.MouseWheelZoom.handleEvent = function(mapBrowserEvent) { var stopEvent = false; if (mapBrowserEvent.type == goog.events.MouseWheelHandler.EventType.MOUSEWHEEL) { diff --git a/src/ol/interaction/pointerinteraction.js b/src/ol/interaction/pointerinteraction.js index 13123412e5..38ed96fdd6 100644 --- a/src/ol/interaction/pointerinteraction.js +++ b/src/ol/interaction/pointerinteraction.js @@ -17,11 +17,19 @@ goog.require('ol.interaction.Interaction'); * instantiated in apps. * * @constructor + * @param {olx.interaction.PointerOptions=} opt_options Options. * @extends {ol.interaction.Interaction} */ -ol.interaction.Pointer = function() { +ol.interaction.Pointer = function(opt_options) { - goog.base(this); + var options = goog.isDef(opt_options) ? opt_options : {}; + + var handleEvent = goog.isDef(options.handleEvent) ? + options.handleEvent : ol.interaction.Pointer.handleEvent; + + goog.base(this, { + handleEvent: handleEvent + }); /** * @type {boolean} @@ -124,10 +132,12 @@ ol.interaction.Pointer.prototype.handlePointerDown = goog.functions.FALSE; /** - * @inheritDoc + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @this {ol.interaction.Pointer} + * @api */ -ol.interaction.Pointer.prototype.handleMapBrowserEvent = - function(mapBrowserEvent) { +ol.interaction.Pointer.handleEvent = function(mapBrowserEvent) { if (!(mapBrowserEvent instanceof ol.MapBrowserPointerEvent)) { return true; } diff --git a/src/ol/interaction/selectinteraction.js b/src/ol/interaction/selectinteraction.js index fff8ffeae2..2da26fd587 100644 --- a/src/ol/interaction/selectinteraction.js +++ b/src/ol/interaction/selectinteraction.js @@ -28,7 +28,9 @@ goog.require('ol.style.Style'); */ ol.interaction.Select = function(opt_options) { - goog.base(this); + goog.base(this, { + handleEvent: ol.interaction.Select.handleEvent + }); var options = goog.isDef(opt_options) ? opt_options : {}; @@ -115,10 +117,12 @@ ol.interaction.Select.prototype.getFeatures = function() { /** - * @inheritDoc + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @this {ol.interaction.Select} + * @api */ -ol.interaction.Select.prototype.handleMapBrowserEvent = - function(mapBrowserEvent) { +ol.interaction.Select.handleEvent = function(mapBrowserEvent) { if (!this.condition_(mapBrowserEvent)) { return true; } diff --git a/src/ol/map.js b/src/ol/map.js index 6905e65eae..4ee6642c5f 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -870,7 +870,7 @@ ol.Map.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { if (!interaction.getActive()) { continue; } - var cont = interaction.handleMapBrowserEvent(mapBrowserEvent); + var cont = interaction.handleEvent(mapBrowserEvent); if (!cont) { break; } diff --git a/src/ol/overlay.js b/src/ol/overlay.js index 9f569b6e97..cec759b9aa 100644 --- a/src/ol/overlay.js +++ b/src/ol/overlay.js @@ -256,7 +256,7 @@ ol.Overlay.prototype.handleMapChanged = function() { var map = this.getMap(); if (goog.isDefAndNotNull(map)) { this.mapPostrenderListenerKey_ = goog.events.listen(map, - ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this); + ol.MapEventType.POSTRENDER, this.render, false, this); this.updatePixelPosition_(); var container = this.stopEvent_ ? map.getOverlayContainerStopEvent() : map.getOverlayContainer(); @@ -273,7 +273,7 @@ ol.Overlay.prototype.handleMapChanged = function() { /** * @protected */ -ol.Overlay.prototype.handleMapPostrender = function() { +ol.Overlay.prototype.render = function() { this.updatePixelPosition_(); }; diff --git a/test/spec/ol/interaction/interaction.test.js b/test/spec/ol/interaction/interaction.test.js index 1de7d915bf..bff9c9ee13 100644 --- a/test/spec/ol/interaction/interaction.test.js +++ b/test/spec/ol/interaction/interaction.test.js @@ -6,7 +6,7 @@ describe('ol.interaction.Interaction', function() { var interaction; beforeEach(function() { - interaction = new ol.interaction.Interaction(); + interaction = new ol.interaction.Interaction({}); }); it('creates a new interaction', function() { @@ -24,13 +24,13 @@ describe('ol.interaction.Interaction', function() { it('retrieves the associated map', function() { var map = new ol.Map({}); - var interaction = new ol.interaction.Interaction(); + var interaction = new ol.interaction.Interaction({}); interaction.setMap(map); expect(interaction.getMap()).to.be(map); }); it('returns null if no map', function() { - var interaction = new ol.interaction.Interaction(); + var interaction = new ol.interaction.Interaction({}); expect(interaction.getMap()).to.be(null); }); @@ -40,13 +40,13 @@ describe('ol.interaction.Interaction', function() { it('allows a map to be set', function() { var map = new ol.Map({}); - var interaction = new ol.interaction.Interaction(); + var interaction = new ol.interaction.Interaction({}); interaction.setMap(map); expect(interaction.getMap()).to.be(map); }); it('accepts null', function() { - var interaction = new ol.interaction.Interaction(); + var interaction = new ol.interaction.Interaction({}); interaction.setMap(null); expect(interaction.getMap()).to.be(null); }); diff --git a/test/spec/ol/map.test.js b/test/spec/ol/map.test.js index 4aedaf1464..ef6a658606 100644 --- a/test/spec/ol/map.test.js +++ b/test/spec/ol/map.test.js @@ -23,7 +23,7 @@ describe('ol.Map', function() { describe('#addInteraction()', function() { it('adds an interaction to the map', function() { var map = new ol.Map({}); - var interaction = new ol.interaction.Interaction(); + var interaction = new ol.interaction.Interaction({}); var before = map.getInteractions().getLength(); map.addInteraction(interaction); @@ -36,7 +36,7 @@ describe('ol.Map', function() { describe('#removeInteraction()', function() { it('removes an interaction from the map', function() { var map = new ol.Map({}); - var interaction = new ol.interaction.Interaction(); + var interaction = new ol.interaction.Interaction({}); var before = map.getInteractions().getLength(); map.addInteraction(interaction);