]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/leaflet.key.js
Merge remote-tracking branch 'osmlab/map-ui'
[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       .attr('title', I18n.t('javascripts.key.tooltip'))
12       .html('<span class="icon key"></span>')
13       .on('click', toggle)
14       .appendTo($container);
15
16     var $ui = $('<div>')
17       .attr('class', 'key-ui');
18
19     $('<div>')
20       .attr('class', 'sidebar_heading')
21       .appendTo($ui)
22       .append(
23         $('<a>')
24           .text(I18n.t('javascripts.close'))
25           .attr('class', 'sidebar_close')
26           .attr('href', '#')
27           .bind('click', toggle))
28       .append(
29         $('<h4>')
30           .text(I18n.t('javascripts.key.title')));
31
32     var $section = $('<div>')
33       .attr('class', 'section')
34       .appendTo($ui);
35
36     options.sidebar.addPane($ui);
37
38     $ui
39       .on('show', shown)
40       .on('hide', hidden);
41
42     map.on('baselayerchange', updateButton);
43
44     updateButton();
45
46     function shown() {
47       map.on('zoomend baselayerchange', update);
48       $section.load('/key', update);
49     }
50
51     function hidden() {
52       map.off('zoomend baselayerchange', update);
53     }
54
55     function toggle(e) {
56       e.stopPropagation();
57       e.preventDefault();
58       if (!button.hasClass('disabled')) {
59         options.sidebar.togglePane($ui, button);
60       }
61     }
62
63     function updateButton() {
64       var layer = map.getMapBaseLayerId();
65       button.toggleClass('disabled', layer !== 'mapnik');
66     }
67
68     function update() {
69       var layer = map.getMapBaseLayerId(),
70         zoom = map.getZoom();
71
72       $('.mapkey-table-entry').each(function () {
73         var data = $(this).data();
74         if (layer == data.layer && zoom >= data.zoomMin && zoom <= data.zoomMax) {
75           $(this).show();
76         } else {
77           $(this).hide();
78         }
79       });
80     }
81
82     return $container[0];
83   };
84
85   return control;
86 };