commit f339a82425d14ba76d994878c8a3aa07c38fb5d1
parent 65ffa2fe056083e8d397c889a7abf297cae77d3a
Author: Sergej Orlov <wladimirych@gmail.com>
Date: Mon, 3 Apr 2017 11:58:12 +0300
[track list] store track visibility in url
Diffstat:
4 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/src/lib/leaflet.control.track-list/lib/geo_file_exporters.js b/src/lib/leaflet.control.track-list/lib/geo_file_exporters.js
@@ -143,9 +143,9 @@ function encodeUrlSafeBase64(s) {
);
}
-function saveToString(segments, name, color, measureTicksShown, wayPoints) {
+function saveToString(segments, name, color, measureTicksShown, wayPoints, trackHidden) {
var stringified = [];
- stringified.push(packNumber(2)); // version
+ stringified.push(packNumber(3)); // version
name = utf8.encode(name);
stringified.push(packNumber(name.length));
stringified.push(name);
@@ -179,6 +179,7 @@ function saveToString(segments, name, color, measureTicksShown, wayPoints) {
);
stringified.push(packNumber(+color || 0));
stringified.push(packNumber(measureTicksShown ? 1 : 0));
+ stringified.push(packNumber(trackHidden ? 1 : 0));
stringified.push(packNumber(wayPoints.length));
if (wayPoints.length) {
diff --git a/src/lib/leaflet.control.track-list/lib/geo_file_formats.js b/src/lib/leaflet.control.track-list/lib/geo_file_formats.js
@@ -555,7 +555,7 @@ function parseStringified(s, oldVersion) {
arcUnit = ((1 << 24) - 1) / 360,
x, y,
error, version, midX, midY, /*symbol,*/ waypointName,
- wayPoints = [], color, measureTicksShown;
+ wayPoints = [], color, measureTicksShown, trackHidden = false;
s = decodeUrlSafeBase64(s);
if (!s) {
return [{name: 'Text encoded track', error: ['CORRUPT']}];
@@ -567,7 +567,7 @@ function parseStringified(s, oldVersion) {
} else {
version = s.readNumber();
}
- if (version !== 0 && version !== 1 && version !== 2) {
+ if (version !== 0 && version !== 1 && version !== 2 && version !== 3) {
return [{name: 'Text encoded track', error: ['CORRUPT']}];
}
n = s.readNumber();
@@ -611,7 +611,18 @@ function parseStringified(s, oldVersion) {
throw e;
}
}
- if (version === 2) {
+ if (version >= 3) {
+ try {
+ trackHidden = !!(s.readNumber())
+ } catch (e) {
+ if (e.message.match('Unexpected end of line while unpacking number')) {
+ error = ['CORRUPT'];
+ } else {
+ throw e;
+ }
+ }
+ }
+ if (version >= 2) {
try {
pointsCount = s.readNumber();
if (pointsCount) {
@@ -650,7 +661,8 @@ function parseStringified(s, oldVersion) {
error: error,
points: wayPoints,
color: color,
- measureTicksShown: measureTicksShown
+ measureTicksShown: measureTicksShown,
+ trackHidden: trackHidden
};
return [geoData];
}
diff --git a/src/lib/leaflet.control.track-list/lib/track_urls_versions.txt b/src/lib/leaflet.control.track-list/lib/track_urls_versions.txt
@@ -0,0 +1,10 @@
+track://...
+ only tracks
+1
+ color
+ distance measure on/off
+2
+ waypoints
+3
+ visibility on/off
+
diff --git a/src/lib/leaflet.control.track-list/track-list.js b/src/lib/leaflet.control.track-list/track-list.js
@@ -484,7 +484,7 @@ L.Control.TrackList = L.Control.extend({
copyLinkToClipboard: function(track, mouseEvent) {
this.stopActiveDraw();
- var s = this.trackToString(track);
+ var s = this.trackToString(track, true);
var url = window.location + '&nktk=' + s;
copyToClipboard(url, mouseEvent);
},
@@ -844,7 +844,7 @@ L.Control.TrackList = L.Control.extend({
var track = {
name: ko.observable(geodata.name),
color: ko.observable(color),
- visible: ko.observable(true),
+ visible: ko.observable(!geodata.trackHidden),
length: ko.observable('empty'),
measureTicksShown: ko.observable(geodata.measureTicksShown || false),
feature: L.featureGroup([]),
@@ -948,7 +948,7 @@ L.Control.TrackList = L.Control.extend({
}
},
- trackToString: function(track) {
+ trackToString: function(track, forceVisible) {
var lines = this.getTrackPolylines(track).map(function(line) {
var points = line.getLatLngs();
points = L.LineUtil.simplifyLatlngs(points, 360 / (1 << 24));
@@ -956,7 +956,7 @@ L.Control.TrackList = L.Control.extend({
}
);
return geoExporters.saveToString(lines, track.name(), track.color(), track.measureTicksShown(),
- this.getTrackPoints(track)
+ this.getTrackPoints(track), forceVisible ? false : !track.visible()
);
},