UNPKG

leaflet

Version:

JavaScript library for mobile-friendly interactive maps

125 lines (99 loc) 3.23 kB
/* * @class Control.Attribution * @aka L.Control.Attribution * @inherits Control * * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control. */ L.Control.Attribution = L.Control.extend({ // @section // @aka Control.Attribution options options: { position: 'bottomright', // @option prefix: String = 'Leaflet' // The HTML text shown before the attributions. Pass `false` to disable. prefix: '<a href="http://leafletjs.com" title="A JS library for interactive maps">Leaflet</a>' }, initialize: function (options) { L.setOptions(this, options); this._attributions = {}; }, onAdd: function (map) { map.attributionControl = this; this._container = L.DomUtil.create('div', 'leaflet-control-attribution'); if (L.DomEvent) { L.DomEvent.disableClickPropagation(this._container); } // TODO ugly, refactor for (var i in map._layers) { if (map._layers[i].getAttribution) { this.addAttribution(map._layers[i].getAttribution()); } } this._update(); return this._container; }, // @method setPrefix(prefix: String): this // Sets the text before the attributions. setPrefix: function (prefix) { this.options.prefix = prefix; this._update(); return this; }, // @method addAttribution(text: String): this // Adds an attribution text (e.g. `'Vector data &copy; Mapbox'`). addAttribution: function (text) { if (!text) { return this; } if (!this._attributions[text]) { this._attributions[text] = 0; } this._attributions[text]++; this._update(); return this; }, // @method removeAttribution(text: String): this // Removes an attribution text. removeAttribution: function (text) { if (!text) { return this; } if (this._attributions[text]) { this._attributions[text]--; this._update(); } return this; }, _update: function () { if (!this._map) { return; } var attribs = []; for (var i in this._attributions) { if (this._attributions[i]) { attribs.push(i); } } var prefixAndAttribs = []; if (this.options.prefix) { prefixAndAttribs.push(this.options.prefix); } if (attribs.length) { prefixAndAttribs.push(attribs.join(', ')); } this._container.innerHTML = prefixAndAttribs.join(' | '); } }); // @namespace Map // @section Control options // @option attributionControl: Boolean = true // Whether a [attribution control](#control-attribution) is added to the map by default. L.Map.mergeOptions({ attributionControl: true }); L.Map.addInitHook(function () { if (this.options.attributionControl) { new L.Control.Attribution().addTo(this); } }); // @namespace Control.Attribution // @factory L.control.attribution(options: Control.Attribution options) // Creates an attribution control. L.control.attribution = function (options) { return new L.Control.Attribution(options); };