commit 04af06ac009e1f9a30f3ec62e99424968382fa4a
parent c3b3e6d21c7d6919ef55050815c54bfc76d226b8
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Sun, 26 Mar 2017 20:15:59 +0300
[azimuth] azimuth and track edit disable each other when activated
Diffstat:
6 files changed, 61 insertions(+), 12 deletions(-)
diff --git a/src/App.js b/src/App.js
@@ -111,11 +111,12 @@ function setUp() {
 
     L.DomEvent.on(window, 'beforeunload', () => tracklist.saveTracksToStorage());
 
-    tracklist.on('startedit elevation-shown', () => azimuthControl.setEnabled(false));
+    tracklist.on('startedit', () => azimuthControl.setEnabled(false));
+    tracklist.on('elevation-shown', () => azimuthControl.hideProfile());
     azimuthControl.on('enabled', () => {
         tracklist.stopEditLine();
-        tracklist.hideElevationProfile();
-    })
+    });
+    azimuthControl.on('elevation-shown', () => tracklist.hideElevationProfile());
 }
 
 export default {setUp};
diff --git a/src/lib/leaflet.control.azimuth/control.html b/src/lib/leaflet.control.azimuth/control.html
@@ -1,5 +1,9 @@
 <div class="contents">
-    <div class="button-minimize" data-bind="click: onMinimizeButtonClick"></div>
+    <div class="left-buttons">
+        <div class="button-minimize" data-bind="click: onMinimizeButtonClick"></div>
+        <div class="button-minimize icon-on-off"
+             data-bind="click: onEnableButtonClick, css: {'state-on': _enabled()}"></div>
+    </div>
     <table>
         <tr>
             <td>True azimuth</td>
diff --git a/src/lib/leaflet.control.azimuth/index.js b/src/lib/leaflet.control.azimuth/index.js
@@ -55,6 +55,7 @@ L.Control.Azimuth = L.Control.extend({
 
         initialize: function(options) {
             L.Control.prototype.initialize.call(this, options);
+            this._enabled = ko.observable(false);
             this.trueAzimuth = ko.observable(null);
             this.magneticAzimuth = ko.observable(null);
             this.distance = ko.observable(null);
@@ -94,11 +95,11 @@ L.Control.Azimuth = L.Control.extend({
         },
 
         onClick: function() {
-            this.setEnabled(true);
+            this.setExpanded(true);
         },
 
         onMinimizeButtonClick: function(e) {
-            setTimeout(() => this.setEnabled(false), 0);
+            setTimeout(() => this.setExpanded(false), 0);
         },
 
         onMarkerDrag: function(e) {
@@ -112,25 +113,44 @@ L.Control.Azimuth = L.Control.extend({
             }
         },
 
+        setExpanded: function(expanded) {
+            if (!!expanded === this.isExpanded()) {
+                return;
+            }
+            if (expanded) {
+                L.DomUtil.addClass(this._container, 'expanded');
+            } else {
+                L.DomUtil.removeClass(this._container, 'expanded');
+                this.hideProfile();
+                this.setPoints({start: null, end: null});
+            }
+            this.setEnabled(expanded);
+        },
+
         setEnabled: function(enabled) {
             if (!!enabled === this.isEnabled()) {
                 return;
             }
             if (enabled) {
-                L.DomUtil.addClass(this._container, 'expanded');
                 L.DomUtil.addClass(this._map._container, 'azimuth-control-active');
                 this._map.on('click', this.onMapClick, this);
                 this.fire('enabled');
             } else {
-                L.DomUtil.removeClass(this._container, 'expanded');
                 L.DomUtil.removeClass(this._map._container, 'azimuth-control-active');
                 this._map.off('click', this.onMapClick, this);
-                this.setPoints({start: null, end: null});
-                this.hideProfile();
             }
+            this._enabled(!!enabled);
         },
 
         isEnabled: function() {
+            return !!this._enabled();
+        },
+
+        onEnableButtonClick: function() {
+            this.setEnabled(!this.isEnabled());
+        },
+
+        isExpanded: function() {
             return L.DomUtil.hasClass(this._container, 'expanded');
         },
 
@@ -210,6 +230,7 @@ L.Control.Azimuth = L.Control.extend({
                 sightLine: true
             });
             this.elevationControl.on('remove', () => this.elevationControl = null);
+            this.fire('elevation-shown');
 
         },
 
diff --git a/src/lib/leaflet.control.azimuth/on-off-power-button.svg b/src/lib/leaflet.control.azimuth/on-off-power-button.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 15 15" style="enable-background:new 0 0 15 15;" xml:space="preserve">
+<g>
+	<path style="fill:#777;" d="M10.5,1.674V4c1.215,0.912,2,2.364,2,4c0,2.762-2.238,5-5,5s-5-2.238-5-5c0-1.636,0.785-3.088,2-4
+		V1.674C2.135,2.797,0.5,5.208,0.5,8c0,3.866,3.134,7,7,7s7-3.134,7-7C14.5,5.208,12.865,2.797,10.5,1.674z"/>
+	<path style="fill:#777;" d="M8.5,7.003V0.997C8.5,0.446,8.056,0,7.5,0c-0.553,0-1,0.453-1,0.997v6.006C6.5,7.554,6.944,8,7.5,8
+		C8.053,8,8.5,7.547,8.5,7.003z"/>
+</g>
+</svg>
diff --git a/src/lib/leaflet.control.azimuth/style.css b/src/lib/leaflet.control.azimuth/style.css
@@ -24,10 +24,21 @@
     overflow: hidden;
 }
 
-.leaflet-control-azimuth .button-minimize {
+.leaflet-control-azimuth .left-buttons {
     float: left;
 }
 
+.leaflet-control-azimuth .icon-on-off {
+    background-image: url('on-off-power-button.svg') !important;
+    background-size: 14px;
+    position: relative;
+    top: 10px;
+}
+
+.leaflet-control-azimuth .state-on {
+    background-color: #99d5ff;
+}
+
 .leaflet-control-azimuth table{
     border-collapse: collapse;
     line-height: 16px;
@@ -38,6 +49,7 @@
 .leaflet-control-azimuth td:last-child {
     padding-left: 4px;
     text-align: center;
+    width: 5.5em;
 }
 
 .leaflet-control-azimuth .buttons {
diff --git a/src/lib/leaflet.control.layers.minimize/style.css b/src/lib/leaflet.control.layers.minimize/style.css
@@ -1,4 +1,4 @@
-.button-minimize {
+.leaflet-control-layers .button-minimize {
     float: right;
 }