nakarte

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

commit 664f44a437e5384d1298741e49044c443421e5fb
parent be9f6664e6b2f3f8c9f7b6fce2cc52a4cf1df5d5
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Mon, 19 Nov 2018 23:08:56 +0100

[tracks] change getting of track name for Strava

* parse html  instead of regexps
* track name now additionally includes title (was author, date, distance, type of activity)

Diffstat:
Msrc/lib/leaflet.control.track-list/lib/strava.js | 28++++++++++++++++++++--------
1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/src/lib/leaflet.control.track-list/lib/strava.js b/src/lib/leaflet.control.track-list/lib/strava.js @@ -24,11 +24,12 @@ function stravaRequestOptions(url) { }]; return { requestOptions, + extra: {trackId} } } -function stravaParser(name, responses) { +function stravaParser(name, responses, extra) { if (responses.length !== 2) { throw new Error(`Invalid responses array length ${responses.length}`); } @@ -44,13 +45,24 @@ function stravaParser(name, responses) { return [{name: name, error: 'UNSUPPORTED'}]; } - let s = responses[0].responseBinaryText; - s = utf8_decode(s); - let m = s.match(/<meta [^>]*twitter:description[^>]*>/); - if (m) { - m = m[0].match(/content='([^']+)'/); - name = m[1]; - } + name = `Strava ${extra.trackId}`; + try { + const dom = (new DOMParser()).parseFromString(responses[0].responseBinaryText, "text/html"); + let title = dom.querySelector('meta[property=og\\:title]').content; + title = utf8_decode(title); + // name and description + const m = title.match(/^(.+) - ([^-]+)/); + if (m) { + // reverse name and description + name = `${m[2]} ${m[1]}`; + title = dom.querySelector('title').text; + let date = title.match(/ (on \d{1,2} \w+ \d{4}) /)[1]; + if (date) { + name += ' ' + date; + } + } + + } catch (e) {} const geodata = { name: name || 'Strava',