UNPKG

leaflet

Version:

JavaScript library for mobile-friendly interactive maps

122 lines (91 loc) 2.42 kB
/* * L.Control is a base class for implementing map controls. Handles positioning. * All other controls extend from this class. */ L.Control = L.Class.extend({ options: { position: 'topright' }, initialize: function (options) { L.setOptions(this, options); }, getPosition: function () { return this.options.position; }, setPosition: function (position) { var map = this._map; if (map) { map.removeControl(this); } this.options.position = position; if (map) { map.addControl(this); } return this; }, getContainer: function () { return this._container; }, addTo: function (map) { this.remove(); this._map = map; var container = this._container = this.onAdd(map), pos = this.getPosition(), corner = map._controlCorners[pos]; L.DomUtil.addClass(container, 'leaflet-control'); if (pos.indexOf('bottom') !== -1) { corner.insertBefore(container, corner.firstChild); } else { corner.appendChild(container); } return this; }, remove: function () { if (!this._map) { return this; } L.DomUtil.remove(this._container); if (this.onRemove) { this.onRemove(this._map); } this._map = null; return this; }, _refocusOnMap: function (e) { // if map exists and event is not a keyboard event if (this._map && e && e.screenX > 0 && e.screenY > 0) { this._map.getContainer().focus(); } } }); L.control = function (options) { return new L.Control(options); }; // adds control-related methods to L.Map L.Map.include({ addControl: function (control) { control.addTo(this); return this; }, removeControl: function (control) { control.remove(); return this; }, _initControlPos: function () { var corners = this._controlCorners = {}, l = 'leaflet-', container = this._controlContainer = L.DomUtil.create('div', l + 'control-container', this._container); function createCorner(vSide, hSide) { var className = l + vSide + ' ' + l + hSide; corners[vSide + hSide] = L.DomUtil.create('div', className, container); } createCorner('top', 'left'); createCorner('top', 'right'); createCorner('bottom', 'left'); createCorner('bottom', 'right'); }, _clearControlPos: function () { L.DomUtil.remove(this._controlContainer); } });