+ var addOverlay = function (layer, name, maxArea) {
+ var item = $('<li>')
+ .tooltip({
+ placement: 'top'
+ })
+ .appendTo(overlays);
+
+ var label = $('<label>')
+ .appendTo(item);
+
+ var checked = map.hasLayer(layer);
+
+ var input = $('<input>')
+ .attr('type', 'checkbox')
+ .prop('checked', checked)
+ .appendTo(label);
+
+ label.append(I18n.t('javascripts.map.layers.' + name));
+
+ input.on('change', function() {
+ checked = input.is(':checked');
+ if (checked) {
+ map.addLayer(layer);
+ } else {
+ map.removeLayer(layer);
+ }
+ map.fire('overlaylayerchange', {layer: layer});
+ });
+
+ map.on('layeradd layerremove', function() {
+ input.prop('checked', map.hasLayer(layer));
+ });
+
+ map.on('zoomend', function() {
+ var disabled = map.getBounds().getSize() >= maxArea;
+ $(input).prop('disabled', disabled);
+
+ if (disabled && $(input).is(':checked')) {
+ $(input).prop('checked', false)
+ .trigger('change');
+ checked = true;
+ } else if (!disabled && !$(input).is(':checked') && checked) {
+ $(input).prop('checked', true)
+ .trigger('change');
+ }
+
+ $(item).attr('class', disabled ? 'disabled' : '');
+ item.attr('data-original-title', disabled ?
+ I18n.t('javascripts.site.map_' + name + '_zoom_in_tooltip') : '');
+ });
+ };
+
+ addOverlay(map.noteLayer, 'notes', OSM.MAX_NOTE_REQUEST_AREA);
+ addOverlay(map.dataLayer, 'data', OSM.MAX_REQUEST_AREA);
+ addOverlay(map.gpsLayer, 'gps', Number.POSITIVE_INFINITY);
+ }
+
+ options.sidebar.addPane($ui);
+
+ function toggle(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ options.sidebar.togglePane($ui, button);
+ $('.leaflet-control .control-button').tooltip('hide');