Add share button to map
authorTom MacWright <tom@macwright.org>
Mon, 10 Jun 2013 19:09:34 +0000 (12:09 -0700)
committerJohn Firebaugh <john.firebaugh@gmail.com>
Thu, 18 Jul 2013 17:31:20 +0000 (10:31 -0700)
app/assets/javascripts/application.js
app/assets/javascripts/index.js
app/assets/javascripts/leaflet.share.js [new file with mode: 0644]
app/assets/javascripts/templates/map/share.jst.ejs [new file with mode: 0644]
config/locales/en.yml

index ea29ec2..62c13bb 100644 (file)
@@ -14,6 +14,7 @@
 //= require map
 //= require menu
 //= require sidebar
+//= require leaflet.share
 //= require richtext
 //= require resize
 //= require geocoder
index 9aed3c3..ce9c8e9 100644 (file)
@@ -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 (file)
index 0000000..9c3d942
--- /dev/null
@@ -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 (file)
index 0000000..b86c04e
--- /dev/null
@@ -0,0 +1,7 @@
+<h2><%- I18n.t('javascripts.share.title') %></h2>
+
+<input type='text' id='share-coordinates' />
+
+<button id='cancel'>
+<%- I18n.t('javascripts.share.cancel') %>
+</button>
index a264aff..d616872 100644 (file)
@@ -2039,6 +2039,9 @@ en:
       last_changed: "Last changed"
       ago_html: "%{when} ago"
   javascripts:
+    share:
+      title: "Share"
+      cancel: "Cancel"
     map:
       base:
         standard: Standard