]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/leaflet.note.js
Enable/disable some context-menu options conditional on zoom
[rails.git] / app / assets / javascripts / leaflet.note.js
index 43717f2c1acd0ea2fd335151e22e903892a50a09..8451e9b72eb3742c3d4a08cfcfa708641d45a23b 100644 (file)
@@ -1,39 +1,31 @@
-L.Control.Note = L.Control.extend({
-    options: {
-        position: 'topright',
-        title: 'Notes',
-    },
+L.OSM.note = function (options) {
+  var control = L.control(options);
 
 
-    onAdd: function (map) {
-        var className = 'leaflet-control-locate',
-            classNames = className + ' leaflet-control-zoom leaflet-bar leaflet-control',
-            container = L.DomUtil.create('div', classNames);
+  control.onAdd = function (map) {
+    var $container = $('<div>')
+      .attr('class', 'control-note');
 
 
-        var link = L.DomUtil.create('a', 'leaflet-bar-part leaflet-bar-part-single', container);
-        link.href = '#';
-        link.title = this.options.title;
+    var link = $('<a>')
+      .attr('class', 'control-button')
+      .attr('href', '#')
+      .html('<span class="icon note"></span>')
+      .appendTo($container);
 
 
-        L.DomEvent
-            .on(link, 'click', L.DomEvent.stopPropagation)
-            .on(link, 'click', L.DomEvent.preventDefault)
-            .on(link, 'click', this._toggle, this)
-            .on(link, 'dblclick', L.DomEvent.stopPropagation);
+    map.on('zoomend', update);
 
 
-        this.map = map;
+    function update() {
+      var disabled = OSM.STATUS === "database_offline" || map.getZoom() < 12;
+      link
+        .toggleClass('disabled', disabled)
+        .attr('data-original-title', I18n.t(disabled ?
+          'javascripts.site.createnote_disabled_tooltip' :
+          'javascripts.site.createnote_tooltip'));
+    }
 
 
-        return container;
-    },
+    update();
 
 
-    // TODO: this relies on notesLayer on the map
-    _toggle: function() {
-        if (this.map.hasLayer(this.map.noteLayer)) {
-            this.map.removeLayer(this.map.noteLayer);
-        } else {
-            this.map.addLayer(this.map.noteLayer);
-        }
-    }
-});
+    return $container[0];
+  };
 
 
-L.control.note = function(options) {
-    return new L.Control.Note(options);
+  return control;
 };
 };