// This object is a mixin for L.Marker and L.CircleMarker. We declare it here as both need to include the contents. L.BaseMarkerMethods = { showLabel: function () { if (this.label && this._map) { this.label.setLatLng(this._latlng); this._map.showLabel(this.label); } return this; }, hideLabel: function () { if (this.label) { this.label.close(); } return this; }, setLabelNoHide: function (noHide) { if (this._labelNoHide === noHide) { return; } this._labelNoHide = noHide; if (noHide) { this._removeLabelRevealHandlers(); this.showLabel(); } else { this._addLabelRevealHandlers(); this.hideLabel(); } }, bindLabel: function (content, options) { var labelAnchor = this.options.icon ? this.options.icon.options.labelAnchor : this.options.labelAnchor, anchor = L.point(labelAnchor) || L.point(0, 0); anchor = anchor.add(L.Label.prototype.options.offset); if (options && options.offset) { anchor = anchor.add(options.offset); } options = L.Util.extend({offset: anchor}, options); this._labelNoHide = options.noHide; if (!this.label) { if (!this._labelNoHide) { this._addLabelRevealHandlers(); } this .on('remove', this.hideLabel, this) .on('move', this._moveLabel, this) .on('add', this._onMarkerAdd, this); this._hasLabelHandlers = true; } this.label = new L.Label(options, this) .setContent(content); return this; }, unbindLabel: function () { if (this.label) { this.hideLabel(); this.label = null; if (this._hasLabelHandlers) { if (!this._labelNoHide) { this._removeLabelRevealHandlers(); } this .off('remove', this.hideLabel, this) .off('move', this._moveLabel, this) .off('add', this._onMarkerAdd, this); } this._hasLabelHandlers = false; } return this; }, updateLabelContent: function (content) { if (this.label) { this.label.setContent(content); } }, getLabel: function () { return this.label; }, _onMarkerAdd: function () { if (this._labelNoHide) { this.showLabel(); } }, _addLabelRevealHandlers: function () { this .on('mouseover', this.showLabel, this) .on('mouseout', this.hideLabel, this); if (L.Browser.touch) { this.on('click', this.showLabel, this); } }, _removeLabelRevealHandlers: function () { this .off('mouseover', this.showLabel, this) .off('mouseout', this.hideLabel, this); if (L.Browser.touch) { this.off('click', this.showLabel, this); } }, _moveLabel: function (e) { this.label.setLatLng(e.latlng); } };