/* * Popup extension to L.Path (polylines, polygons, circles), adding popup-related methods. */ L.Path.include({ bindPopup: function (content, options) { if (content instanceof L.Popup) { this._popup = content; } else { if (!this._popup || options) { this._popup = new L.Popup(options, this); } this._popup.setContent(content); } if (!this._popupHandlersAdded) { this .on('click', this._openPopup, this) .on('remove', this.closePopup, this); this._popupHandlersAdded = true; } return this; }, unbindPopup: function () { if (this._popup) { this._popup = null; this .off('click', this._openPopup) .off('remove', this.closePopup); this._popupHandlersAdded = false; } return this; }, openPopup: function (latlng) { if (this._popup) { // open the popup from one of the path's points if not specified latlng = latlng || this._latlng || this._latlngs[Math.floor(this._latlngs.length / 2)]; this._openPopup({latlng: latlng}); } return this; }, closePopup: function () { if (this._popup) { this._popup._close(); } return this; }, _openPopup: function (e) { this._popup.setLatLng(e.latlng); this._map.openPopup(this._popup); } });