]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/leaflet.key.js
238d70c5f25c08c71688a9e9c851ba338268d9be
[rails.git] / app / assets / javascripts / leaflet.key.js
1 L.OSM.key = function (options) {
2   var control = L.OSM.sidebarPane(options);
3
4   control.onAdd = function (map) {
5     var $container = $("<div>")
6       .attr("class", "control-key");
7
8     var button = this.makeButton("key", null, toggle)
9       .appendTo($container);
10
11     var $ui = this.makeUI("key-ui", "javascripts.key.title", toggle);
12
13     var $section = $("<div>")
14       .attr("class", "section")
15       .appendTo($ui);
16
17     options.sidebar.addPane($ui);
18
19     $ui
20       .on("show", shown)
21       .on("hide", hidden);
22
23     map.on("baselayerchange", updateButton);
24
25     updateButton();
26
27     function shown() {
28       map.on("zoomend baselayerchange", update);
29       $section.load("/key", update);
30     }
31
32     function hidden() {
33       map.off("zoomend baselayerchange", update);
34     }
35
36     function toggle(e) {
37       e.stopPropagation();
38       e.preventDefault();
39       if (!button.hasClass("disabled")) {
40         options.sidebar.togglePane($ui, button);
41       }
42       $(".leaflet-control .control-button").tooltip("hide");
43     }
44
45     function updateButton() {
46       var disabled = ["mapnik", "cyclemap"].indexOf(map.getMapBaseLayerId()) === -1;
47       button
48         .toggleClass("disabled", disabled)
49         .attr("data-bs-original-title",
50               I18n.t(disabled ?
51                 "javascripts.key.tooltip_disabled" :
52                 "javascripts.key.tooltip"));
53     }
54
55     function update() {
56       var layer = map.getMapBaseLayerId(),
57           zoom = map.getZoom();
58
59       $(".mapkey-table-entry").each(function () {
60         var data = $(this).data();
61         if (layer === data.layer && zoom >= data.zoomMin && zoom <= data.zoomMax) {
62           $(this).show();
63         } else {
64           $(this).hide();
65         }
66       });
67     }
68
69     return $container[0];
70   };
71
72   return control;
73 };