nakarte

Source code of https://map.sikmir.ru (fork)
git clone git://git.sikmir.ru/nakarte
Log | Files | Refs | LICENSE

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:
Msrc/lib/leaflet.control.track-list/lib/geo_file_exporters.js | 5+++--
Msrc/lib/leaflet.control.track-list/lib/geo_file_formats.js | 20++++++++++++++++----
Asrc/lib/leaflet.control.track-list/lib/track_urls_versions.txt | 10++++++++++
Msrc/lib/leaflet.control.track-list/track-list.js | 8++++----
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() ); },