]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/leaflet.share.js
Add clearer close action, refactor base layer code
[rails.git] / app / assets / javascripts / leaflet.share.js
1 L.OSM.share = function (options) {
2   var control = L.control(options);
3
4   control.onAdd = function (map) {
5     var $container = $('<div>')
6       .attr('class', 'control-share');
7
8     $('<a>')
9       .attr('class', 'control-button')
10       .attr('href', '#')
11       .attr('title', 'Share')
12       .html('<span class="icon share"></span>')
13       .on('click', toggle)
14       .appendTo($container);
15
16     var $ui = $('<div>')
17       .attr('class', 'share-ui');
18
19     $('<section>')
20       .appendTo($ui)
21       .append(
22           $('<a>')
23             .html('&raquo;')
24             .attr('class', 'close-button')
25             .attr('href', '#')
26             .bind('click', toggle))
27       .append(
28       $('<h2>')
29         .text(I18n.t('javascripts.share.title')));
30
31     var $share_link = $('<section></section>')
32       .appendTo($ui);
33
34     var $title = $('<h3></h3>')
35       .text(I18n.t('javascripts.share.link'))
36       .appendTo($share_link);
37
38     var $input = $('<input />')
39       .attr('type', 'text')
40       .appendTo($share_link);
41
42     var $list = $('<ul>')
43       .appendTo($share_link);
44
45     var $short_option = $('<li>')
46       .appendTo($list);
47
48     var $short_url_label = $('<label></label>')
49       .attr('for', 'short_url')
50       .appendTo($short_option);
51
52     var $short_url_input = $('<input />')
53       .attr('id', 'short_url')
54       .attr('type', 'checkbox')
55       .prop('checked', 'checked')
56       .appendTo($short_url_label)
57       .bind('change', function() {
58           options.short = $(this).prop('checked');
59           update();
60       });
61
62     $short_url_label.append(I18n.t('javascripts.share.short_url'));
63
64     map.on('moveend layeradd layerremove', update);
65
66     options.sidebar.addPane($ui);
67
68     function toggle(e) {
69       e.stopPropagation();
70       e.preventDefault();
71       options.sidebar.togglePane($ui);
72       $input.select();
73     }
74
75     function update() {
76       $input.val(
77           options.short ? options.getShortUrl(map) : options.getUrl(map)
78       );
79     }
80
81     return $container[0];
82   };
83
84   return control;
85 };