diff --git a/src/layer/DivOverlay.js b/src/layer/DivOverlay.js index 4e228590967..a677dd40e02 100644 --- a/src/layer/DivOverlay.js +++ b/src/layer/DivOverlay.js @@ -61,6 +61,24 @@ export var DivOverlay = Layer.extend({ return this; }, + // @method toggle(layer?: Layer): this + // Opens or closes the overlay bound to layer depending on its current state. + // Argument may be omitted only for overlay bound to layer. + // Alternative to `layer.togglePopup()`/`.toggleTooltip()`. + toggle: function (layer, target) { + if (this._map) { + this.close(); + } else { + layer = arguments.length ? layer : this._source; + var latlng = this._prepareOpen(layer, target); + this.setLatLng(latlng); + + // open the overlay on the map + this.openOn(layer._map); + } + return this; + }, + onAdd: function (map) { this._zoomAnimated = map._zoomAnimated; diff --git a/src/layer/Popup.js b/src/layer/Popup.js index ed169048368..397c446509d 100644 --- a/src/layer/Popup.js +++ b/src/layer/Popup.js @@ -140,10 +140,6 @@ export var Popup = DivOverlay.extend({ onRemove: function (map) { DivOverlay.prototype.onRemove.call(this, map); - if (this === map._popup) { - map._popup = null; - } - // @namespace Map // @section Popup events // @event popupclose: PopupEvent @@ -416,11 +412,7 @@ Layer.include({ // Opens or closes the popup bound to this layer depending on its current state. togglePopup: function (target) { if (this._popup) { - if (this._popup._map) { - this._popup.close(); - } else { - this.openPopup(target); - } + this._popup.toggle(this, target); } return this; }, diff --git a/src/layer/Tooltip.js b/src/layer/Tooltip.js index 3358cddcdb3..11a0da0d2d0 100644 --- a/src/layer/Tooltip.js +++ b/src/layer/Tooltip.js @@ -333,11 +333,7 @@ Layer.include({ // Opens or closes the tooltip bound to this layer depending on its current state. toggleTooltip: function (target) { if (this._tooltip) { - if (this._tooltip._map) { - this._tooltip.close(); - } else { - this.openTooltip(target); - } + this._tooltip.toggle(this, target); } return this; },