1 L.OSM.Layers = L.Control.extend({
2 onAdd: function (map) {
5 return this.$container[0];
8 _initLayout: function () {
10 layers = this.options.layers;
12 this.$container = $('<div>')
13 .attr('class', 'control-layers');
16 .attr('class', 'control-button')
18 .attr('title', 'Layers')
19 .html('<span class="icon layers"></span>')
20 .appendTo(this.$container);
22 if (OSM.STATUS != 'api_offline' && OSM.STATUS != 'database_offline') {
24 .attr('class', 'layers-ui')
25 .appendTo(this.options.uiPane);
28 .text(I18n.t('javascripts.map.layers.header'))
31 var overlaySection = $('<section>')
32 .addClass('overlay-layers')
36 .text(I18n.t('javascripts.map.layers.overlays'))
37 .appendTo(overlaySection);
40 .appendTo(overlaySection);
42 function addOverlay(layer, name) {
46 var label = $('<label>')
49 var input = $('<input>')
50 .attr('type', 'checkbox')
51 .prop('checked', map.hasLayer(layer))
56 input.on('change', function() {
57 if (input.is(':checked')) {
60 map.removeLayer(layer);
64 map.on('layeradd layerremove', function() {
65 input.prop('checked', map.hasLayer(layer));
69 addOverlay(map.noteLayer, I18n.t('javascripts.map.layers.notes'));
70 addOverlay(map.dataLayer, I18n.t('javascripts.map.layers.data'));
73 var baseSection = $('<section>')
74 .addClass('base-layers')
78 .text(I18n.t('javascripts.map.layers.base'))
79 .appendTo(baseSection);
82 .appendTo(baseSection);
84 layers.forEach(function(layer) {
88 if (map.hasLayer(layer)) {
89 item.addClass('active');
95 map.whenReady(function() {
96 var miniMap = L.map(div[0], {attributionControl: false, zoomControl: false})
97 .setView(map.getCenter(), Math.max(map.getZoom() - 2, 0))
98 .addLayer(new layer.constructor);
100 miniMap.dragging.disable();
101 miniMap.touchZoom.disable();
102 miniMap.doubleClickZoom.disable();
103 miniMap.scrollWheelZoom.disable();
105 map.on('moveend', function() {
106 miniMap.setView(map.getCenter(), Math.max(map.getZoom() - 2, 0));
109 div.data('map', miniMap);
112 var label = $('<label>')
113 .text(layer.options.name)
116 item.on('click', function() {
117 layers.forEach(function(other) {
118 if (other === layer) {
121 map.removeLayer(other);
126 map.on('layeradd layerremove', function() {
127 item.toggleClass('active', map.hasLayer(layer));
131 $(link).on('click', $.proxy(this.toggleLayers, this));
134 toggleLayers: function (e) {
138 var controlContainer = $('.leaflet-control-container .leaflet-top.leaflet-right');
140 if (this.$ui.is(':visible')) {
141 $(this.options.uiPane).hide();
142 controlContainer.css({paddingRight: '0'});
144 $(this.options.uiPane).show();
145 controlContainer.css({paddingRight: '230px'});
148 this.$ui.find('.base-layers .leaflet-container').each(function() {
149 $(this).data('map').invalidateSize();
154 L.OSM.layers = function(options) {
155 return new L.OSM.Layers(options);