]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/leaflet.key.js
Merge pull request #3552 from rugk/patch-1
[rails.git] / app / assets / javascripts / leaflet.key.js
1 L.OSM.key = function (options) {
2   var control = L.control(options);
3
4   control.onAdd = function (map) {
5     var $container = $("<div>")
6       .attr("class", "control-key");
7
8     var button = $("<a>")
9       .attr("class", "control-button")
10       .attr("href", "#")
11       .html("<span class=\"icon key\"></span>")
12       .on("click", toggle)
13       .appendTo($container);
14
15     var $ui = $("<div>")
16       .attr("class", "key-ui");
17
18     $("<div>")
19       .attr("class", "sidebar_heading")
20       .appendTo($ui)
21       .append(
22         $("<button type='button' class='btn-close float-end mt-1'>")
23           .attr("aria-label", I18n.t("javascripts.close"))
24           .bind("click", toggle))
25       .append(
26         $("<h4>")
27           .text(I18n.t("javascripts.key.title")));
28
29     var $section = $("<div>")
30       .attr("class", "section")
31       .appendTo($ui);
32
33     options.sidebar.addPane($ui);
34
35     $ui
36       .on("show", shown)
37       .on("hide", hidden);
38
39     map.on("baselayerchange", updateButton);
40
41     updateButton();
42
43     function shown() {
44       map.on("zoomend baselayerchange", update);
45       $section.load("/key", update);
46     }
47
48     function hidden() {
49       map.off("zoomend baselayerchange", update);
50     }
51
52     function toggle(e) {
53       e.stopPropagation();
54       e.preventDefault();
55       if (!button.hasClass("disabled")) {
56         options.sidebar.togglePane($ui, button);
57       }
58       $(".leaflet-control .control-button").tooltip("hide");
59     }
60
61     function updateButton() {
62       var disabled = ["mapnik", "cyclemap"].indexOf(map.getMapBaseLayerId()) === -1;
63       button
64         .toggleClass("disabled", disabled)
65         .attr("data-bs-original-title",
66               I18n.t(disabled ?
67                 "javascripts.key.tooltip_disabled" :
68                 "javascripts.key.tooltip"));
69     }
70
71     function update() {
72       var layer = map.getMapBaseLayerId(),
73           zoom = map.getZoom();
74
75       $(".mapkey-table-entry").each(function () {
76         var data = $(this).data();
77         if (layer === data.layer && zoom >= data.zoomMin && zoom <= data.zoomMax) {
78           $(this).show();
79         } else {
80           $(this).hide();
81         }
82       });
83     }
84
85     return $container[0];
86   };
87
88   return control;
89 };