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:
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',