From: Tom MacWright Date: Mon, 10 Jun 2013 19:09:34 +0000 (-0700) Subject: Add share button to map X-Git-Tag: live~4900^2~62 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/36fac06bd5ae1b9c26e44945c41053e0ce6829f1?ds=sidebyside Add share button to map --- diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index ea29ec21c..62c13bb9e 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -14,6 +14,7 @@ //= require map //= require menu //= require sidebar +//= require leaflet.share //= require richtext //= require resize //= require geocoder diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js index 9aed3c3f7..ce9c8e975 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@ -21,9 +21,12 @@ $(document).ready(function () { OSM.mapUI().addTo(map); + L.control.share().addTo(map); + L.control.locate({ position: 'topright' }).addTo(map); + L.control.scale().addTo(map); map.attributionControl.setPrefix(permalinks); diff --git a/app/assets/javascripts/leaflet.share.js b/app/assets/javascripts/leaflet.share.js new file mode 100644 index 000000000..9c3d94218 --- /dev/null +++ b/app/assets/javascripts/leaflet.share.js @@ -0,0 +1,51 @@ +//= require templates/map/share + +L.Control.Share = L.Control.extend({ + options: { + position: 'topright', + title: 'Share' + }, + + onAdd: function (map) { + var className = 'leaflet-control-locate', + classNames = className + ' leaflet-control-zoom leaflet-bar leaflet-control', + container = L.DomUtil.create('div', classNames); + + var self = this; + this._layer = new L.LayerGroup(); + this._layer.addTo(map); + this._event = undefined; + + var link = L.DomUtil.create('a', 'leaflet-bar-part leaflet-bar-part-single', container); + link.href = '#'; + link.title = this.options.title; + + this._uiPane = L.DomUtil.create('div', 'leaflet-map-ui', map._container); + + L.DomEvent + .on(link, 'click', L.DomEvent.stopPropagation) + .on(link, 'click', L.DomEvent.preventDefault) + .on(link, 'click', this.toggle, this) + .on(link, 'dblclick', L.DomEvent.stopPropagation); + + return container; + }, + + toggle: function() { + var controlContainer = $('.leaflet-control-container .leaflet-top.leaflet-right'); + + if ($(this._uiPane).is(':visible')) { + $(this._uiPane).hide(); + controlContainer.css({paddingRight: '0'}); + } else { + $(this._uiPane) + .show() + .html(JST["templates/map/share"]()); + controlContainer.css({paddingRight: '200px'}); + } + } +}); + +L.control.share = function(options) { + return new L.Control.Share(options); +}; diff --git a/app/assets/javascripts/templates/map/share.jst.ejs b/app/assets/javascripts/templates/map/share.jst.ejs new file mode 100644 index 000000000..b86c04e12 --- /dev/null +++ b/app/assets/javascripts/templates/map/share.jst.ejs @@ -0,0 +1,7 @@ +

<%- I18n.t('javascripts.share.title') %>

+ + + + diff --git a/config/locales/en.yml b/config/locales/en.yml index a264aff94..d616872c2 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2039,6 +2039,9 @@ en: last_changed: "Last changed" ago_html: "%{when} ago" javascripts: + share: + title: "Share" + cancel: "Cancel" map: base: standard: Standard