]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/leaflet.share.js
Auto-select share link text
[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     $('<header>')
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.share.title')));
31
32     var $share_link = $('<section>')
33       .appendTo($ui);
34
35     var $title = $('<h4>')
36       .text(I18n.t('javascripts.share.link'))
37       .appendTo($share_link);
38
39     var $input = $('<input />')
40       .attr('type', 'text')
41       .on('click', select)
42       .appendTo($share_link);
43
44     var $list = $('<ul>')
45       .appendTo($share_link);
46
47     var $short_option = $('<li>')
48       .appendTo($list);
49
50     var $short_url_label = $('<label></label>')
51       .attr('for', 'short_url')
52       .appendTo($short_option);
53
54     var $short_url_input = $('<input />')
55       .attr('id', 'short_url')
56       .attr('type', 'checkbox')
57       .prop('checked', 'checked')
58       .appendTo($short_url_label)
59       .bind('change', function() {
60           options.short = $(this).prop('checked');
61           update();
62       });
63
64     $short_url_label.append(I18n.t('javascripts.share.short_url'));
65
66     map.on('moveend layeradd layerremove', update);
67
68     options.sidebar.addPane($ui);
69
70     function toggle(e) {
71       e.stopPropagation();
72       e.preventDefault();
73       options.sidebar.togglePane($ui);
74       $input.select();
75     }
76
77     function update() {
78       $input.val(
79           options.short ? options.getShortUrl(map) : options.getUrl(map)
80       );
81     }
82
83     function select() {
84       $(this).select();
85     }
86
87     return $container[0];
88   };
89
90   return control;
91 };