From 25429b3c247a43e0a2f9eeeb177b6882c20ba320 Mon Sep 17 00:00:00 2001 From: Gautier P Date: Sat, 5 Dec 2020 11:50:30 +0100 Subject: [PATCH] Update prettier version --- config.template.js | 18 +- gulpfile.js | 132 +- index.html | 2254 +++++++++++++------------- js/Browser.js | 6 +- js/LayersConfig.js | 48 +- js/Map.js | 26 +- js/Util.js | 18 +- js/control/Control.Layers.js | 22 +- js/control/Export.js | 32 +- js/control/Itinerary.js | 6 +- js/control/Layers.js | 41 +- js/control/LayersTab.js | 104 +- js/control/Message.js | 14 +- js/control/OpacitySlider.js | 18 +- js/control/OpacitySliderControl.js | 14 +- js/control/Profile.js | 58 +- js/control/RoutingOptions.js | 34 +- js/control/TrackAnalysis.js | 50 +- js/control/TrackMessages.js | 44 +- js/control/TrackStats.js | 10 +- js/index.js | 110 +- js/plugin/Bing.js | 12 +- js/plugin/CircleGoArea.js | 90 +- js/plugin/Elevation.js | 29 +- js/plugin/NogoAreas.js | 202 +-- js/plugin/POIMarkers.js | 58 +- js/plugin/RouteLoaderConverter.js | 788 +++++---- js/plugin/Routing.js | 96 +- js/plugin/RoutingPathQuality.js | 82 +- js/plugin/Search.js | 24 +- js/plugin/Sidebar.js | 34 +- js/plugin/TracksLoader.js | 24 +- js/plugin/leaflet-distance-marker.js | 14 +- js/plugin/leaflet-fullHash.js | 58 +- js/plugin/stravaSegments.js | 16 +- js/router/BRouter.js | 74 +- js/router/brouterCgi.js | 6 +- js/util/Track.js | 24 +- js/util/TrackEdges.js | 8 +- keys.template.js | 4 +- package.json | 4 +- yarn.lock | 264 +-- 42 files changed, 2480 insertions(+), 2490 deletions(-) diff --git a/config.template.js b/config.template.js index 9c29543..4604bf0 100644 --- a/config.template.js +++ b/config.template.js @@ -1,4 +1,4 @@ -(function() { +(function () { var hostname = window.location.hostname; var origin = window.location.protocol + '//' + hostname + (window.location.port ? ':' + window.location.port : ''); @@ -54,7 +54,7 @@ 'vm-forum-velomobil-schnell', 'fastbike-lowtraffic', 'fastbike-asia-pacific', - 'hiking-beta' + 'hiking-beta', ]; // Removes default base layers when 'true'. Useful for only having custom layers (see below). @@ -84,22 +84,22 @@ weight: 5, dashArray: [10, 10], opacity: 0.6, - color: 'magenta' + color: 'magenta', }, track: { weight: 5, color: 'magenta', - opacity: BR.conf.defaultOpacity + opacity: BR.conf.defaultOpacity, }, trackCasing: { weight: 8, color: 'white', // assumed to be same as track, see setOpacity - opacity: BR.conf.defaultOpacity + opacity: BR.conf.defaultOpacity, }, nodata: { - color: 'darkred' - } + color: 'darkred', + }, }; BR.conf.markerColors = { @@ -107,7 +107,7 @@ poi: '#436978', start: '#72b026', via: '#38aadd', - stop: '#d63e2a' + stop: '#d63e2a', }; // transit (intermodal routing) demo config @@ -121,7 +121,7 @@ 'fastbike', 'shortest', 'moped', - 'car-test' + 'car-test', ]; } diff --git a/gulpfile.js b/gulpfile.js index 99a9d61..0778b02 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -34,16 +34,16 @@ var debug = false; var paths = { // see overrides in package.json - scriptsConfig: mainNpmFiles().filter(f => RegExp('url-search-params/.*\\.js', 'i').test(f)), + scriptsConfig: mainNpmFiles().filter((f) => RegExp('url-search-params/.*\\.js', 'i').test(f)), scripts: [ 'node_modules/jquery/dist/jquery.js', 'node_modules/tether/dist/js/tether.js', 'node_modules/async/lib/async.js', - 'node_modules/leaflet/dist/leaflet-src.js' + 'node_modules/leaflet/dist/leaflet-src.js', ] .concat( mainNpmFiles().filter( - f => + (f) => RegExp('.*\\.js', 'i').test(f) && !RegExp('.*\\.min\\.js', 'i').test(f) && !RegExp('url-search-params/.*\\.js', 'i').test(f) @@ -58,13 +58,13 @@ var paths = { 'js/util/*.js', 'js/plugin/*.js', 'js/control/*.js', - 'js/index.js' + 'js/index.js', ]), styles: mainNpmFiles() - .filter(f => RegExp('.*\\.css', 'i').test(f) && !RegExp('.*\\.min\\.css', 'i').test(f)) + .filter((f) => RegExp('.*\\.css', 'i').test(f) && !RegExp('.*\\.min\\.css', 'i').test(f)) .concat('css/*.css'), - images: mainNpmFiles().filter(f => RegExp('.*.+(png|gif|svg)', 'i').test(f)), - fonts: mainNpmFiles().filter(f => RegExp('font-awesome/fonts/.*', 'i').test(f)), + images: mainNpmFiles().filter((f) => RegExp('.*.+(png|gif|svg)', 'i').test(f)), + fonts: mainNpmFiles().filter((f) => RegExp('font-awesome/fonts/.*', 'i').test(f)), locales: 'locales/*.json', layers: 'layers/**/*.geojson', layersDestName: 'layers.js', @@ -72,25 +72,25 @@ var paths = { 'layers/config/config.js', 'layers/config/tree.js', 'layers/config/overrides.js', - 'layers/config/geometry.js' + 'layers/config/geometry.js', ], layersConfigDestName: 'layersConf.js', zip: ['dist/**', 'index.html', 'config.template.js', 'keys.template.js'], dest: 'dist', - destName: 'brouter-web' + destName: 'brouter-web', }; -gulp.task('clean', function(cb) { +gulp.task('clean', function (cb) { del(paths.dest + '/**/*', cb); }); // libs that require loading before config.js -gulp.task('scripts_config', function() { +gulp.task('scripts_config', function () { // just copy for now return gulp.src(paths.scriptsConfig).pipe(gulp.dest(paths.dest)); }); -gulp.task('scripts', function() { +gulp.task('scripts', function () { if (debug) gutil.log(gutil.colors.yellow('Running in Debug mode')); else gutil.log(gutil.colors.green('Running in Release mode')); @@ -106,14 +106,14 @@ gulp.task('scripts', function() { }); // separate, fallback task for debugging (switch manually in index.html) -gulp.task('concat', function() { +gulp.task('concat', function () { return gulp .src(paths.scripts) .pipe(concat(paths.destName + '.src.js')) .pipe(gulp.dest(paths.dest)); }); -gulp.task('styles', function() { +gulp.task('styles', function () { return gulp .src(paths.styles) .pipe( @@ -129,40 +129,40 @@ gulp.task('styles', function() { } return distUrl; - } + }, }) ) .pipe(concat(paths.destName + '.css')) .pipe( cleanCSS({ - rebase: false + rebase: false, }) ) .pipe(postcss([autoprefixer({ remove: false })])) .pipe(gulp.dest(paths.dest)); }); -gulp.task('images', function() { +gulp.task('images', function () { return gulp.src(paths.images).pipe(gulp.dest(paths.dest + '/images')); }); -gulp.task('fonts', function() { +gulp.task('fonts', function () { return gulp.src(paths.fonts).pipe(gulp.dest(paths.dest + '/fonts')); }); -gulp.task('locales', function() { +gulp.task('locales', function () { return gulp.src(paths.locales).pipe(gulp.dest(paths.dest + '/locales')); }); -gulp.task('reload', function(done) { +gulp.task('reload', function (done) { server.reload(); done(); }); -gulp.task('watch', function() { +gulp.task('watch', function () { debug = true; var watcher = gulp.watch(paths.scripts, gulp.series('scripts', 'reload')); - watcher.on('change', function(event) { + watcher.on('change', function (event) { if (event.type === 'deleted') { delete cached.caches.scripts[event.path]; remember.forget('scripts', event.path); @@ -171,35 +171,26 @@ gulp.task('watch', function() { gulp.watch(paths.locales, gulp.series('locales', 'reload')); gulp.watch(paths.styles, gulp.series('styles', 'reload')); gulp.watch(paths.layersConfig, gulp.series('layers_config', 'reload')); - gulp.watch( - ['./index.html'] - .concat(paths.images) - .concat(paths.fonts) - .concat(paths.locales), - gulp.series('reload') - ); + gulp.watch(['./index.html'].concat(paths.images).concat(paths.fonts).concat(paths.locales), gulp.series('reload')); }); // Print paths to console, for manually debugging the gulp build // (comment out corresponding line of paths to print) -gulp.task('log', function() { +gulp.task('log', function () { // var src = paths.scripts // var src = paths.styles // var src = paths.images // var src = paths.locales - var src = paths.scripts - .concat(paths.styles) - .concat(paths.images) - .concat(paths.locales); + var src = paths.scripts.concat(paths.styles).concat(paths.images).concat(paths.locales); return gulp.src(src).pipe(gulpDebug()); }); -gulp.task('inject', function() { +gulp.task('inject', function () { var target = gulp.src('index.html'); var sources = gulp.src(paths.scripts.concat(paths.styles), { base: '.', - read: false + read: false, }); return target.pipe(inject(sources, { relative: true })).pipe(gulp.dest('.')); @@ -209,7 +200,7 @@ var pkg = require('./package.json'); var nextVersion; var ghToken; -gulp.task('release:init', function(cb) { +gulp.task('release:init', function (cb) { var tag = gutil.env.tag; if (!tag) { return cb(new Error('--tag is required')); @@ -227,7 +218,7 @@ gulp.task('release:init', function(cb) { nextVersion = semver.inc(pkg.version, tag); - git.status({ args: '--porcelain', quiet: true }, function(err, stdout) { + git.status({ args: '--porcelain', quiet: true }, function (err, stdout) { if (err) return cb(err); if (stdout.length > 0) { return cb(new Error('Repository is not clean. Please commit or stash your pending modification')); @@ -237,7 +228,7 @@ gulp.task('release:init', function(cb) { }); }); -gulp.task('bump:json', function() { +gulp.task('bump:json', function () { gutil.log(gutil.colors.green('Bump to ' + nextVersion)); return gulp .src(['./package.json']) @@ -245,7 +236,7 @@ gulp.task('bump:json', function() { .pipe(gulp.dest('./')); }); -gulp.task('bump:html', function() { +gulp.task('bump:html', function () { return gulp .src('./index.html') .pipe(replace(/(.*)<\/sup>/, '' + nextVersion + '')) @@ -254,19 +245,19 @@ gulp.task('bump:html', function() { gulp.task('bump', gulp.series('bump:json', 'bump:html')); -gulp.task('release:commit', function() { +gulp.task('release:commit', function () { return gulp.src(['./index.html', './package.json']).pipe(git.commit('release: ' + nextVersion)); }); -gulp.task('release:tag', function(cb) { +gulp.task('release:tag', function (cb) { return git.tag(nextVersion, '', cb); }); -gulp.task('release:push', function(cb) { +gulp.task('release:push', function (cb) { git.push('origin', 'master', { args: '--tags' }, cb); }); -gulp.task('i18next', function() { +gulp.task('i18next', function () { return gulp .src(['index.html', 'locales/keys.js', 'layers/config/overrides.js', 'js/**/*.js']) .pipe(sort()) @@ -280,29 +271,26 @@ gulp.task('i18next', function() { loadPath: 'locales/{{lng}}.json', // the destination path is relative to your `gulp.dest()` path - savePath: 'locales/{{lng}}.json' - } + savePath: 'locales/{{lng}}.json', + }, }) ) .pipe(gulp.dest('.')); }); -gulp.task('layers_config', function() { - return gulp - .src(paths.layersConfig) - .pipe(concat(paths.layersConfigDestName)) - .pipe(gulp.dest(paths.dest)); +gulp.task('layers_config', function () { + return gulp.src(paths.layersConfig).pipe(concat(paths.layersConfigDestName)).pipe(gulp.dest(paths.dest)); }); // Bundles layer files. To download and extract run "yarn layers" -gulp.task('layers', function() { +gulp.task('layers', function () { return ( gulp .src(paths.layers) // Workaround to get file extension removed from the dictionary key .pipe(rename({ extname: '.json' })) .pipe( - jsonConcat(paths.layersDestName, function(data) { + jsonConcat(paths.layersDestName, function (data) { var header = '// Licensed under the MIT License (https://github.com/nrenner/brouter-web#license + Credits and Licenses),\n' + '// except JOSM imagery database (dataSource=JOSM) is licensed under Creative Commons (CC-BY-SA),\n' + @@ -321,7 +309,7 @@ gulp.task( gulp.task( 'debug', - gulp.series(function(cb) { + gulp.series(function (cb) { debug = true; cb(); }, 'default') @@ -329,28 +317,28 @@ gulp.task( gulp.task( 'serve', - gulp.series('debug', function(cb) { + gulp.series('debug', function (cb) { server.init({ server: { - baseDir: './' + baseDir: './', }, - open: false + open: false, }); cb(); }) ); -gulp.task('release:zip', function() { +gulp.task('release:zip', function () { gutil.log(gutil.colors.green('Build brouter-web.' + nextVersion + '.zip')); return gulp .src(paths.zip, { - base: '.' + base: '.', }) .pipe(zip('brouter-web.' + nextVersion + '.zip')) .pipe(gulp.dest('.')); }); -gulp.task('release:zip_standalone', function() { +gulp.task('release:zip_standalone', function () { var version = pkg.version; var destName = 'brouter-web-standalone.' + version + '.zip'; @@ -358,10 +346,10 @@ gulp.task('release:zip_standalone', function() { var brouterWeb = gulp .src(paths.zip, { - base: '.' + base: '.', }) .pipe( - rename(function(path) { + rename(function (path) { path.dirname = 'brouter-web/' + path.dirname; }) ); @@ -372,14 +360,14 @@ gulp.task('release:zip_standalone', function() { .src( [ 'misc/readmes/profile_developers_guide.txt', - 'brouter-server/target/brouter-server-*-jar-with-dependencies.jar' + 'brouter-server/target/brouter-server-*-jar-with-dependencies.jar', ], { - cwd: path.join(process.cwd(), '../brouter') + cwd: path.join(process.cwd(), '../brouter'), } ) .pipe( - rename(function(path) { + rename(function (path) { if (path.basename.startsWith('brouter-server-')) { path.basename = 'brouter'; } @@ -392,30 +380,28 @@ gulp.task('release:zip_standalone', function() { '!profiles2/all.brf', '!profiles2/car-eco-suspect_scan.brf', '!profiles2/car-traffic_analysis.brf', - '!profiles2/softaccess.brf' + '!profiles2/softaccess.brf', ], { cwd: path.join(process.cwd(), '../brouter/misc/'), - base: '../brouter/misc/' + base: '../brouter/misc/', } ); var serverScripts = gulp.src(['standalone/**'], { cwd: path.join(process.cwd(), '../brouter/misc/scripts/'), - base: '../brouter/misc/scripts/' + base: '../brouter/misc/scripts/', }); - return merge(brouterWeb, root, serverRoot, serverProfiles, serverScripts) - .pipe(zip(destName)) - .pipe(gulp.dest('.')); + return merge(brouterWeb, root, serverRoot, serverProfiles, serverScripts).pipe(zip(destName)).pipe(gulp.dest('.')); }); -gulp.task('release:publish', function() { +gulp.task('release:publish', function () { return gulp.src('./brouter-web.' + nextVersion + '.zip').pipe( release({ tag: nextVersion, token: ghToken, - manifest: pkg + manifest: pkg, }) ); }); diff --git a/index.html b/index.html index 10f425d..ad56b2f 100644 --- a/index.html +++ b/index.html @@ -1,1139 +1,1115 @@ - - - - - - - - BRouter web client - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- -
- - -
-
- -
- -
-
-
- - Start drawing a route to get stats. -
-
-
-
    -
  • -
    - Distance -
    -

    - -km -

    -
  • -
  • -
    - Travel time -
    -

    - -h -

    -
  • -
  • -
    - Total Energy | Energy per 100 km -
    -

    - -kWh | -kWh -

    -
  • -
  • -
    - Ascend | Plain ascend -
    -

    - -m | -m -

    -
  • -
  • -
    - Cost | Mean cost factor -
    -

    - - | - -

    -
  • -
-
- - -
- - - - - - - - - - - - - - - + + + + + + + + BRouter web client + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+ + +
+
+ +
+ +
+
+
+ + Start drawing a route to get stats. +
+
+
+
    +
  • +
    Distance
    +

    + -km +

    +
  • +
  • +
    Travel time
    +

    + -h +

    +
  • +
  • +
    + Total Energy | Energy per 100 km +
    +

    + -kWh | -kWh +

    +
  • +
  • +
    + Ascend | Plain ascend +
    +

    + -m | -m +

    +
  • +
  • +
    + Cost | Mean cost factor +
    +

    + - | - +

    +
  • +
+
+ + +
+ + + + + + + + + + + + + + + diff --git a/js/Browser.js b/js/Browser.js index 84ce45a..646cc48 100644 --- a/js/Browser.js +++ b/js/Browser.js @@ -1,5 +1,5 @@ -(function() { - var touchScreen = (function() { +(function () { + var touchScreen = (function () { var result = null; if ('maxTouchPoints' in navigator) { @@ -21,6 +21,6 @@ BR.Browser = { touchScreen: touchScreen, touchScreenDetectable: touchScreenDetectable, - touch: touch + touch: touch, }; })(); diff --git a/js/LayersConfig.js b/js/LayersConfig.js index 97c19b5..a3b497b 100644 --- a/js/LayersConfig.js +++ b/js/LayersConfig.js @@ -5,7 +5,7 @@ BR.LayersConfig = L.Class.extend({ // hardcoded, built-in layers with an id set (for URL hash) builtInLayers: ['route-quality'], - initialize: function(map) { + initialize: function (map) { this._map = map; this._addLeafletProvidersLayers(); @@ -14,7 +14,7 @@ BR.LayersConfig = L.Class.extend({ this._addLanguageDefaultLayer(); }, - loadDefaultLayers: function() { + loadDefaultLayers: function () { if (BR.Util.localStorageAvailable()) { var item = localStorage.getItem('map/defaultLayers'); if (item) { @@ -25,17 +25,17 @@ BR.LayersConfig = L.Class.extend({ } }, - storeDefaultLayers: function(baseLayers, overlays) { + storeDefaultLayers: function (baseLayers, overlays) { if (BR.Util.localStorageAvailable()) { var defaultLayers = { baseLayers: baseLayers, - overlays: overlays + overlays: overlays, }; localStorage.setItem('map/defaultLayers', JSON.stringify(defaultLayers)); } }, - _addLeafletProvidersLayers: function() { + _addLeafletProvidersLayers: function () { var includeList = BR.confLayers.leafletProvidersIncludeList; for (var i = 0; i < includeList.length; i++) { @@ -45,15 +45,15 @@ BR.LayersConfig = L.Class.extend({ properties: { id: id, name: id.replace('.', ' '), - dataSource: 'leaflet-providers' + dataSource: 'leaflet-providers', }, - type: 'Feature' + type: 'Feature', }; BR.layerIndex[id] = obj; } }, - _customizeLayers: function() { + _customizeLayers: function () { var propertyOverrides = BR.confLayers.getPropertyOverrides(); for (id in propertyOverrides) { @@ -79,7 +79,7 @@ BR.LayersConfig = L.Class.extend({ BR.layerIndex['1017'].geometry = BR.confLayers.osmapaPl; }, - _addLanguageDefaultLayer: function() { + _addLanguageDefaultLayer: function () { // language code -> layer id var languageLayersMap = {}; var i; @@ -107,7 +107,7 @@ BR.LayersConfig = L.Class.extend({ } }, - isDefaultLayer: function(id, overlay) { + isDefaultLayer: function (id, overlay) { var result = false; if (overlay) { result = this.defaultOverlays.indexOf(id) > -1; @@ -117,15 +117,15 @@ BR.LayersConfig = L.Class.extend({ return result; }, - getBaseLayers: function() { + getBaseLayers: function () { return this._getLayers(this.defaultBaseLayers); }, - getOverlays: function() { + getOverlays: function () { return this._getLayers(this.defaultOverlays); }, - _getLayers: function(ids) { + _getLayers: function (ids) { var layers = {}; for (var i = 0; i < ids.length; i++) { @@ -148,7 +148,7 @@ BR.LayersConfig = L.Class.extend({ // own convention: key placeholder with prefix // e.g. ?api_key={keys_openrouteservice} - getKeyName: function(url) { + getKeyName: function (url) { var result = null; // L.Util.template only matches [\w_-] var prefix = 'keys_'; @@ -162,14 +162,14 @@ BR.LayersConfig = L.Class.extend({ name = found[1]; result = { name: name, - urlVar: prefix + name + urlVar: prefix + name, }; } return result; }, - createLayer: function(layerData) { + createLayer: function (layerData) { var props = layerData.properties; var url = props.url; var layer; @@ -218,7 +218,7 @@ BR.LayersConfig = L.Class.extend({ var options = { maxZoom: this._map.getMaxZoom(), - bounds: layerData.geometry && !props.worldTiles ? L.geoJson(layerData.geometry).getBounds() : null + bounds: layerData.geometry && !props.worldTiles ? L.geoJson(layerData.geometry).getBounds() : null, }; if (props.mapUrl) { options.mapLink = @@ -237,7 +237,7 @@ BR.LayersConfig = L.Class.extend({ layer = L.tileLayer.provider(props.id); var layerOptions = L.Util.extend(options, { - maxNativeZoom: layer.options.maxZoom + maxNativeZoom: layer.options.maxZoom, }); L.setOptions(layer, layerOptions); } else if (props.dataSource === 'LayersCollection') { @@ -245,7 +245,7 @@ BR.LayersConfig = L.Class.extend({ url, L.Util.extend(options, { minZoom: props.minZoom || 0, - maxNativeZoom: props.maxZoom + maxNativeZoom: props.maxZoom, }) ); if (props.subdomains) { @@ -260,7 +260,7 @@ BR.LayersConfig = L.Class.extend({ minZoom: props.min_zoom || 0, maxNativeZoom: props.max_zoom, subdomains: getSubdomains(josmUrl), - attribution: convertAttributionJosm(props) + attribution: convertAttributionJosm(props), }); if (props.type && props.type === 'wms') { @@ -268,7 +268,7 @@ BR.LayersConfig = L.Class.extend({ url, L.Util.extend(josmOptions, { layers: props.layers, - format: props.format + format: props.format, }) ); } else { @@ -279,7 +279,7 @@ BR.LayersConfig = L.Class.extend({ // Layer attribution here only as short link to original site, // to keep current position use placeholders: {zoom}/{lat}/{lon} // Copyright attribution in index.html #credits - var getAttribution = function() { + var getAttribution = function () { return this.options.mapLink; }; layer.getAttribution = getAttribution; @@ -287,9 +287,9 @@ BR.LayersConfig = L.Class.extend({ layer.id = props.id; return layer; - } + }, }); -BR.layersConfig = function(map) { +BR.layersConfig = function (map) { return new BR.LayersConfig(map); }; diff --git a/js/Map.js b/js/Map.js index deb1145..d772e11 100644 --- a/js/Map.js +++ b/js/Map.js @@ -1,11 +1,11 @@ BR.Map = { - initMap: function() { + initMap: function () { var map, layersControl; L.setOptions(this, { shortcut: { - locate: 76 // char code for 'l' - } + locate: 76, // char code for 'l' + }, }); BR.keys = BR.keys || {}; @@ -18,14 +18,14 @@ BR.Map = { minZoom: 0, maxZoom: maxZoom, // fix for route drag on mobile (#285), until next Leaflet version released (> 1.6.0) - tap: false + tap: false, }); if (BR.Util.getResponsiveBreakpoint() >= '3md') { L.control .zoom({ zoomInTitle: i18next.t('keyboard.generic-shortcut', { action: '$t(map.zoomInTitle)', key: '+' }), - zoomOutTitle: i18next.t('keyboard.generic-shortcut', { action: '$t(map.zoomOutTitle)', key: '-' }) + zoomOutTitle: i18next.t('keyboard.generic-shortcut', { action: '$t(map.zoomOutTitle)', key: '-' }), }) .addTo(map); } @@ -54,7 +54,7 @@ BR.Map = { '' ); - $('#credits').on('show.bs.modal', function(event) { + $('#credits').on('show.bs.modal', function (event) { BR.Map._renderLayerCredits(layersControl._layers); }); @@ -77,7 +77,7 @@ BR.Map = { minZoom: 1, maxZoom: 19, attribution: - '© DigitalGlobe (Terms of Use)' + '© DigitalGlobe (Terms of Use)', } ); baseLayers[i18next.t('map.layer.digitalglobe')] = recent; @@ -105,16 +105,16 @@ BR.Map = { var locationControl = L.control .locate({ strings: { - title: i18next.t('keyboard.generic-shortcut', { action: '$t(map.locate-me)', key: 'L' }) + title: i18next.t('keyboard.generic-shortcut', { action: '$t(map.locate-me)', key: 'L' }), }, icon: 'fa fa-location-arrow', - iconLoading: 'fa fa-spinner fa-pulse' + iconLoading: 'fa fa-spinner fa-pulse', }) .addTo(map); L.DomEvent.addListener( document, 'keydown', - function(e) { + function (e) { if (BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.shortcut.locate) { locationControl.start(); } @@ -133,11 +133,11 @@ BR.Map = { return { map: map, - layersControl: layersControl + layersControl: layersControl, }; }, - _renderLayerCredits: function(layers) { + _renderLayerCredits: function (layers) { var dl = document.getElementById('credits-maps'); var i, obj, dt, dd, attribution; @@ -157,5 +157,5 @@ BR.Map = { dl.appendChild(dd); } } - } + }, }; diff --git a/js/Util.js b/js/Util.js index 17923b4..2e6f532 100644 --- a/js/Util.js +++ b/js/Util.js @@ -1,16 +1,16 @@ BR.Util = { - get: function(url, cb) { + get: function (url, cb) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); - xhr.onload = function() { + xhr.onload = function () { if ((xhr.status === 200 || xhr.status === 0) && xhr.responseText) { cb(null, xhr.responseText); } else { cb(BR.Util.getError(xhr)); } }; - xhr.onerror = function() { + xhr.onerror = function () { cb(BR.Util.getError(xhr)); }; try { @@ -20,7 +20,7 @@ BR.Util = { } }, - getError: function(xhr) { + getError: function (xhr) { var msg = i18next.t('warning.no-response'); if (xhr.responseText) { msg = xhr.responseText; @@ -38,7 +38,7 @@ BR.Util = { // https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Testing_for_support_vs_availability // by Mozilla Contributors, with modifications; // Any copyright is dedicated to the Public Domain. https://creativecommons.org/publicdomain/zero/1.0/ - localStorageAvailable: function() { + localStorageAvailable: function () { try { var storage = window.localStorage, x = '__storage_test__'; @@ -51,7 +51,7 @@ BR.Util = { }, // see https://stackoverflow.com/a/37141090/1906123 - getResponsiveBreakpoint: function() { + getResponsiveBreakpoint: function () { var envs = { '1xs': 'd-none', '2sm': 'd-sm-none', '3md': 'd-md-none', '4lg': 'd-lg-none', '5xl': 'd-xl-none' }; var env = ''; @@ -69,7 +69,7 @@ BR.Util = { return env; }, - keyboardShortcutsAllowed: function(keyEvent) { + keyboardShortcutsAllowed: function (keyEvent) { // Skip auto-repeating key events if (keyEvent.repeat) { return false; @@ -102,9 +102,9 @@ BR.Util = { // this method must only be used to sanitize for textContent. // do NOT use it to sanitize any attribute, // see https://web.archive.org/web/20121208091505/http://benv.ca/2012/10/4/you-are-probably-misusing-DOM-text-methods/ - sanitizeHTMLContent: function(str) { + sanitizeHTMLContent: function (str) { var temp = document.createElement('div'); temp.textContent = str; return temp.innerHTML; - } + }, }; diff --git a/js/control/Control.Layers.js b/js/control/Control.Layers.js index 9bb34fa..a46c345 100644 --- a/js/control/Control.Layers.js +++ b/js/control/Control.Layers.js @@ -1,5 +1,5 @@ BR.ControlLayers = L.Control.Layers.extend({ - getActiveLayers: function() { + getActiveLayers: function () { var result = []; for (var i = 0; i < this._layers.length; i++) { @@ -16,7 +16,7 @@ BR.ControlLayers = L.Control.Layers.extend({ return result; }, - getActiveBaseLayer: function() { + getActiveBaseLayer: function () { var activeLayers = this.getActiveLayers(); for (var i = 0; i < activeLayers.length; i++) { var obj = activeLayers[i]; @@ -28,7 +28,7 @@ BR.ControlLayers = L.Control.Layers.extend({ return null; }, - removeActiveLayers: function() { + removeActiveLayers: function () { var removed = []; for (var i = 0; i < this._layers.length; i++) { @@ -42,7 +42,7 @@ BR.ControlLayers = L.Control.Layers.extend({ return removed; }, - getLayer: function(name) { + getLayer: function (name) { for (var i = 0; i < this._layers.length; i++) { var obj = this._layers[i]; if (obj.name === name) { @@ -53,19 +53,19 @@ BR.ControlLayers = L.Control.Layers.extend({ return null; }, - getBaseLayers: function() { - return this._layers.filter(function(obj) { + getBaseLayers: function () { + return this._layers.filter(function (obj) { return !obj.overlay; }); }, - activateLayer: function(obj) { + activateLayer: function (obj) { if (!this._map.hasLayer(obj.layer)) { this._map.addLayer(obj.layer); } }, - activateFirstLayer: function() { + activateFirstLayer: function () { for (var i = 0; i < this._layers.length; i++) { var obj = this._layers[i]; if (!obj.overlay) { @@ -75,14 +75,14 @@ BR.ControlLayers = L.Control.Layers.extend({ } }, - activateBaseLayerIndex: function(index) { + activateBaseLayerIndex: function (index) { var baseLayers = this.getBaseLayers(); var obj = baseLayers[index]; this.activateLayer(obj); }, - _addLayer: function(layer, name, overlay) { + _addLayer: function (layer, name, overlay) { L.Control.Layers.prototype._addLayer.call(this, layer, name, overlay); // override z-index assignment to fix that base layers added later @@ -95,5 +95,5 @@ BR.ControlLayers = L.Control.Layers.extend({ layer.setZIndex(0); } } - } + }, }); diff --git a/js/control/Export.js b/js/control/Export.js index 31c6b0e..3740c8b 100644 --- a/js/control/Export.js +++ b/js/control/Export.js @@ -3,11 +3,11 @@ BR.Export = L.Class.extend({ options: { shortcut: { - export: 88 // char code for 'x' - } + export: 88, // char code for 'x' + }, }, - initialize: function(router, pois) { + initialize: function (router, pois) { this.router = router; this.pois = pois; this.exportButton = $('#exportButton'); @@ -31,7 +31,7 @@ BR.Export = L.Class.extend({ this.update([]); }, - update: function(latLngs) { + update: function (latLngs) { this.latLngs = latLngs; if (latLngs.length < 2) { @@ -41,7 +41,7 @@ BR.Export = L.Class.extend({ } }, - _export: function(e) { + _export: function (e) { var exportForm = document.forms['export']; var format = exportForm['format'].value || $('#export-format input:radio:checked').val(); var name = encodeURIComponent(exportForm['trackname'].value); @@ -58,7 +58,7 @@ BR.Export = L.Class.extend({ link.dispatchEvent(evt); }, - _validationMessage: function() { + _validationMessage: function () { var trackname = this.trackname; var replaceRegex = new RegExp('[^' + this.tracknameAllowedChars + ']', 'g'); @@ -71,14 +71,14 @@ BR.Export = L.Class.extend({ } }, - _generateTrackname: function() { + _generateTrackname: function () { var trackname = this.trackname; this._getCityAtPosition( this.latLngs[0], - L.bind(function(from) { + L.bind(function (from) { this._getCityAtPosition( this.latLngs[this.latLngs.length - 1], - L.bind(function(to) { + L.bind(function (to) { var distance = document.getElementById('distance').innerHTML; if (this.tracknameAllowedChars) { distance = distance.replace(',', '.'); // temp. fix (#202) @@ -88,13 +88,13 @@ BR.Export = L.Class.extend({ } else if (from === to) { trackname.value = i18next.t('export.route-loop', { from: from, - distance: distance + distance: distance, }); } else { trackname.value = i18next.t('export.route-from-to', { from: from, to: to, - distance: distance + distance: distance, }); } @@ -109,14 +109,14 @@ BR.Export = L.Class.extend({ ); }, - _getCityAtPosition: function(lonlat, cb) { + _getCityAtPosition: function (lonlat, cb) { var url = L.Util.template( 'https://nominatim.openstreetmap.org/reverse?lon={lng}&lat={lat}&format=json', lonlat ); BR.Util.get( url, - L.bind(function(err, response) { + L.bind(function (err, response) { try { var addr = JSON.parse(response).address; cb(addr.village || addr.town || addr.hamlet || addr.city_district || addr.city); @@ -128,7 +128,7 @@ BR.Export = L.Class.extend({ ); }, - _keydownListener: function(e) { + _keydownListener: function (e) { if ( BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.shortcut.export && @@ -137,9 +137,9 @@ BR.Export = L.Class.extend({ this._generateTrackname(); $('#export').modal('show'); } - } + }, }); -BR.export = function() { +BR.export = function () { return new BR.Export(); }; diff --git a/js/control/Itinerary.js b/js/control/Itinerary.js index b4a9fa3..8a4c562 100644 --- a/js/control/Itinerary.js +++ b/js/control/Itinerary.js @@ -1,10 +1,10 @@ BR.Itinerary = L.Class.extend({ - initialize: function() { + initialize: function () { this._content = document.getElementById('itinerary'); this.update(); }, - update: function(polyline, segments) { + update: function (polyline, segments) { var i, j, iter, @@ -20,5 +20,5 @@ BR.Itinerary = L.Class.extend({ html += ''; this._content.innerHTML = html; - } + }, }); diff --git a/js/control/Layers.js b/js/control/Layers.js index 788917f..0171d2f 100644 --- a/js/control/Layers.js +++ b/js/control/Layers.js @@ -1,5 +1,5 @@ BR.Layers = L.Class.extend({ - _loadLayers: function() { + _loadLayers: function () { this._customLayers = {}; if (BR.Util.localStorageAvailable()) { @@ -10,13 +10,13 @@ BR.Layers = L.Class.extend({ } }, - _loadTable: function() { + _loadTable: function () { var layersData = []; for (layer in this._customLayers) { layersData.push([ layer, this._customLayers[layer].layer._url, - this._customLayers[layer].isOverlay ? 'Overlay' : 'Layer' + this._customLayers[layer].isOverlay ? 'Overlay' : 'Layer', ]); } if (this._layersTable != null) { @@ -29,17 +29,17 @@ BR.Layers = L.Class.extend({ searching: false, paging: false, language: { - emptyTable: i18next.t('sidebar.layers.table.empty') + emptyTable: i18next.t('sidebar.layers.table.empty'), }, columns: [ { title: i18next.t('sidebar.layers.table.name') }, { title: i18next.t('sidebar.layers.table.URL') }, - { title: i18next.t('sidebar.layers.table.type') } - ] + { title: i18next.t('sidebar.layers.table.type') }, + ], }); }, - init: function(map, layersControl, baseLayers, overlays) { + init: function (map, layersControl, baseLayers, overlays) { this._layersControl = layersControl; this._map = map; this._layers = {}; @@ -54,7 +54,7 @@ BR.Layers = L.Class.extend({ this._loadTable(); var table = this._layersTable; - $('#custom_layers_table tbody').on('click', 'tr', function() { + $('#custom_layers_table tbody').on('click', 'tr', function () { if ($(this).hasClass('selected')) { $(this).removeClass('selected'); } else { @@ -63,40 +63,37 @@ BR.Layers = L.Class.extend({ } }); - L.DomUtil.get('custom_layers_button').onclick = function() { + L.DomUtil.get('custom_layers_button').onclick = function () { $('#custom_layers').modal(); }; }, - _remove: function(evt) { + _remove: function (evt) { var row = this._layersTable.row('.selected').data(); if (row != null) { var name = row[0]; this._layersControl.removeLayer(this._customLayers[name].layer); this._map.removeLayer(this._customLayers[name].layer); delete this._customLayers[name]; - this._layersTable - .row('.selected') - .remove() - .draw(false); + this._layersTable.row('.selected').remove().draw(false); this._sync(); } }, - _addFromInput: function(isOverlay) { + _addFromInput: function (isOverlay) { var layer_name = L.DomUtil.get('layer_name').value; var layer_url = L.DomUtil.get('layer_url').value; if (layer_name.length > 0 && layer_url.length > 0) this._addLayer(layer_name, layer_url, isOverlay); }, - _addBaseLayer: function(evt) { + _addBaseLayer: function (evt) { this._addFromInput(false); }, - _addOverlay: function(evt) { + _addOverlay: function (evt) { this._addFromInput(true); }, - _addLayer: function(layerName, layerUrl, isOverlay) { + _addLayer: function (layerName, layerUrl, isOverlay) { if (layerName in this._layers) return; if (layerName in this._customLayers) return; @@ -106,7 +103,7 @@ BR.Layers = L.Class.extend({ this._customLayers[layerName] = { layer: layer, - isOverlay: isOverlay + isOverlay: isOverlay, }; if (isOverlay) { @@ -123,15 +120,15 @@ BR.Layers = L.Class.extend({ } }, - _sync: function() { + _sync: function () { if (BR.Util.localStorageAvailable()) { localStorage.setItem( 'map/customLayers', - JSON.stringify(this._customLayers, function(k, v) { + JSON.stringify(this._customLayers, function (k, v) { // dont write Leaflet.Layer in localStorage; simply keep the URL return v._url || v; }) ); } - } + }, }); diff --git a/js/control/LayersTab.js b/js/control/LayersTab.js index f39bbf9..872ec47 100644 --- a/js/control/LayersTab.js +++ b/js/control/LayersTab.js @@ -3,13 +3,13 @@ BR.LayersTab = BR.ControlLayers.extend({ previewBounds: null, saveLayers: [], - initialize: function(layersConfig, baseLayers, overlays, options) { + initialize: function (layersConfig, baseLayers, overlays, options) { L.Control.Layers.prototype.initialize.call(this, baseLayers, overlays, options); this.layersConfig = layersConfig; }, - addTo: function(map) { + addTo: function (map) { this._map = map; this.onAdd(map); @@ -22,19 +22,19 @@ BR.LayersTab = BR.ControlLayers.extend({ return this; }, - onAdd: function(map) { + onAdd: function (map) { BR.ControlLayers.prototype.onAdd.call(this, map); map.on('baselayerchange overlayadd overlayremove', this.storeActiveLayers, this); }, - onRemove: function(map) { + onRemove: function (map) { BR.ControlLayers.prototype.onRemove.call(this, map); map.off('baselayerchange overlayadd overlayremove', this.storeActiveLayers, this); }, - initOpacitySlider: function(map) { + initOpacitySlider: function (map) { var self = this; var overlayOpacitySlider = new BR.OpacitySlider({ id: 'overlay', @@ -42,7 +42,7 @@ BR.LayersTab = BR.ControlLayers.extend({ orientation: 'horizontal', defaultValue: 1, title: i18next.t('layers.opacity-slider'), - callback: function(opacity) { + callback: function (opacity) { for (var i = 0; i < self._layers.length; i++) { if (!self._layers[i].overlay || !map.hasLayer(self._layers[i].layer)) { continue; @@ -53,20 +53,20 @@ BR.LayersTab = BR.ControlLayers.extend({ self._layers[i].layer.setStyle({ opacity: opacity }); } } - } + }, }); L.DomUtil.get('leaflet-control-layers-overlays-opacity-slider').appendChild(overlayOpacitySlider.getElement()); }, - initButtons: function() { - var expandTree = function(e) { + initButtons: function () { + var expandTree = function (e) { this.jstree.open_all(); }; - var collapseTree = function(e) { + var collapseTree = function (e) { this.jstree.close_all(); }; - var toggleOptionalLayers = function(e) { + var toggleOptionalLayers = function (e) { var button = L.DomUtil.get('optional_layers_button'); var treeButtons = L.DomUtil.get('tree-button-group'); var div = L.DomUtil.get('optional-layers'); @@ -86,12 +86,12 @@ BR.LayersTab = BR.ControlLayers.extend({ L.DomUtil.get('optional_layers_button').onclick = L.bind(toggleOptionalLayers, this); }, - initJsTree: function() { + initJsTree: function () { var layerIndex = BR.layerIndex; var treeData = this.toJsTree(BR.confLayers.tree); var oldSelected = null; - var onSelectNode = function(e, data) { + var onSelectNode = function (e, data) { var layerData = layerIndex[data.node.id]; var selected = data.selected[0]; @@ -103,12 +103,12 @@ BR.LayersTab = BR.ControlLayers.extend({ } }; - var onDeselectNode = function(e, data) { + var onDeselectNode = function (e, data) { this.hidePreview(); oldSelected = null; }; - var onCheckNode = function(e, data) { + var onCheckNode = function (e, data) { var layerData = layerIndex[data.node.id]; var layer = this.createLayer(layerData); var name = layerData.properties.name; @@ -124,12 +124,12 @@ BR.LayersTab = BR.ControlLayers.extend({ var ele = document.getElementById(data.node.a_attr.id); ele.classList.add('added'); - setTimeout(function() { + setTimeout(function () { ele.classList.remove('added'); }, 1000); }; - var onUncheckNode = function(e, data) { + var onUncheckNode = function (e, data) { var obj = this.getLayerById(data.node.id); if (!obj) return; @@ -146,7 +146,7 @@ BR.LayersTab = BR.ControlLayers.extend({ var ele = document.getElementById(data.node.a_attr.id); ele.classList.add('removed'); - setTimeout(function() { + setTimeout(function () { ele.classList.remove('removed'); }, 1000); }; @@ -156,30 +156,30 @@ BR.LayersTab = BR.ControlLayers.extend({ .on('deselect_node.jstree', L.bind(onDeselectNode, this)) .on('check_node.jstree', L.bind(onCheckNode, this)) .on('uncheck_node.jstree', L.bind(onUncheckNode, this)) - .on('ready.jstree', function(e, data) { + .on('ready.jstree', function (e, data) { data.instance.open_all(); }) .jstree({ plugins: ['checkbox'], checkbox: { whole_node: false, - tie_selection: false + tie_selection: false, }, core: { multiple: false, themes: { icons: false, - dots: false + dots: false, }, - data: treeData - } + data: treeData, + }, }); this.jstree = $('#optional-layers-tree').jstree(true); }, - toJsTree: function(layerTree) { + toJsTree: function (layerTree) { var data = { - children: [] + children: [], }; var self = this; @@ -187,9 +187,9 @@ BR.LayersTab = BR.ControlLayers.extend({ var rootNode = { text: i18next.t('sidebar.layers.category.' + name, name), state: { - disabled: true + disabled: true, }, - children: [] + children: [], }; return rootNode; } @@ -217,8 +217,8 @@ BR.LayersTab = BR.ControlLayers.extend({ id: id, text: getText(props, parent), state: { - checked: self.layersConfig.isDefaultLayer(id, props.overlay) - } + checked: self.layersConfig.isDefaultLayer(id, props.overlay), + }, }; } return childNode; @@ -262,7 +262,7 @@ BR.LayersTab = BR.ControlLayers.extend({ return data.children; }, - storeDefaultLayers: function() { + storeDefaultLayers: function () { var baseLayers = []; var overlays = []; @@ -284,7 +284,7 @@ BR.LayersTab = BR.ControlLayers.extend({ this.layersConfig.storeDefaultLayers(baseLayers, overlays); }, - createLayer: function(layerData) { + createLayer: function (layerData) { var layer = this.layersConfig.createLayer(layerData); var overlay = layerData.properties.overlay; @@ -294,7 +294,7 @@ BR.LayersTab = BR.ControlLayers.extend({ return layer; }, - getLayerById: function(id) { + getLayerById: function (id) { for (var i = 0; i < this._layers.length; i++) { var obj = this._layers[i]; if (obj.layer.id === id) { @@ -305,7 +305,7 @@ BR.LayersTab = BR.ControlLayers.extend({ return null; }, - getLayerByLegacyName: function(legacyName) { + getLayerByLegacyName: function (legacyName) { var obj = null; var id = this.layersConfig.legacyNameToIdMap[legacyName]; @@ -316,7 +316,7 @@ BR.LayersTab = BR.ControlLayers.extend({ return obj; }, - activateDefaultBaseLayer: function() { + activateDefaultBaseLayer: function () { var index = BR.conf.defaultBaseLayerIndex || 0; var activeBaseLayer = this.getActiveBaseLayer(); if (!activeBaseLayer) { @@ -324,11 +324,11 @@ BR.LayersTab = BR.ControlLayers.extend({ } }, - saveRemoveActiveLayers: function() { + saveRemoveActiveLayers: function () { this.saveLayers = this.removeActiveLayers(); }, - restoreActiveLayers: function(overlaysOnly) { + restoreActiveLayers: function (overlaysOnly) { for (var i = 0; i < this.saveLayers.length; i++) { var obj = this.saveLayers[i]; @@ -345,7 +345,7 @@ BR.LayersTab = BR.ControlLayers.extend({ this.saveLayers = []; }, - removePreviewLayer: function() { + removePreviewLayer: function () { if (this.previewLayer && this._map.hasLayer(this.previewLayer)) { this._map.removeLayer(this.previewLayer); this.previewLayer = null; @@ -354,7 +354,7 @@ BR.LayersTab = BR.ControlLayers.extend({ return false; }, - showPreviewBounds: function(layerData) { + showPreviewBounds: function (layerData) { if (layerData.geometry) { this.previewBounds = L.geoJson(layerData.geometry, { // fill/mask outside of bounds polygon with Leaflet.snogylop @@ -363,30 +363,30 @@ BR.LayersTab = BR.ControlLayers.extend({ renderer: L.svg({ padding: 1 }), color: '#333', fillOpacity: 0.4, - weight: 2 + weight: 2, }).addTo(this._map); } }, - removePreviewBounds: function() { + removePreviewBounds: function () { if (this.previewBounds && this._map.hasLayer(this.previewBounds)) { this._map.removeLayer(this.previewBounds); this.previewBounds = null; } }, - deselectNode: function() { + deselectNode: function () { var selected = this.jstree.get_selected(); if (selected.length > 0) { this.jstree.deselect_node(selected[0]); } }, - onBaselayerchange: function() { + onBaselayerchange: function () { // execute after current input click handler, // otherwise added overlay checkbox state doesn't update setTimeout( - L.Util.bind(function() { + L.Util.bind(function () { this.removePreviewBounds(); this.removePreviewLayer(); this.restoreActiveLayers(true); @@ -396,7 +396,7 @@ BR.LayersTab = BR.ControlLayers.extend({ ); }, - showPreview: function(layerData) { + showPreview: function (layerData) { var layer = this.createLayer(layerData); this._map.addLayer(layer); this.removePreviewBounds(); @@ -411,7 +411,7 @@ BR.LayersTab = BR.ControlLayers.extend({ L.DomUtil.get('preview').hidden = false; }, - hidePreview: function(layer) { + hidePreview: function (layer) { this._map.off('baselayerchange', this.onBaselayerchange, this); this.removePreviewBounds(); this.removePreviewLayer(); @@ -420,11 +420,11 @@ BR.LayersTab = BR.ControlLayers.extend({ L.DomUtil.get('preview').hidden = true; }, - toLayerString: function(obj) { + toLayerString: function (obj) { return obj.layer.id ? obj.layer.id : obj.name; }, - getLayerFromString: function(layerString) { + getLayerFromString: function (layerString) { var obj = this.getLayerById(layerString); if (!obj) { @@ -440,11 +440,11 @@ BR.LayersTab = BR.ControlLayers.extend({ return obj; }, - storeActiveLayers: function() { + storeActiveLayers: function () { if (BR.Util.localStorageAvailable()) { var objList = this.getActiveLayers(); var idList = objList.map( - L.bind(function(obj) { + L.bind(function (obj) { return this.toLayerString(obj); }, this) ); @@ -454,7 +454,7 @@ BR.LayersTab = BR.ControlLayers.extend({ } }, - loadActiveLayers: function() { + loadActiveLayers: function () { if (BR.Util.localStorageAvailable()) { var item = localStorage.getItem('map/activeLayers'); @@ -471,9 +471,9 @@ BR.LayersTab = BR.ControlLayers.extend({ } } } - } + }, }); -BR.layersTab = function(baseLayers, overlays, options) { +BR.layersTab = function (baseLayers, overlays, options) { return new BR.LayersTab(baseLayers, overlays, options); }; diff --git a/js/control/Message.js b/js/control/Message.js index fe1a213..96f99ee 100644 --- a/js/control/Message.js +++ b/js/control/Message.js @@ -2,15 +2,15 @@ BR.Message = L.Class.extend({ options: { // true to manually attach click event to close button, // Bootstrap data-api's auto-initialization doesn't work in Controls because of stopPropagation - alert: false + alert: false, }, - initialize: function(id, options) { + initialize: function (id, options) { L.setOptions(this, options); this.id = id; }, - _show: function(msg, type) { + _show: function (msg, type) { var ele = L.DomUtil.get(this.id), iconClass = type === 'warning' ? 'fa-exclamation-triangle' : 'fa-times-circle', alertClass = type === 'warning' ? 'alert-warning' : 'alert-danger'; @@ -35,11 +35,11 @@ BR.Message = L.Class.extend({ } }, - hide: function() { + hide: function () { $('#' + this.id + ' .alert').alert('close'); }, - showError: function(err) { + showError: function (err) { if (err && err.message) err = err.message; if (err == 'target island detected for section 0\n') { @@ -56,9 +56,9 @@ BR.Message = L.Class.extend({ this._show(err, 'error'); }, - showWarning: function(msg) { + showWarning: function (msg) { this._show(msg, 'warning'); - } + }, }); // static instance as global control diff --git a/js/control/OpacitySlider.js b/js/control/OpacitySlider.js index e675b2c..26fbd1b 100644 --- a/js/control/OpacitySlider.js +++ b/js/control/OpacitySlider.js @@ -5,10 +5,10 @@ BR.OpacitySlider = L.Class.extend({ orientation: 'vertical', defaultValue: BR.conf.defaultOpacity, title: '', - callback: function(opacity) {} + callback: function (opacity) {}, }, - initialize: function(options) { + initialize: function (options) { L.setOptions(this, options); var input = (this.input = $('')), @@ -30,12 +30,12 @@ BR.OpacitySlider = L.Class.extend({ orientation: this.options.orientation, reversed: this.options.reversed, selection: this.options.reversed ? 'before' : 'after', // inverted, serves as track style, see css - tooltip: 'hide' + tooltip: 'hide', }) - .on('slide slideStop', { self: this }, function(evt) { + .on('slide slideStop', { self: this }, function (evt) { evt.data.self.options.callback(evt.value / 100); }) - .on('slideStop', { self: this }, function(evt) { + .on('slideStop', { self: this }, function (evt) { if (BR.Util.localStorageAvailable()) { localStorage['opacitySliderValue' + evt.data.self.options.id] = evt.value; } @@ -51,19 +51,19 @@ BR.OpacitySlider = L.Class.extend({ } }, - _keydownListener: function(e) { + _keydownListener: function (e) { if (BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.muteKeyCode) { this.options.callback(0); } }, - _keyupListener: function(e) { + _keyupListener: function (e) { if (BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.muteKeyCode) { this.options.callback(this.input.val() / 100); } }, - getElement: function() { + getElement: function () { return this.input.slider('getElement'); - } + }, }); diff --git a/js/control/OpacitySliderControl.js b/js/control/OpacitySliderControl.js index 14603cf..8532e3e 100644 --- a/js/control/OpacitySliderControl.js +++ b/js/control/OpacitySliderControl.js @@ -1,9 +1,9 @@ BR.OpacitySliderControl = L.Control.extend({ options: { - position: 'topleft' + position: 'topleft', }, - onAdd: function(map) { + onAdd: function (map) { var container = L.DomUtil.create('div', 'leaflet-bar control-slider'); // prevent also dragging map in Chrome @@ -21,22 +21,22 @@ BR.OpacitySliderControl = L.Control.extend({ var slider = new BR.OpacitySlider(this.options); container.appendChild(slider.getElement()); - var stopClickAfterSlide = function(evt) { + var stopClickAfterSlide = function (evt) { L.DomEvent.stop(evt); removeStopClickListeners(); }; - var removeStopClickListeners = function() { + var removeStopClickListeners = function () { document.removeEventListener('click', stopClickAfterSlide, true); document.removeEventListener('mousedown', removeStopClickListeners, true); }; slider.input - .on('slideStart', function(evt) { + .on('slideStart', function (evt) { // dragging beyond slider control selects zoom control +/- text in Firefox L.DomUtil.disableTextSelection(); }) - .on('slideStop', { self: this }, function(evt) { + .on('slideStop', { self: this }, function (evt) { L.DomUtil.enableTextSelection(); // When dragging outside slider and over map, click event after mouseup @@ -49,5 +49,5 @@ BR.OpacitySliderControl = L.Control.extend({ }); return container; - } + }, }); diff --git a/js/control/Profile.js b/js/control/Profile.js index 2c17ccd..e380d56 100644 --- a/js/control/Profile.js +++ b/js/control/Profile.js @@ -2,15 +2,15 @@ BR.Profile = L.Evented.extend({ cache: {}, saveWarningShown: false, - initialize: function() { + initialize: function () { var textArea = L.DomUtil.get('profile_upload'); this.editor = CodeMirror.fromTextArea(textArea, { - lineNumbers: true + lineNumbers: true, }); $('#profileEditorTabs a[data-toggle="tab"]').on( 'shown.bs.tab', - L.bind(function(e) { + L.bind(function (e) { this._activateSecondaryTab(); }, this) ); @@ -22,11 +22,11 @@ BR.Profile = L.Evented.extend({ this.pinned = L.DomUtil.get('profile-pinned'); this.message = new BR.Message('profile_message', { - alert: true + alert: true, }); }, - clear: function(evt) { + clear: function (evt) { var button = evt.target || evt.srcElement; evt.preventDefault(); @@ -38,7 +38,7 @@ BR.Profile = L.Evented.extend({ button.blur(); }, - update: function(options) { + update: function (options) { var profileName = options.profile, profileUrl, empty = !this.editor.getValue(), @@ -53,7 +53,7 @@ BR.Profile = L.Evented.extend({ profileUrl = BR.conf.profilesUrl + profileName + '.brf'; BR.Util.get( profileUrl, - L.bind(function(err, profileText) { + L.bind(function (err, profileText) { if (err) { console.warn('Error getting profile from "' + profileUrl + '": ' + err); return; @@ -82,15 +82,15 @@ BR.Profile = L.Evented.extend({ } }, - show: function() { + show: function () { this.editor.refresh(); }, - onResize: function() { + onResize: function () { this.editor.refresh(); }, - _upload: function(evt) { + _upload: function (evt) { var button = evt.target || evt.srcElement, profile = this.editor.getValue(); @@ -99,7 +99,7 @@ BR.Profile = L.Evented.extend({ this.fire('update', { profileText: profile, - callback: L.bind(function(err, profileId, profileText) { + callback: L.bind(function (err, profileId, profileText) { $(button).blur(); if (!err) { this.profileName = profileId; @@ -110,12 +110,12 @@ BR.Profile = L.Evented.extend({ this.saveWarningShown = true; } } - }, this) + }, this), }); }, - _buildCustomProfile: function(profileText) { - document.querySelectorAll('#profile_params input, #profile_params select').forEach(function(input) { + _buildCustomProfile: function (profileText) { + document.querySelectorAll('#profile_params input, #profile_params select').forEach(function (input) { var name = input.name; var value; if (input.type == 'checkbox') { @@ -129,28 +129,28 @@ BR.Profile = L.Evented.extend({ name + '\\s*=?\\s*)([\\w.]*)(\\s*#\\s*%(.*)%\\s*(\\|\\s*(.*)\\s*\\|\\s*(.*)\\s*)?[\\r\\n])' ); - profileText = profileText.replace(re, function(match, p1, p2, p3) { + profileText = profileText.replace(re, function (match, p1, p2, p3) { return p1 + value + p3; }); }); return profileText; }, - _save: function(evt) { + _save: function (evt) { var profileText = this._buildCustomProfile(this.editor.getValue()); var that = this; this.fire('update', { profileText: profileText, - callback: function(err, profileId, profileText) { + callback: function (err, profileId, profileText) { if (!err) { that.profileName = profileId; that.cache[profileId] = profileText; } - } + }, }); }, - _setValue: function(profileText) { + _setValue: function (profileText) { profileText = profileText || ''; var clean = this.editor.isClean(); @@ -169,12 +169,12 @@ BR.Profile = L.Evented.extend({ } }, - _buildParamsForm: function(profileText) { + _buildParamsForm: function (profileText) { if (!profileText) return; // Otherwise, create user friendly form var params = {}; - var global = profileText.split('---context:').filter(function(e) { + var global = profileText.split('---context:').filter(function (e) { return e.startsWith('global'); }); if (global && global.length > 0) { @@ -183,7 +183,7 @@ BR.Profile = L.Evented.extend({ // Comment is mandatory var assignRegex = /assign\s*(\w*)\s*=?\s*([\w\.]*)\s*#\s*%(.*)%\s*(\|\s*(.*)\s*\|\s*(.*)\s*)?$/; - global.forEach(function(item) { + global.forEach(function (item) { var match = item.match(assignRegex); var value; if (match) { @@ -198,7 +198,7 @@ BR.Profile = L.Evented.extend({ paramType .slice(1, -1) .split(',') - .forEach(function(option) { + .forEach(function (option) { var splitOption = option.split('='); var value = (splitOption[0] || '').replace(/^\s+|\s+$/g, ''); var description = (splitOption[1] || '').replace(/^\s+|\s+$/g, ''); @@ -230,7 +230,7 @@ BR.Profile = L.Evented.extend({ description: description, type: paramType, value: value, - possible_values: paramValues + possible_values: paramValues, }; } }); @@ -242,7 +242,7 @@ BR.Profile = L.Evented.extend({ paramsSection.append(i18next.t('sidebar.profile.no_easy_configuration_warning')); } - Object.keys(params).forEach(function(param) { + Object.keys(params).forEach(function (param) { var div = document.createElement('div'); var label = document.createElement('label'); @@ -257,7 +257,7 @@ BR.Profile = L.Evented.extend({ label.htmlFor = select.id = 'customize-profile-' + paramName; var paramValues = params[param].possible_values; - Object.keys(paramValues).forEach(function(paramValue) { + Object.keys(paramValues).forEach(function (paramValue) { var option = document.createElement('option'); option.value = paramValue; if (paramValue == params[param].value) { @@ -308,11 +308,11 @@ BR.Profile = L.Evented.extend({ }); }, - _isParamsFormActive: function() { + _isParamsFormActive: function () { return L.DomUtil.get('profile_params_container').classList.contains('active'); }, - _activateSecondaryTab: function() { + _activateSecondaryTab: function () { var profileText = this.editor.getValue(); if (this._isParamsFormActive()) { @@ -320,5 +320,5 @@ BR.Profile = L.Evented.extend({ } else { this._setValue(this._buildCustomProfile(profileText)); } - } + }, }); diff --git a/js/control/RoutingOptions.js b/js/control/RoutingOptions.js index 2ca6b25..cf8f51a 100644 --- a/js/control/RoutingOptions.js +++ b/js/control/RoutingOptions.js @@ -1,11 +1,11 @@ BR.RoutingOptions = L.Evented.extend({ options: { shortcut: { - switch: 71 // char code for 'g' - } + switch: 71, // char code for 'g' + }, }, - initialize: function() { + initialize: function () { $('#profile-alternative').on('changed.bs.select', this._getChangeHandler()); // build option list from config @@ -25,17 +25,17 @@ BR.RoutingOptions = L.Evented.extend({ L.DomEvent.addListener(document, 'keydown', this._keydownListener, this); }, - refreshUI: function() { + refreshUI: function () { // we do not allow to select more than one profile and/or alternative at a time // so we disable the current selected items $('#profile-alternative') .find('option:disabled') - .each(function(index) { + .each(function (index) { $(this).prop('disabled', false); }); $('#profile-alternative') .find('option:selected') - .each(function(index) { + .each(function (index) { $(this).prop('disabled', true); }); @@ -51,21 +51,21 @@ BR.RoutingOptions = L.Evented.extend({ button.title = button.title + i18next.t('navbar.profile-tooltip', { key: 'G' }); }, - getOptions: function() { + getOptions: function () { var profile = $('#profile option:selected'), alternative = $('#alternative option:selected'); this.refreshUI(); return { profile: profile.val(), - alternative: alternative.val() + alternative: alternative.val(), }; }, - setOptions: function(options) { + setOptions: function (options) { var values = [ options.profile ? options.profile : $('#profile option:selected').val(), - options.alternative ? options.alternative : $('#alternative option:selected').val() + options.alternative ? options.alternative : $('#alternative option:selected').val(), ]; $('.selectpicker').selectpicker('val', values); this.refreshUI(); @@ -76,7 +76,7 @@ BR.RoutingOptions = L.Evented.extend({ } }, - setCustomProfile: function(profile, noUpdate) { + setCustomProfile: function (profile, noUpdate) { var profiles_grp, option; profiles_grp = L.DomUtil.get('profile'); @@ -87,7 +87,7 @@ BR.RoutingOptions = L.Evented.extend({ if (profile) { $('#profile') .find('option:selected') - .each(function(index) { + .each(function (index) { $(this).prop('selected', false); }); } else if (option.selected) { @@ -102,7 +102,7 @@ BR.RoutingOptions = L.Evented.extend({ } }, - getCustomProfile: function() { + getCustomProfile: function () { var profiles_grp = L.DomUtil.get('profile'), option = profiles_grp.children[0], profile = null; @@ -113,17 +113,17 @@ BR.RoutingOptions = L.Evented.extend({ return profile; }, - _getChangeHandler: function() { - return L.bind(function(evt) { + _getChangeHandler: function () { + return L.bind(function (evt) { this.fire('update', { options: this.getOptions() }); }, this); }, - _keydownListener: function(e) { + _keydownListener: function (e) { if (BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.shortcut.switch) { if (!$('#profile-alternative-form .dropdown').hasClass('show')) { $('#profile-alternative-form button').click(); } } - } + }, }); diff --git a/js/control/TrackAnalysis.js b/js/control/TrackAnalysis.js index 5fe4c46..2f230c9 100644 --- a/js/control/TrackAnalysis.js +++ b/js/control/TrackAnalysis.js @@ -20,8 +20,8 @@ BR.TrackAnalysis = L.Class.extend({ opacity: 0.8, weight: 8, // show above quality coding (pane defined in RoutingPathQuality.js) - pane: 'routingQualityPane' - } + pane: 'routingQualityPane', + }, }, /** @@ -35,7 +35,7 @@ BR.TrackAnalysis = L.Class.extend({ * @param {Map} map * @param {object} options */ - initialize: function(map, options) { + initialize: function (map, options) { this.map = map; L.setOptions(this, options); }, @@ -60,7 +60,7 @@ BR.TrackAnalysis = L.Class.extend({ /** * Called by BR.Sidebar when tab is activated */ - show: function() { + show: function () { this.active = true; this.options.requestUpdate(this); }, @@ -68,7 +68,7 @@ BR.TrackAnalysis = L.Class.extend({ /** * Called by BR.Sidebar when tab is deactivated */ - hide: function() { + hide: function () { this.active = false; }, @@ -84,7 +84,7 @@ BR.TrackAnalysis = L.Class.extend({ * @param {Polyline} polyline * @param {Array} segments */ - update: function(polyline, segments) { + update: function (polyline, segments) { if (!this.active) { return; } @@ -121,11 +121,11 @@ BR.TrackAnalysis = L.Class.extend({ * @param segments * @returns {Object} */ - calcStats: function(polyline, segments) { + calcStats: function (polyline, segments) { var analysis = { highway: {}, surface: {}, - smoothness: {} + smoothness: {}, }; this.totalRouteDistance = 0.0; @@ -158,7 +158,7 @@ BR.TrackAnalysis = L.Class.extend({ ), name: wayTagParts[1], subtype: trackType, - distance: 0.0 + distance: 0.0, }; } analysis.highway[highwayType].distance += parseFloat( @@ -175,7 +175,7 @@ BR.TrackAnalysis = L.Class.extend({ ), name: wayTagParts[1], subtype: '', - distance: 0.0 + distance: 0.0, }; } analysis[wayTagParts[0]][wayTagParts[1]].distance += parseFloat( @@ -198,7 +198,7 @@ BR.TrackAnalysis = L.Class.extend({ * * @returns {Object} */ - sortAnalysisData: function(analysis) { + sortAnalysisData: function (analysis) { var analysisSortable = {}; var result = {}; @@ -217,7 +217,7 @@ BR.TrackAnalysis = L.Class.extend({ analysisSortable[type].push(analysis[type][name]); } - analysisSortable[type].sort(function(a, b) { + analysisSortable[type].sort(function (a, b) { return b.distance - a.distance; }); @@ -236,7 +236,7 @@ BR.TrackAnalysis = L.Class.extend({ * @param {string[]} wayTags * @returns {string} */ - getTrackType: function(wayTags) { + getTrackType: function (wayTags) { for (var i = 0; i < wayTags.length; i++) { var wayTagParts = wayTags[i].split('='); if (wayTagParts[0] === 'tracktype') { @@ -250,7 +250,7 @@ BR.TrackAnalysis = L.Class.extend({ /** * @param {Object} analysis */ - render: function(analysis) { + render: function (analysis) { var $content = $('#track_statistics'); $content.html(''); @@ -275,7 +275,7 @@ BR.TrackAnalysis = L.Class.extend({ * @param {Array} data * @returns {jQuery} */ - renderTable: function(type, data) { + renderTable: function (type, data) { var index; var $table = $( '
' @@ -366,11 +366,11 @@ BR.TrackAnalysis = L.Class.extend({ * @param {number} meters * @returns {string} */ - formatDistance: function(meters) { + formatDistance: function (meters) { return (meters / 1000).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }); }, - handleHover: function(event) { + handleHover: function (event) { var $tableRow = $(event.currentTarget); var $table = $tableRow.parents('table').first(); var dataType = $table.data('type'); @@ -382,15 +382,13 @@ BR.TrackAnalysis = L.Class.extend({ this.highlightedSegments = L.layerGroup(polylinesForDataType).addTo(this.map); }, - handleHoverOut: function() { + handleHoverOut: function () { this.map.removeLayer(this.highlightedSegments); }, - toggleSelected: function(event) { + toggleSelected: function (event) { var tableRow = event.currentTarget; - var $table = $(tableRow) - .parents('table') - .first(); + var $table = $(tableRow).parents('table').first(); var dataType = $table.data('type'); var dataName = $(tableRow).data('name'); var trackType = $(tableRow).data('subtype'); @@ -426,7 +424,7 @@ BR.TrackAnalysis = L.Class.extend({ * * @returns {Polyline[]} */ - getPolylinesForDataType: function(dataType, dataName, trackType) { + getPolylinesForDataType: function (dataType, dataName, trackType) { var polylines = []; var trackLatLngs = this.trackPolyline.getLatLngs(); @@ -461,7 +459,7 @@ BR.TrackAnalysis = L.Class.extend({ * * @returns {boolean} */ - wayTagsMatchesData: function(wayTags, dataType, dataName, trackType) { + wayTagsMatchesData: function (wayTags, dataType, dataName, trackType) { var parsed = this.parseWayTags(wayTags); switch (dataType) { @@ -502,7 +500,7 @@ BR.TrackAnalysis = L.Class.extend({ * * @returns {object} */ - parseWayTags: function(wayTags) { + parseWayTags: function (wayTags) { var result = {}; var wayTagPairs = wayTags.feature.wayTags.split(' '); @@ -512,5 +510,5 @@ BR.TrackAnalysis = L.Class.extend({ } return result; - } + }, }); diff --git a/js/control/TrackMessages.js b/js/control/TrackMessages.js index d082d1a..ed2f435 100644 --- a/js/control/TrackMessages.js +++ b/js/control/TrackMessages.js @@ -5,10 +5,10 @@ BR.TrackMessages = L.Class.extend({ opacity: 0.8, weight: 8, // show above quality coding (pane defined in RoutingPathQuality.js) - pane: 'routingQualityPane' + pane: 'routingQualityPane', }, // center hovered edge (way segment) on map - syncMap: true + syncMap: true, }, // true when tab is shown, false when hidden @@ -23,7 +23,7 @@ BR.TrackMessages = L.Class.extend({ ElevCost: { title: 'elev$', className: 'dt-body-right' }, TurnCost: { title: 'turn$', className: 'dt-body-right' }, NodeCost: { title: 'node$', className: 'dt-body-right' }, - InitialCost: { title: 'initial$', className: 'dt-body-right' } + InitialCost: { title: 'initial$', className: 'dt-body-right' }, }, /** @@ -36,7 +36,7 @@ BR.TrackMessages = L.Class.extend({ */ trackPolyline: null, - initialize: function(map, options) { + initialize: function (map, options) { L.setOptions(this, options); this._map = map; @@ -48,7 +48,7 @@ BR.TrackMessages = L.Class.extend({ L.DomEvent.on(syncButton, 'click', this._toggleSyncMap, this); }, - update: function(polyline, segments) { + update: function (polyline, segments) { var i, messages, columns, @@ -89,7 +89,7 @@ BR.TrackMessages = L.Class.extend({ // (^= minimum height with flexbox?) scrollY: 50, scrollX: true, - order: [] + order: [], }); // highlight track segment (graph edge) on row hover @@ -98,23 +98,21 @@ BR.TrackMessages = L.Class.extend({ $('#datatable tbody').on('click', 'tr', L.bind(this._toggleSelected, this)); }, - show: function() { + show: function () { this.active = true; this.options.requestUpdate(this); }, - hide: function() { + hide: function () { this.active = false; }, - _destroyTable: function() { + _destroyTable: function () { var ele; if ($.fn.DataTable.isDataTable('#datatable')) { // destroy option too slow on update, really remove elements with destroy method - $('#datatable') - .DataTable() - .destroy(true); + $('#datatable').DataTable().destroy(true); // recreate original table element, destroy removes all ele = document.createElement('table'); @@ -126,7 +124,7 @@ BR.TrackMessages = L.Class.extend({ return ele || document.getElementById('datatable'); }, - _getColumns: function(headings, data) { + _getColumns: function (headings, data) { var columns = [], defaultOptions, options, @@ -135,7 +133,7 @@ BR.TrackMessages = L.Class.extend({ for (k = 0; k < headings.length; k++) { defaultOptions = { title: headings[k], - visible: !emptyColumns[k] + visible: !emptyColumns[k], }; options = L.extend(defaultOptions, this.columnOptions[headings[k]]); columns.push(options); @@ -143,7 +141,7 @@ BR.TrackMessages = L.Class.extend({ return columns; }, - _getEmptyColumns: function(data) { + _getEmptyColumns: function (data) { var empty = new Array(data[0].length), i; @@ -151,8 +149,8 @@ BR.TrackMessages = L.Class.extend({ empty[i] = true; } - data.forEach(function(row) { - row.forEach(function(val, i) { + data.forEach(function (row) { + row.forEach(function (val, i) { empty[i] = empty[i] && !val; }); }); @@ -160,7 +158,7 @@ BR.TrackMessages = L.Class.extend({ return empty; }, - _getRowEdge: function(tr) { + _getRowEdge: function (tr) { var row = this._table.row($(tr)), trackLatLngs = this.trackPolyline.getLatLngs(), startIndex = row.index() > 0 ? this.trackEdges.edges[row.index() - 1] : 0, @@ -170,7 +168,7 @@ BR.TrackMessages = L.Class.extend({ return L.polyline(edgeLatLngs, this.options.edgeStyle); }, - _handleHover: function(evt) { + _handleHover: function (evt) { var tr = evt.currentTarget; this._hoveredEdge = this._getRowEdge(tr).addTo(this._map); @@ -179,12 +177,12 @@ BR.TrackMessages = L.Class.extend({ } }, - _handleHoverOut: function(evt) { + _handleHoverOut: function (evt) { this._map.removeLayer(this._hoveredEdge); this._hoveredEdge = null; }, - _toggleSelected: function(evt) { + _toggleSelected: function (evt) { var tr = evt.currentTarget; if (tr.classList.toggle('selected')) { @@ -205,10 +203,10 @@ BR.TrackMessages = L.Class.extend({ } }, - _toggleSyncMap: function(evt) { + _toggleSyncMap: function (evt) { var button = evt.currentTarget; button.classList.toggle('active'); this.options.syncMap = !this.options.syncMap; - } + }, }); diff --git a/js/control/TrackStats.js b/js/control/TrackStats.js index 4e33bc5..de6f63f 100644 --- a/js/control/TrackStats.js +++ b/js/control/TrackStats.js @@ -1,5 +1,5 @@ BR.TrackStats = L.Class.extend({ - update: function(polyline, segments) { + update: function (polyline, segments) { if (segments.length == 0) { $('#stats-container').hide(); $('#stats-info').show(); @@ -12,7 +12,7 @@ BR.TrackStats = L.Class.extend({ var stats = this.calcStats(polyline, segments), length1 = L.Util.formatNum(stats.trackLength / 1000, 1).toLocaleString(), length3 = L.Util.formatNum(stats.trackLength / 1000, 3).toLocaleString(undefined, { - minimumFractionDigits: 3 + minimumFractionDigits: 3, }), formattedAscend = stats.filteredAscend.toLocaleString(), formattedPlainAscend = stats.plainAscend.toLocaleString(), @@ -39,14 +39,14 @@ BR.TrackStats = L.Class.extend({ $('#meanenergy').html(meanEnergy); }, - calcStats: function(polyline, segments) { + calcStats: function (polyline, segments) { var stats = { trackLength: 0, filteredAscend: 0, plainAscend: 0, totalTime: 0, totalEnergy: 0, - cost: 0 + cost: 0, }; var i, props; @@ -61,5 +61,5 @@ BR.TrackStats = L.Class.extend({ } return stats; - } + }, }); diff --git a/js/index.js b/js/index.js index 722d2f0..18aa65f 100644 --- a/js/index.js +++ b/js/index.js @@ -4,7 +4,7 @@ Licensed under the MIT license. */ -(function() { +(function () { var mapContext; function verifyTouchStyle(mapContext) { @@ -42,14 +42,14 @@ iconBase: 'fa', tickIcon: 'fa-check', // don't overlap with footer - windowPadding: [0, 0, 40, 0] + windowPadding: [0, 0, 40, 0], }); search = new BR.Search(); map.addControl(search); $('#map .leaflet-control-geocoder > button')[0].title = i18next.t('keyboard.generic-shortcut', { action: '$t(map.geocoder)', - key: 'F' + key: 'F', }); router = L.bRouter(); //brouterCgi dummyRouter @@ -59,67 +59,67 @@ { stateName: 'deactivate-draw', icon: 'fa-pencil active', - onClick: function(control) { + onClick: function (control) { routing.draw(false); control.state('activate-draw'); }, title: i18next.t('keyboard.generic-shortcut', { action: '$t(map.draw-route-stop)', - key: '$t(keyboard.escape)' - }) + key: '$t(keyboard.escape)', + }), }, { stateName: 'activate-draw', icon: 'fa-pencil', - onClick: function(control) { + onClick: function (control) { routing.draw(true); control.state('deactivate-draw'); }, title: i18next.t('keyboard.generic-shortcut', { action: '$t(map.draw-route-start)', - key: 'D' - }) - } - ] + key: 'D', + }), + }, + ], }); var reverseRouteButton = L.easyButton( 'fa-random', - function() { + function () { routing.reverse(); }, i18next.t('keyboard.generic-shortcut', { action: '$t(map.reverse-route)', - key: 'R' + key: 'R', }) ); var deletePointButton = L.easyButton( '', - function() { + function () { routing.deleteLastPoint(); }, i18next.t('keyboard.generic-shortcut', { action: '$t(map.delete-last-point)', - key: 'Z' + key: 'Z', }) ); deleteRouteButton = L.easyButton( 'fa-trash-o', - function() { + function () { clearRoute(); }, i18next.t('keyboard.generic-shortcut', { action: '$t(map.clear-route)', - key: '$t(keyboard.backspace)' + key: '$t(keyboard.backspace)', }) ); L.DomEvent.addListener( document, 'keydown', - function(e) { + function (e) { if (BR.Util.keyboardShortcutsAllowed(e) && !$('.modal.show').length) { if (e.keyCode === 8) { // char code for 'backspace' @@ -141,19 +141,19 @@ inputOptions: [ { text: i18next.t('map.delete-route'), - value: 'route' + value: 'route', }, { text: i18next.t('map.delete-nogo-areas'), - value: 'nogo' + value: 'nogo', }, { text: i18next.t('map.delete-pois'), - value: 'pois' - } + value: 'pois', + }, ], value: ['route'], - callback: function(result) { + callback: function (result) { if (result !== null) { if (result.indexOf('route') !== -1) { routing.clear(); @@ -167,7 +167,7 @@ onUpdate(); urlHash.onMapMove(); } - } + }, }); } @@ -190,17 +190,17 @@ routingOptions = new BR.RoutingOptions(); routingOptions.on('update', updateRoute); - routingOptions.on('update', function(evt) { + routingOptions.on('update', function (evt) { profile.update(evt.options); }); BR.NogoAreas.MSG_BUTTON = i18next.t('keyboard.generic-shortcut', { action: '$t(map.nogo.draw)', - key: 'N' + key: 'N', }); BR.NogoAreas.MSG_BUTTON_CANCEL = i18next.t('keyboard.generic-shortcut', { action: '$t(map.nogo.cancel)', - key: '$t(keyboard.escape)' + key: '$t(keyboard.escape)', }); BR.NogoAreas.MSG_CREATE = i18next.t('map.nogo.click-drag'); BR.NogoAreas.MSG_DISABLED = i18next.t('map.nogo.edit'); @@ -217,14 +217,14 @@ elevation = new BR.Elevation(); profile = new BR.Profile(); - profile.on('update', function(evt) { + profile.on('update', function (evt) { BR.message.hide(); var profileId = routingOptions.getCustomProfile(); - router.uploadProfile(profileId, evt.profileText, function(err, profileId) { + router.uploadProfile(profileId, evt.profileText, function (err, profileId) { if (!err) { routingOptions.setCustomProfile(profileId, true); updateRoute({ - options: routingOptions.getOptions() + options: routingOptions.getOptions(), }); } else { profile.message.showError(err); @@ -239,38 +239,38 @@ } }); }); - profile.on('clear', function(evt) { + profile.on('clear', function (evt) { profile.message.hide(); routingOptions.setCustomProfile(null); }); trackMessages = new BR.TrackMessages(map, { - requestUpdate: requestUpdate + requestUpdate: requestUpdate, }); trackAnalysis = new BR.TrackAnalysis(map, { - requestUpdate: requestUpdate + requestUpdate: requestUpdate, }); routingPathQuality = new BR.RoutingPathQuality(map, layersControl); routing = new BR.Routing({ routing: { - router: L.bind(router.getRouteSegment, router) + router: L.bind(router.getRouteSegment, router), }, - styles: BR.conf.routingStyles + styles: BR.conf.routingStyles, }); pois = new BR.PoiMarkers(routing); exportRoute = new BR.Export(router, pois); - routing.on('routing:routeWaypointEnd routing:setWaypointsEnd', function(evt) { + routing.on('routing:routeWaypointEnd routing:setWaypointsEnd', function (evt) { search.clear(); onUpdate(evt && evt.err); }); - map.on('routing:draw-start', function() { + map.on('routing:draw-start', function () { drawButton.state('deactivate-draw'); }); - map.on('routing:draw-end', function() { + map.on('routing:draw-end', function () { drawButton.state('activate-draw'); }); @@ -311,8 +311,8 @@ listeningTabs: { tab_profile: profile, tab_data: trackMessages, - tab_analysis: trackAnalysis - } + tab_analysis: trackAnalysis, + }, }).addTo(map); if (BR.conf.transit) { sidebar.showPanel('tab_itinerary'); @@ -357,10 +357,10 @@ id: 'route', title: i18next.t('map.opacity-slider-shortcut', { action: '$t(map.opacity-slider)', - key: 'M' + key: 'M', }), muteKeyCode: 77, // m - callback: L.bind(routing.setOpacity, routing) + callback: L.bind(routing.setOpacity, routing), }) ); @@ -375,8 +375,8 @@ layersControl.loadActiveLayers(); } - var onHashChangeCb = function(url) { - var url2params = function(s) { + var onHashChangeCb = function (url) { + var url2params = function (s) { s = s.replace(/;/g, '|'); var p = {}; var sep = '&'; @@ -411,7 +411,7 @@ } }; - var onInvalidHashChangeCb = function(params) { + var onInvalidHashChangeCb = function (params) { params = params.replace('zoom=', 'map='); params = params.replace('&lat=', '/'); params = params.replace('&lon=', '/'); @@ -422,7 +422,7 @@ // do not initialize immediately urlHash = new L.Hash(null, null); // this callback is used to append anything in URL after L.Hash wrote #map=zoom/lat/lng/layer - urlHash.additionalCb = function() { + urlHash.additionalCb = function () { var url = router .getUrl(routing.getWaypoints(), pois.getMarkers(), circlego ? circlego.getCircle() : null, null) .substr('brouter?'.length + 1); @@ -435,12 +435,12 @@ urlHash.onHashChangeCb = onHashChangeCb; urlHash.onInvalidHashChangeCb = onInvalidHashChangeCb; urlHash.init(map, { - layersControl: layersControl + layersControl: layersControl, }); // activate configured default base layer or first if no hash, // only after hash init, by using the same delay - setTimeout(function() { + setTimeout(function () { layersControl.activateDefaultBaseLayer(); }, urlHash.changeDefer); @@ -452,7 +452,7 @@ // delete last waypoint routing.on( 'waypoint:click', - function(evt) { + function (evt) { var r = evt.marker._routing; if (!r.prevMarker && !r.nextMarker) { urlHash.onMapMove(); @@ -462,13 +462,13 @@ ); // listener and initCollapse here and not in onAdd, as addBelow calls addTo (-> onAdd) on resize - $(window).resize(function() { + $(window).resize(function () { elevation.addBelow(map); }); elevation.initCollapse(map); } - i18next.on('languageChanged', function(detectedLanguage) { + i18next.on('languageChanged', function (detectedLanguage) { // detected + fallbacks, e.g. ["de-DE", "de", "en"] for (i = 0; i < i18next.languages.length; i++) { var language = i18next.languages[i]; @@ -491,14 +491,14 @@ { fallbackLng: 'en', backend: { - loadPath: 'dist/locales/{{lng}}.json' - } + loadPath: 'dist/locales/{{lng}}.json', + }, }, - function(err, t) { + function (err, t) { jqueryI18next.init(i18next, $, { useOptionsAttr: true }); $('html').localize(); $('#aboutLinks').localize({ - privacyPolicyUrl: BR.conf.privacyPolicyUrl || 'https://brouter.de/privacypolicy.html' + privacyPolicyUrl: BR.conf.privacyPolicyUrl || 'https://brouter.de/privacypolicy.html', }); mapContext = BR.Map.initMap(); diff --git a/js/plugin/Bing.js b/js/plugin/Bing.js index f2d071c..4446d05 100644 --- a/js/plugin/Bing.js +++ b/js/plugin/Bing.js @@ -3,14 +3,14 @@ BR.BingLayer = L.BingLayer.extend({ maxZoom: 19, attribution: 'Bing Maps' + - ' (TOU)' + ' (TOU)', }, - initialize: function(key, options) { + initialize: function (key, options) { L.BingLayer.prototype.initialize.call(this, key, options); this._logo = L.control({ position: 'bottomleft' }); - this._logo.onAdd = function(map) { + this._logo.onAdd = function (map) { this._div = L.DomUtil.create('div', 'bing-logo'); this._div.innerHTML = ''; @@ -18,13 +18,13 @@ BR.BingLayer = L.BingLayer.extend({ }; }, - onAdd: function(map) { + onAdd: function (map) { L.BingLayer.prototype.onAdd.call(this, map); map.addControl(this._logo); }, - onRemove: function(map) { + onRemove: function (map) { L.BingLayer.prototype.onRemove.call(this, map); map.removeControl(this._logo); - } + }, }); diff --git a/js/plugin/CircleGoArea.js b/js/plugin/CircleGoArea.js index f645df7..41b45a2 100644 --- a/js/plugin/CircleGoArea.js +++ b/js/plugin/CircleGoArea.js @@ -7,17 +7,17 @@ BR.CircleGoArea = L.Control.extend({ shortcut: { draw: { enable: 73, // char code for 'i' - disable: 27 // char code for 'ESC' - } - } + disable: 27, // char code for 'ESC' + }, + }, }, - initialize: function(routing, nogos, pois) { + initialize: function (routing, nogos, pois) { this.routing = routing; this.nogos = nogos; this.pois = pois; }, - onAdd: function(map) { + onAdd: function (map) { var self = this; this.map = map; @@ -29,29 +29,29 @@ BR.CircleGoArea = L.Control.extend({ { stateName: 'activate-circlego', icon: 'fa-circle-o', - onClick: function() { + onClick: function () { self.draw(true); }, title: i18next.t('keyboard.generic-shortcut', { action: i18next.t('map.draw-circlego-start', { radius: radiusKm }), - key: 'I' - }) + key: 'I', + }), }, { stateName: 'deactivate-circlego', icon: 'fa-circle-o active', - onClick: function() { + onClick: function () { self.draw(false); }, title: i18next.t('keyboard.generic-shortcut', { action: i18next.t('map.draw-circlego-stop', { radius: radiusKm }), - key: '$t(keyboard.escape)' - }) - } - ] + key: '$t(keyboard.escape)', + }), + }, + ], }); - map.on('routing:draw-start', function() { + map.on('routing:draw-start', function () { self.draw(false); }); @@ -61,7 +61,7 @@ BR.CircleGoArea = L.Control.extend({ return container; }, - draw: function(enable) { + draw: function (enable) { this.drawButton.state(enable ? 'deactivate-circlego' : 'activate-circlego'); if (enable) { this.routing.draw(false); @@ -74,7 +74,7 @@ BR.CircleGoArea = L.Control.extend({ } }, - _keydownListener: function(e) { + _keydownListener: function (e) { if (!BR.Util.keyboardShortcutsAllowed(e)) { return; } @@ -85,7 +85,7 @@ BR.CircleGoArea = L.Control.extend({ } }, - setNogoCircle: function(center) { + setNogoCircle: function (center) { if (center) { var polygon = this.circleToPolygon(center, this.options.radius); var geoJson = JSON.stringify(polygon); @@ -101,9 +101,15 @@ BR.CircleGoArea = L.Control.extend({ } }, - setOutsideArea: function(polygon) { + setOutsideArea: function (polygon) { var inner = polygon.features[0].geometry.coordinates.concat(polygon.features[1].geometry.coordinates); - var world = [[180, 90], [-180, 90], [-180, -90], [180, -90], [180, 90]]; + var world = [ + [180, 90], + [-180, 90], + [-180, -90], + [180, -90], + [180, 90], + ]; polygon.features[0].geometry.coordinates = [world, inner]; polygon.features[0].geometry.type = 'Polygon'; polygon.features.pop(); @@ -114,36 +120,36 @@ BR.CircleGoArea = L.Control.extend({ this.outsideArea = L.geoJson(polygon, { renderer: this.outsideAreaRenderer, - style: function(feature) { + style: function (feature) { return { weight: 2, color: 'black', opacity: 0.4, fillColor: 'black', fillOpacity: 0.4, - className: 'circlego-outside' + className: 'circlego-outside', }; - } + }, }) .on('click', L.DomEvent.stop) .addTo(this.map); }, - onMapClick: function(e) { + onMapClick: function (e) { this.setCircle([e.latlng.lng, e.latlng.lat], false); }, - setCircle: function(center, skipNogo) { + setCircle: function (center, skipNogo) { var self = this; var icon = L.VectorMarkers.icon({ icon: 'home', - markerColor: BR.conf.markerColors.circlego + markerColor: BR.conf.markerColors.circlego, }); var marker = L.marker([center[1], center[0]], { icon: icon, draggable: true, name: name }) - .on('dragend', function(e) { + .on('dragend', function (e) { self.setNogoCircle([e.target.getLatLng().lng, e.target.getLatLng().lat]); }) - .on('click', function() { + .on('click', function () { var drawing = self.drawButton.state() == 'deactivate-circlego'; if (drawing) { self.circleLayer.removeLayer(marker); @@ -162,16 +168,16 @@ BR.CircleGoArea = L.Control.extend({ this.draw(false); }, - clear: function() { + clear: function () { this.circleLayer.clearLayers(); }, - getButton: function() { + getButton: function () { return this.drawButton; }, - getCircle: function() { - var circle = this.circleLayer.getLayers().map(function(it) { + getCircle: function () { + var circle = this.circleLayer.getLayers().map(function (it) { return it.getLatLng(); }); if (circle && circle.length) { @@ -181,15 +187,15 @@ BR.CircleGoArea = L.Control.extend({ } }, - toRadians: function(angleInDegrees) { + toRadians: function (angleInDegrees) { return (angleInDegrees * Math.PI) / 180; }, - toDegrees: function(angleInRadians) { + toDegrees: function (angleInRadians) { return (angleInRadians * 180) / Math.PI; }, - offset: function(c1, distance, bearing) { + offset: function (c1, distance, bearing) { var lon1 = this.toRadians(c1[0]); var lat1 = this.toRadians(c1[1]); var dByR = distance / 6378137; // distance divided by 6378137 (radius of the earth) wgs84 @@ -203,7 +209,7 @@ BR.CircleGoArea = L.Control.extend({ return [this.toDegrees(lon), this.toDegrees(lat)]; }, - circleToPolygon: function(center, radius, numberOfSegments) { + circleToPolygon: function (center, radius, numberOfSegments) { var n = numberOfSegments ? numberOfSegments : 32; var inner = []; @@ -223,20 +229,20 @@ BR.CircleGoArea = L.Control.extend({ properties: {}, geometry: { type: 'LineString', - coordinates: inner.slice(n / 2 - 1) - } + coordinates: inner.slice(n / 2 - 1), + }, }, { type: 'Feature', properties: {}, geometry: { type: 'LineString', - coordinates: inner.slice(0, n / 2 + 1) - } - } - ] + coordinates: inner.slice(0, n / 2 + 1), + }, + }, + ], }; - } + }, }); BR.CircleGoArea.include(L.Evented.prototype); diff --git a/js/plugin/Elevation.js b/js/plugin/Elevation.js index cc10843..b8dadb6 100644 --- a/js/plugin/Elevation.js +++ b/js/plugin/Elevation.js @@ -5,24 +5,21 @@ BR.Elevation = L.Control.Elevation.extend({ top: 20, right: 30, bottom: 30, - left: 60 + left: 60, }, theme: 'steelblue-theme', shortcut: { - toggle: 69 // char code for 'e' - } + toggle: 69, // char code for 'e' + }, }, - onAdd: function(map) { + onAdd: function (map) { var container = L.Control.Elevation.prototype.onAdd.call(this, map); // revert registering touch events when touch screen detection is available and negative // see https://github.com/MrMufflon/Leaflet.Elevation/issues/67 if (L.Browser.touch && BR.Browser.touchScreenDetectable && !BR.Browser.touchScreen) { - this._background - .on('touchmove.drag', null) - .on('touchstart.drag', null) - .on('touchstart.focus', null); + this._background.on('touchmove.drag', null).on('touchstart.drag', null).on('touchstart.focus', null); L.DomEvent.off(this._container, 'touchend', this._dragEndHandler, this); this._background @@ -38,7 +35,7 @@ BR.Elevation = L.Control.Elevation.extend({ return container; }, - addBelow: function(map) { + addBelow: function (map) { // waiting for https://github.com/MrMufflon/Leaflet.Elevation/pull/66 // this.width($('#map').outerWidth()); this.options.width = $('#content').outerWidth(); @@ -55,9 +52,9 @@ BR.Elevation = L.Control.Elevation.extend({ setParent(this.getContainer(), document.getElementById('elevation-chart')); }, - initCollapse: function(map) { + initCollapse: function (map) { var self = this; - var onHide = function() { + var onHide = function () { $('#elevation-btn').removeClass('active'); // we must fetch tiles that are located behind elevation-chart map._onResize(); @@ -66,7 +63,7 @@ BR.Elevation = L.Control.Elevation.extend({ localStorage.removeItem(this.id); } }; - var onShow = function() { + var onShow = function () { $('#elevation-btn').addClass('active'); if (this.id && BR.Util.localStorageAvailable()) { @@ -77,14 +74,14 @@ BR.Elevation = L.Control.Elevation.extend({ $('#elevation-chart') .on('hidden.bs.collapse', onHide) .on('shown.bs.collapse', onShow) - .each(function() { + .each(function () { if (this.id && BR.Util.localStorageAvailable() && localStorage[this.id] === 'true') { self.shouldRestoreChart = true; } }); }, - update: function(track, layer) { + update: function (track, layer) { this.clear(); // bring height indicator to front, because of track casing in BR.Routing @@ -108,9 +105,9 @@ BR.Elevation = L.Control.Elevation.extend({ } }, - _keydownListener: function(e) { + _keydownListener: function (e) { if (BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.shortcut.toggle) { $('#elevation-btn').click(); } - } + }, }); diff --git a/js/plugin/NogoAreas.js b/js/plugin/NogoAreas.js index 2c539bb..521b296 100644 --- a/js/plugin/NogoAreas.js +++ b/js/plugin/NogoAreas.js @@ -3,9 +3,9 @@ BR.NogoAreas = L.Control.extend({ shortcut: { draw: { enable: 78, // char code for 'n' - disable: 27 // char code for 'ESC' - } - } + disable: 27, // char code for 'ESC' + }, + }, }, statics: { @@ -16,7 +16,7 @@ BR.NogoAreas = L.Control.extend({ MSG_ENABLED: '□ = move / resize, = delete,
click nogo to quit editing', STATE_CREATE: 'no-go-create', - STATE_CANCEL: 'cancel-no-go-create' + STATE_CANCEL: 'cancel-no-go-create', }, style: { @@ -25,27 +25,27 @@ BR.NogoAreas = L.Control.extend({ opacity: 0.5, fillColor: null, //same as color by default fillOpacity: 0.2, - dashArray: null + dashArray: null, }, editStyle: { color: '#fe57a1', opacity: 0.6, dashArray: '10, 10', - fillOpacity: 0.1 + fillOpacity: 0.1, }, - initialize: function() { + initialize: function () { this._wasRouteDrawing = false; }, - onAdd: function(map) { + onAdd: function (map) { var self = this; $('#submitNogos').on('click', L.bind(this.uploadNogos, this)); this.drawnItems = new L.FeatureGroup().addTo(map); - this.drawnItems.on('click', function(e) { + this.drawnItems.on('click', function (e) { L.DomEvent.stop(e); e.layer.toggleEdit(); }); @@ -54,10 +54,10 @@ BR.NogoAreas = L.Control.extend({ circleEditorClass: BR.DeletableCircleEditor, // FeatureGroup instead of LayerGroup to propagate events to members editLayer: new L.FeatureGroup().addTo(map), - featuresLayer: this.drawnItems + featuresLayer: this.drawnItems, })); - this.startDrawing = function(control) { + this.startDrawing = function (control) { // initial radius of 0 to detect click, see DeletableCircleEditor.onDrawingMouseUp var opts = L.extend({ radius: 0 }, self.style); editTools.startCircle(null, opts); @@ -65,7 +65,7 @@ BR.NogoAreas = L.Control.extend({ control.state('cancel-no-go-create'); }; - this.stopDrawing = function(control) { + this.stopDrawing = function (control) { editTools.stopDrawing(); control.state('no-go-create'); }; @@ -76,15 +76,15 @@ BR.NogoAreas = L.Control.extend({ stateName: BR.NogoAreas.STATE_CREATE, icon: 'fa-ban', title: BR.NogoAreas.MSG_BUTTON, - onClick: this.startDrawing + onClick: this.startDrawing, }, { stateName: BR.NogoAreas.STATE_CANCEL, icon: 'fa-ban active', title: BR.NogoAreas.MSG_BUTTON_CANCEL, - onClick: this.stopDrawing - } - ] + onClick: this.stopDrawing, + }, + ], }); // prevent instant re-activate when turning off button by both Pointer and Click @@ -95,11 +95,11 @@ BR.NogoAreas = L.Control.extend({ this.editTools.on( 'editable:drawing:end', - function(e) { + function (e) { self.button.state(BR.NogoAreas.STATE_CREATE); setTimeout( - L.bind(function() { + L.bind(function () { // turn editing off after create; async to still fire 'editable:vertex:dragend' e.layer.disableEdit(); }, this), @@ -111,7 +111,7 @@ BR.NogoAreas = L.Control.extend({ this.editTools.on( 'editable:vertex:dragend editable:deleted', - function(e) { + function (e) { this._fireUpdate(); }, this @@ -119,14 +119,14 @@ BR.NogoAreas = L.Control.extend({ this.editTools.on( 'editable:enable', - function(e) { + function (e) { e.layer.setStyle(this.editStyle); }, this ); this.editTools.on( 'editable:disable', - function(e) { + function (e) { e.layer.setStyle(this.style); }, this @@ -139,7 +139,7 @@ BR.NogoAreas = L.Control.extend({ return L.DomUtil.create('div'); }, - _keydownListener: function(e) { + _keydownListener: function (e) { if (!BR.Util.keyboardShortcutsAllowed(e)) { return; } @@ -153,12 +153,12 @@ BR.NogoAreas = L.Control.extend({ } }, - displayUploadError: function(message) { + displayUploadError: function (message) { $('#nogoError').text(message ? message : ''); $('#nogoError').css('display', message ? 'block' : 'none'); }, - uploadNogos: function() { + uploadNogos: function () { var self = this; var geoJSONPromise; @@ -170,21 +170,21 @@ BR.NogoAreas = L.Control.extend({ $('#nogoJSON').val(undefined); } else if (nogoURL) { // TODO: Handle {{bbox}} - geoJSONPromise = fetch(nogoURL).then(function(response) { + geoJSONPromise = fetch(nogoURL).then(function (response) { response.json(); }); } else if (nogoFile) { - geoJSONPromise = new Promise(function(resolve, reject) { + geoJSONPromise = new Promise(function (resolve, reject) { var reader = new FileReader(); - reader.onload = function() { + reader.onload = function () { resolve(reader.result); }; - reader.onerror = function() { + reader.onerror = function () { self.displayUploadError('Could not load file: ' + reader.error.message); }; reader.readAsText(nogoFile); - }).then(function(response) { + }).then(function (response) { return JSON.parse(response); }); } else { @@ -211,10 +211,10 @@ BR.NogoAreas = L.Control.extend({ return false; } - geoJSONPromise.then(function(response) { + geoJSONPromise.then(function (response) { // Iterate on features in order to discard features without geometry var cleanedGeoJSONFeatures = []; - turf.flattenEach(response, function(feature) { + turf.flattenEach(response, function (feature) { if (turf.getGeom(feature)) { var maybeBufferedFeature = feature; // Eventually buffer GeoJSON @@ -231,31 +231,31 @@ BR.NogoAreas = L.Control.extend({ } var geoJSON = L.geoJson(turf.featureCollection(cleanedGeoJSONFeatures), { - onEachFeature: function(feature, layer) { + onEachFeature: function (feature, layer) { layer.options.nogoWeight = feature.properties.nogoWeight || nogoWeight; - } + }, }); - var nogosPoints = geoJSON.getLayers().filter(function(e) { + var nogosPoints = geoJSON.getLayers().filter(function (e) { return e.feature.geometry.type === 'Point'; }); - nogosPoints = nogosPoints.map(function(item) { + nogosPoints = nogosPoints.map(function (item) { var radius = item.feature.properties.radius || nogoRadius; if (radius > 0) { return L.circle(item.getLatLng(), { radius: radius }); } return null; }); - nogosPoints = nogosPoints.filter(function(e) { + nogosPoints = nogosPoints.filter(function (e) { return e; }); self.setOptions({ nogos: nogosPoints, - polygons: geoJSON.getLayers().filter(function(e) { + polygons: geoJSON.getLayers().filter(function (e) { return e.feature.geometry.type === 'Polygon'; }), - polylines: geoJSON.getLayers().filter(function(e) { + polylines: geoJSON.getLayers().filter(function (e) { return e.feature.geometry.type === 'LineString'; - }) + }), }); self._fireUpdate(); self.displayUploadError(undefined); @@ -265,10 +265,10 @@ BR.NogoAreas = L.Control.extend({ }, // prevent route waypoint added after circle create (map click after up) - preventRoutePointOnCreate: function(routing) { + preventRoutePointOnCreate: function (routing) { this.editTools.on( 'editable:drawing:start', - function(e) { + function (e) { this._wasRouteDrawing = routing.isDrawing(); routing.draw(false); }, @@ -278,9 +278,9 @@ BR.NogoAreas = L.Control.extend({ // after create this.editTools.on( 'editable:drawing:end', - function(e) { + function (e) { if (this._wasRouteDrawing) { - setTimeout(function() { + setTimeout(function () { routing.draw(true); }, 0); } @@ -289,21 +289,21 @@ BR.NogoAreas = L.Control.extend({ ); }, - getOptions: function() { + getOptions: function () { return { - nogos: this.drawnItems.getLayers().filter(function(e) { + nogos: this.drawnItems.getLayers().filter(function (e) { return e instanceof L.Circle; }), - polygons: this.drawnItems.getLayers().filter(function(e) { + polygons: this.drawnItems.getLayers().filter(function (e) { return e instanceof L.Polygon; }), - polylines: this.drawnItems.getLayers().filter(function(e) { + polylines: this.drawnItems.getLayers().filter(function (e) { return e instanceof L.Polyline && !(e instanceof L.Polygon); - }) + }), }; }, - setOptions: function(options) { + setOptions: function (options) { var nogos = options.nogos; var polylines = options.polylines; var polygons = options.polygons; @@ -328,30 +328,30 @@ BR.NogoAreas = L.Control.extend({ } }, - _clear: function() { + _clear: function () { this.drawnItems.clearLayers(); }, - clear: function() { + clear: function () { this._clear(); this._fireUpdate(); }, - _fireUpdate: function() { + _fireUpdate: function () { this.fire('update', { options: this.getOptions() }); }, - getFeatureGroup: function() { + getFeatureGroup: function () { return this.drawnItems; }, - getEditGroup: function() { + getEditGroup: function () { return this.editTools.editLayer; }, - getButton: function() { + getButton: function () { return this.button; - } + }, }); BR.NogoAreas.include(L.Evented.prototype); @@ -363,7 +363,7 @@ BR.Editable = L.Editable.extend({ // Also, we generally disable the Tap handler in the map options for route dragging, // see Map.js, so we always need to enable for drawing. - initialize: function(map, options) { + initialize: function (map, options) { L.Editable.prototype.initialize.call(this, map, options); if (!this.map.tap) { @@ -372,7 +372,7 @@ BR.Editable = L.Editable.extend({ } }, - registerForDrawing: function(editor) { + registerForDrawing: function (editor) { this._tapEnabled = this.map.tap.enabled(); if (!this._tapEnabled) { this.map.tap.enable(); @@ -381,7 +381,7 @@ BR.Editable = L.Editable.extend({ L.Editable.prototype.registerForDrawing.call(this, editor); }, - unregisterForDrawing: function(editor) { + unregisterForDrawing: function (editor) { if (!this._tapEnabled) { this.map.tap.disable(); } @@ -389,23 +389,23 @@ BR.Editable = L.Editable.extend({ L.Editable.prototype.unregisterForDrawing.call(this, editor); }, - createVertexIcon: function(options) { + createVertexIcon: function (options) { return BR.Browser.touch ? new L.Editable.TouchVertexIcon(options) : new L.Editable.VertexIcon(options); - } + }, }); BR.EditingTooltip = L.Handler.extend({ options: { - closeTimeout: 2000 + closeTimeout: 2000, }, - initialize: function(map, editTools, button) { + initialize: function (map, editTools, button) { this.map = map; this.editTools = editTools; this.button = button; }, - addHooks: function() { + addHooks: function () { // hack: listen to EasyButton click (instead of editable:drawing:start), // to get mouse position from event for initial tooltip location L.DomEvent.addListener(this.button.button, 'click', this._addCreate, this); @@ -417,7 +417,7 @@ BR.EditingTooltip = L.Handler.extend({ this.editTools.on('editable:disable', this._disable, this); }, - removeHooks: function() { + removeHooks: function () { L.DomEvent.removeListener(this.button.button, 'click', this._addCreate, this); this.editTools.featuresLayer.off('layeradd', this._bind, this); @@ -427,19 +427,19 @@ BR.EditingTooltip = L.Handler.extend({ this.editTools.off('editable:disable', this._disable, this); }, - _bind: function(e) { + _bind: function (e) { // Position tooltip at bottom of circle, less distracting than // sticky with cursor or at center. var layer = e.layer; layer.bindTooltip(BR.NogoAreas.MSG_DISABLED, { direction: 'bottom', - className: 'editing-tooltip' + className: 'editing-tooltip', }); // Override to set position to south instead of center (circle latlng); // works better with zooming than updating offset to match radius - layer.openTooltip = function(layer, latlng) { + layer.openTooltip = function (layer, latlng) { if (!latlng && layer instanceof L.Layer) { latlng = L.latLng( layer.getBounds().getSouth(), @@ -450,7 +450,7 @@ BR.EditingTooltip = L.Handler.extend({ }; }, - _addCreate: function(e) { + _addCreate: function (e) { // button cancel if (!this.editTools.drawing()) return; @@ -461,21 +461,21 @@ BR.EditingTooltip = L.Handler.extend({ // offset wrong with 'auto' when switching direction direction: 'right', offset: L.point(5, 28), - className: 'editing-tooltip-create' + className: 'editing-tooltip-create', }); // self-reference hack for _moveTooltip, as tooltip is not bound to layer tooltip._tooltip = tooltip; // simulate sticky feature (follow mouse) for map tooltip without layer - var onOffMove = function(e) { + var onOffMove = function (e) { var onOff = e.type === 'tooltipclose' ? 'off' : 'on'; this._map[onOff]('mousemove', this._moveTooltip, this); }; this.map.on('tooltipopen', onOffMove, tooltip); this.map.on('tooltipclose', onOffMove, tooltip); - var onTooltipRemove = function(e) { + var onTooltipRemove = function (e) { this.map.off('tooltipopen', onOffMove, e.tooltip); this.map.off('tooltipclose', onOffMove, e.tooltip); this.map.off('tooltipclose', onTooltipRemove, this); @@ -486,7 +486,7 @@ BR.EditingTooltip = L.Handler.extend({ tooltip.setTooltipContent(BR.NogoAreas.MSG_CREATE); this.map.openTooltip(tooltip, initialLatLng); - var closeTooltip = function() { + var closeTooltip = function () { this.map.closeTooltip(tooltip); }; this.editTools.once('editable:editing editable:drawing:cancel', closeTooltip, this); @@ -497,22 +497,22 @@ BR.EditingTooltip = L.Handler.extend({ } }, - _setCloseTimeout: function(layer) { - var timeoutId = setTimeout(function() { + _setCloseTimeout: function (layer) { + var timeoutId = setTimeout(function () { layer.closeTooltip(); }, this.options.closeTimeout); // prevent timer to close tooltip that changed in the meantime - layer.once('tooltipopen', function(e) { + layer.once('tooltipopen', function (e) { clearTimeout(timeoutId); }); }, - _postCreate: function() { + _postCreate: function () { // editing is disabled by another handler, tooltip won't stay open before this.editTools.once( 'editable:disable', - function(e) { + function (e) { // show for a few seconds, as mouse often not hovering circle after create e.layer.openTooltip(e.layer); this._setCloseTimeout(e.layer); @@ -521,54 +521,54 @@ BR.EditingTooltip = L.Handler.extend({ ); }, - _enable: function(e) { + _enable: function (e) { e.layer.setTooltipContent(BR.NogoAreas.MSG_ENABLED); this.editTools.once( 'editable:editing', - function(e) { + function (e) { e.layer.closeTooltip(); }, this ); }, - _disable: function(e) { + _disable: function (e) { e.layer.setTooltipContent(BR.NogoAreas.MSG_DISABLED); this._setCloseTimeout(e.layer); - } + }, }); BR.DeletableCircleEditor = L.Editable.CircleEditor.extend({ - _computeDeleteLatLng: function() { + _computeDeleteLatLng: function () { // While circle is not added to the map, _radius is not set. var delta = (this.feature._radius || this.feature._mRadius) * Math.cos(Math.PI / 4), point = this.map.project(this.feature._latlng); return this.map.unproject([point.x - delta, point.y - delta]); }, - _updateDeleteLatLng: function() { + _updateDeleteLatLng: function () { this._deleteLatLng.update(this._computeDeleteLatLng()); this._deleteLatLng.__vertex.update(); }, - _addDeleteMarker: function() { + _addDeleteMarker: function () { if (!this.enabled()) return; this._deleteLatLng = this._computeDeleteLatLng(); return new BR.DeleteMarker(this._deleteLatLng, this); }, - _delete: function() { + _delete: function () { this.disable(); this.tools.featuresLayer.removeLayer(this.feature); }, - delete: function() { + delete: function () { this._delete(); this.fireAndForward('editable:deleted'); }, - initialize: function(map, feature, options) { + initialize: function (map, feature, options) { L.Editable.CircleEditor.prototype.initialize.call(this, map, feature, options); this._deleteLatLng = this._computeDeleteLatLng(); @@ -576,7 +576,7 @@ BR.DeletableCircleEditor = L.Editable.CircleEditor.extend({ this.editLayer = new L.FeatureGroup(); }, - addHooks: function() { + addHooks: function () { L.Editable.CircleEditor.prototype.addHooks.call(this); if (this.feature) { this._addDeleteMarker(); @@ -584,12 +584,12 @@ BR.DeletableCircleEditor = L.Editable.CircleEditor.extend({ return this; }, - reset: function() { + reset: function () { L.Editable.CircleEditor.prototype.reset.call(this); this._addDeleteMarker(); }, - onDrawingMouseDown: function(e) { + onDrawingMouseDown: function (e) { this._deleteLatLng.update(e.latlng); L.Editable.CircleEditor.prototype.onDrawingMouseDown.call(this, e); }, @@ -597,7 +597,7 @@ BR.DeletableCircleEditor = L.Editable.CircleEditor.extend({ // override to cancel/remove created circle when added by click instead of drag, because: // - without resize, edit handles stacked on top of each other // - makes event handling more complicated (editable:vertex:dragend not called) - onDrawingMouseUp: function(e) { + onDrawingMouseUp: function (e) { if (this.feature.getRadius() > 0) { this.commitDrawing(e); } else { @@ -608,10 +608,10 @@ BR.DeletableCircleEditor = L.Editable.CircleEditor.extend({ L.Editable.PathEditor.prototype.onDrawingMouseUp.call(this, e); }, - onVertexMarkerDrag: function(e) { + onVertexMarkerDrag: function (e) { this._updateDeleteLatLng(); L.Editable.CircleEditor.prototype.onVertexMarkerDrag.call(this, e); - } + }, }); BR.DeleteMarker = L.Marker.extend({ @@ -619,11 +619,11 @@ BR.DeleteMarker = L.Marker.extend({ draggable: false, icon: L.divIcon({ iconSize: BR.Browser.touch ? new L.Point(24, 24) : new L.Point(16, 16), - className: 'leaflet-div-icon fa fa-trash-o nogo-delete-marker' - }) + className: 'leaflet-div-icon fa fa-trash-o nogo-delete-marker', + }), }, - initialize: function(latlng, editor, options) { + initialize: function (latlng, editor, options) { // derived from L.Editable.VertexMarker.initialize // We don't use this._latlng, because on drag Leaflet replace it while @@ -640,18 +640,18 @@ BR.DeleteMarker = L.Marker.extend({ this.setZIndexOffset(editor.tools._lastZIndex); }, - onAdd: function(map) { + onAdd: function (map) { L.Marker.prototype.onAdd.call(this, map); this.on('click', this.onClick); }, - onRemove: function(map) { + onRemove: function (map) { delete this.latlng.__vertex; this.off('click', this.onClick); L.Marker.prototype.onRemove.call(this, map); }, - onClick: function(e) { + onClick: function (e) { this.editor.delete(); - } + }, }); diff --git a/js/plugin/POIMarkers.js b/js/plugin/POIMarkers.js index 247da53..30df878 100644 --- a/js/plugin/POIMarkers.js +++ b/js/plugin/POIMarkers.js @@ -6,16 +6,16 @@ BR.PoiMarkers = L.Control.extend({ shortcut: { draw: { enable: 80, // char code for 'p' - disable: 27 // char code for 'ESC' - } - } + disable: 27, // char code for 'ESC' + }, + }, }, - initialize: function(routing) { + initialize: function (routing) { this.routing = routing; this.circlego = null; }, - onAdd: function(map) { + onAdd: function (map) { var self = this; this.map = map; @@ -26,26 +26,26 @@ BR.PoiMarkers = L.Control.extend({ { stateName: 'activate-poi', icon: 'fa-hand-o-right', - onClick: function() { + onClick: function () { self.draw(true); }, - title: i18next.t('keyboard.generic-shortcut', { action: '$t(map.draw-poi-start)', key: 'P' }) + title: i18next.t('keyboard.generic-shortcut', { action: '$t(map.draw-poi-start)', key: 'P' }), }, { stateName: 'deactivate-poi', icon: 'fa-hand-o-right active', - onClick: function() { + onClick: function () { self.draw(false); }, title: i18next.t('keyboard.generic-shortcut', { action: '$t(map.draw-poi-stop)', - key: '$t(keyboard.escape)' - }) - } - ] + key: '$t(keyboard.escape)', + }), + }, + ], }).addTo(map); - map.on('routing:draw-start', function() { + map.on('routing:draw-start', function () { self.draw(false); }); @@ -55,7 +55,7 @@ BR.PoiMarkers = L.Control.extend({ return container; }, - draw: function(enable) { + draw: function (enable) { this.drawButton.state(enable ? 'deactivate-poi' : 'activate-poi'); if (enable) { this.routing.draw(false); @@ -68,7 +68,7 @@ BR.PoiMarkers = L.Control.extend({ } }, - _keydownListener: function(e) { + _keydownListener: function (e) { if (!BR.Util.keyboardShortcutsAllowed(e)) { return; } @@ -79,22 +79,22 @@ BR.PoiMarkers = L.Control.extend({ } }, - onMapClick: function(e) { + onMapClick: function (e) { var self = this; bootbox.prompt({ title: i18next.t('map.enter-poi-name'), - callback: function(result) { + callback: function (result) { if (result !== null) { self.addMarker(e.latlng, result); } - } + }, }); }, - addMarker: function(latlng, name) { + addMarker: function (latlng, name) { var icon = L.VectorMarkers.icon({ icon: 'star', - markerColor: BR.conf.markerColors.poi + markerColor: BR.conf.markerColors.poi, }); var content = BR.Util.sanitizeHTMLContent(name) + '
'; @@ -103,11 +103,11 @@ BR.PoiMarkers = L.Control.extend({ var self = this; var marker = L.marker(latlng, { icon: icon, draggable: true, name: name }) .bindPopup(content) - .on('dragend', function() { + .on('dragend', function () { self.fire('update'); }) - .on('popupopen', function() { - $('#remove-poi-marker').on('click', function(e) { + .on('popupopen', function () { + $('#remove-poi-marker').on('click', function (e) { self.markersLayer.removeLayer(marker); e.preventDefault(); self.fire('update'); @@ -116,11 +116,11 @@ BR.PoiMarkers = L.Control.extend({ .addTo(this.markersLayer); }, - clear: function() { + clear: function () { this.markersLayer.clearLayers(); }, - setMarkers: function(latLngNames) { + setMarkers: function (latLngNames) { this.clear(); if (!latLngNames) return; @@ -131,14 +131,14 @@ BR.PoiMarkers = L.Control.extend({ } }, - getMarkers: function() { - return this.markersLayer.getLayers().map(function(it) { + getMarkers: function () { + return this.markersLayer.getLayers().map(function (it) { return { latlng: it.getLatLng(), - name: it.options.name + name: it.options.name, }; }); - } + }, }); BR.PoiMarkers.include(L.Evented.prototype); diff --git a/js/plugin/RouteLoaderConverter.js b/js/plugin/RouteLoaderConverter.js index 0fb1b0f..1c0b357 100644 --- a/js/plugin/RouteLoaderConverter.js +++ b/js/plugin/RouteLoaderConverter.js @@ -1,395 +1,393 @@ -BR.routeLoader = function(map, layersControl, routing, pois) { - RouteLoader = L.Control.extend({ - _layerName: 'Tracklayer', - _trackLayer: undefined, - _bounds: undefined, - _testLayer: L.layerGroup().addTo(map), - _trackPoints: [], - _maxTrackPoints: 200, - _closeCanceled: true, - _currentGeoJSON: {}, - _options: { - format: undefined, - showTrackLayer: true, - showPointAsPoi: true, - simplifyTolerance: -1, - isTestMode: false, - simplifyLastKnownGood: 0.001 - }, - - setDialogDraggable: function(jqDlgHeader) { - jqDlgHeader.on('mousedown', function(mousedownEvt) { - var $draggable = $(this); - var x = mousedownEvt.pageX - $draggable.offset().left, - y = mousedownEvt.pageY - $draggable.offset().top; - $('body').on('mousemove.draggable', function(mousemoveEvt) { - $draggable.closest('.modal-dialog').offset({ - left: mousemoveEvt.pageX - x, - top: mousemoveEvt.pageY - y - }); - }); - $('body').one('mouseup', function() { - $('body').off('mousemove.draggable'); - }); - $draggable.closest('.modal').one('bs.modal.hide', function() { - $('body').off('mousemove.draggable'); - }); - }); - }, - - getSimplifiedCoords: function(tolerance) { - var simplifiedLine = turf.simplify(this._trackPoints.geometry, { - tolerance: tolerance, - highQuality: true - }); - return simplifiedLine.coordinates; - }, - - refreshTestLayer: function() { - this.onBusyChanged(true); - this._testLayer.clearLayers(); - - var simplifiedLatLngs = L.GeoJSON.coordsToLatLngs( - this.getSimplifiedCoords(this._options.simplifyTolerance) - ); - if (simplifiedLatLngs.length > this._maxTrackPoints) { - this.onBusyChanged(false); - return false; - } - for (var i = 0; i < simplifiedLatLngs.length; i++) { - this._testLayer.addLayer( - L.circleMarker(simplifiedLatLngs[i], { - radius: 6, - fill: false, - color: '#FF0000' - }) - ); - } - - this.onBusyChanged(false); - return true; - }, - - cleanup: function(e) { - this._testLayer.clearLayers(); - if ( - this._trackLayer && - map.hasLayer(this._trackLayer) && - (!this._options.showTrackLayer || this._closeCanceled) - ) { - map.removeLayer(this._trackLayer); - layersControl.removeLayer(this._trackLayer); - this._trackLayer = undefined; - } - (this._bounds = undefined), (this._trackPoints = []); - this._currentGeoJSON = {}; - this._options = { - ext: 'gpx', - showTrackLayer: true, - showPointAsPoi: true, - simplifyTolerance: -1, - isTestMode: false, - simplifyLastKnownGood: 0.001 - }; - }, - - setSliderRange: function() { - $slider = $('#simplify_tolerance'); - $slider.prop('min', -500); - var guessedTolerance = this.guessSimplifyTolerance(this._trackPoints); - var guessedLength = this.getSimplifiedCoords(guessedTolerance).length; - - if (guessedLength > this._maxTrackPoints) { - this._maxTrackPoints = guessedLength; - $slider.prop('min', 0); - } - - $slider.data('lastknowngood', 0); - $slider.data('guess', guessedTolerance.toFixed(20)); - $slider.val(0); - this._options.simplifyTolerance = guessedTolerance; - this.refreshTestLayer(); - }, - - onToleranceSlider: function(e) { - var guess = parseFloat($(e.target).data('guess')); - var f = parseFloat(e.target.value); - var frac = parseFloat($(e.target).prop('max')); - - if (f > guess) - this._options.simplifyTolerance = guess + Math.pow(f, 2) * (guess / (Math.pow(frac, 2) / 10)); - else this._options.simplifyTolerance = Math.abs(guess + Math.pow(f, 3) * (guess / Math.pow(frac, 3))); - - if (!this.refreshTestLayer()) { - var iterate = this.findLowestTolerance( - parseInt(e.target.value), - parseInt($(e.target).data('lastknowngood')), - guess, - frac - ); - $(e.target).prop('min', iterate); - $(e.target).data('lastknowngood', iterate); - e.target.value = $(e.target).data('lastknowngood'); - this._options.simplifyTolerance = this._options.simplifyLastKnownGood = Math.abs( - guess + Math.pow(iterate, 3) * (guess / Math.pow(frac, 3)) - ); - this.refreshTestLayer(); - } else { - this._options.simplifyLastKnownGood = this._options.simplifyTolerance; - $(e.target).data('lastknowngood', e.target.value); - } - }, - - findLowestTolerance: function(min, max, guess, frac) { - if (Math.abs(max - min) <= 2) return max; - var meridian = Math.round((max + min) / 2); - - var tolerance = Math.abs(guess + Math.pow(meridian, 3) * (guess / Math.pow(frac, 3))); - var simplifiedCoords = this.getSimplifiedCoords(tolerance); - - if (simplifiedCoords.length > this._maxTrackPoints) - return this.findLowestTolerance(meridian, max, guess, frac); - else return this.findLowestTolerance(min, meridian, guess, frac); - }, - - onBusyChanged: function(isBusy) { - if (typeof isBusy === undefined) { - isBusy = false; - } - if (isBusy === true) $('#loadedittrackdlg #msg_busy').removeClass('invisible'); - else $('#loadedittrackdlg #msg_busy').addClass('invisible'); - }, - - onManualCollapse: function(e) { - //workaround for starting with closed collapse - if ($('#loadedittrackdlg').is(':hidden')) return; - this._options.isTestMode = $(e.target).hasClass('show'); - - if (this._options.isTestMode) { - this.once('file:loaded', this.setSliderRange, this); - this.convertTrackLocal(); - } else this.cleanup(); - }, - - onAdd: function(map) { - $('#loadedittrackdlg').on( - 'hidden.bs.modal', - function(e) { - this.cleanup(); - }.bind(this) - ); - $('#loadedittrackdlg').on( - 'show.bs.modal', - function(e) { - $('#manual_collapse').collapse('hide'); - this._closeCanceled = true; - }.bind(this) - ); - - L.DomUtil.get('submitLoadEditTrack').onclick = L.bind(function() { - this._closeCanceled = false; - this.onBusyChanged(true); - if (this._testLayer.getLayers().length > 0) { - this._testLayer.clearLayers(); - setTimeout( - function() { - this.addRoutingPoints(); - this.onBusyChanged(false); - $('#loadedittrackdlg').modal('hide'); - }.bind(this), - 0 - ); - } else - setTimeout( - function() { - this.convertTrackLocal(); - $('#loadedittrackdlg').modal('hide'); - }.bind(this), - 0 - ); - }, this); - - L.DomUtil.get('simplify_tolerance').oninput = L.bind(this.onToleranceSlider, this); - - L.DomUtil.get('loadedittrackFile').onchange = L.bind(this.onFileChanged, this); - this.onFileChanged({ target: L.DomUtil.get('loadedittrackFile') }); - - this.setDialogDraggable($('#loadedittrackdlg .modal-header')); - - $('#manual_collapse').collapse('hide'); - $('#manual_collapse').on( - 'hidden.bs.collapse shown.bs.collapse', - function(e) { - this.onManualCollapse(e); - }.bind(this) - ); - - // dummy, no own representation, delegating to EasyButton - var dummy = L.DomUtil.create('div'); - dummy.hidden = true; - return dummy; - }, - - onRemove: function(map) { - // Nothing to do here - }, - - onFileChanged: function(e) { - if (!e.target.files[0]) return; - $(e.target) - .next('label') - .text(e.target.files[0].name); - var testmode = this._options.isTestMode; - this.cleanup(); - this._options.isTestMode = testmode; - if (this._options.isTestMode) { - this.once('file:loaded', this.setSliderRange, this); - this.convertTrackLocal(); - } - }, - - setLayerNameFromGeojson: function(geoJSON) { - if (geoJSON.type == 'Feature' && geoJSON.properties && geoJSON.properties.name) { - this._layerName = geoJSON.properties.name; - return; - } - - if (geoJSON.type == 'FeatureCollection') { - for (var i = 0; i < geoJSON.features.length; i++) { - if (geoJSON.features[i].properties && geoJSON.features[i].properties.name) { - this._layerName = geoJSON.features[i].properties.name; - return; - } - } - } - }, - - getOptions: function() { - this._options.showTrackLayer = $('#cb_showtracklayer')[0].checked; - this._options.showPointAsPoi = $('#cb_showpois')[0].checked; - - this._options.simplifyTolerance = -1; - this._bounds = undefined; - }, - - convertTrackLocal: function() { - if ($('#loadedittrackFile')[0].files.length == 0) return; - this.onBusyChanged(true); - - this.getOptions(); - - var trackFile = $('#loadedittrackFile')[0].files[0]; - this._layerName = trackFile.name.replace(/\.[^\.]*$/, ''); - - if (!this._options.format) this._options.format = trackFile.name.split('.').pop(); - - var reader = new FileReader(); - - reader.onload = L.bind(this.processFile, this); - reader.readAsText(trackFile); - }, - - addTrackOverlay: function(geoJSON) { - this._trackLayer = L.geoJSON(geoJSON, BR.Track.getGeoJsonOptions(layersControl)).addTo(map); - - layersControl.addOverlay(this._trackLayer, BR.Util.sanitizeHTMLContent(this._layerName)); - - this._bounds = this._trackLayer.getBounds(); - - if (this._bounds) map.fitBounds(this._bounds); - }, - - getLineStringsFromGeoJSON: function(geoJSON) { - var allLinePoints = []; - var flat = turf.flatten(geoJSON); - turf.featureEach(flat, function(feature, idx) { - if (turf.getType(feature) == 'LineString') { - feature = turf.cleanCoords(feature); - var lPoints = turf.coordAll(feature); - allLinePoints = allLinePoints.concat(lPoints); - } - }); - - var linesGeoJSON = turf.lineString(allLinePoints); - linesGeoJSON.length = allLinePoints.length; - return linesGeoJSON; - }, - - guessSimplifyTolerance: function(trackPoints) { - var tolerance = trackPoints.length / 1000000; - if (tolerance > 0.8) tolerance = 0.8; - return tolerance; - }, - - addRoutingPoints: function(geoJSON) { - if (this._options.simplifyTolerance < 0) - this._options.simplifyTolerance = this.guessSimplifyTolerance(this._trackPoints); - - var routingPoints = []; - var simplifiedLatLngs = L.GeoJSON.coordsToLatLngs( - this.getSimplifiedCoords(this._options.simplifyTolerance) - ); - - for (var i = 0; i < simplifiedLatLngs.length; i++) { - routingPoints.push(simplifiedLatLngs[i]); - } - - if (routingPoints.length > 0) { - routing.setWaypoints(routingPoints, function(event) { - if (!event) return; - var err = event.error; - BR.message.showError( - i18next.t('warning.tracks-load-error', { - error: err && err.message ? err.message : err - }) - ); - }); - - if (!this._bounds) this._bounds = L.latLngBounds(routingPoints); - } - - if (!this._bounds) map.fitBounds(this._bounds); - - if (this._options.showPointAsPoi) { - BR.Track.addPoiMarkers(pois, this._currentGeoJSON); - } - }, - - processFile: function(e) { - var res = e.target.result; - var geoJSON = null; - switch (this._options.format) { - case 'kml': - case 'gpx': - var xml = new DOMParser().parseFromString(res, 'text/xml'); - geoJSON = toGeoJSON[this._options.format](xml); - break; - - default: - geoJSON = JSON.parse(res); - break; - } - - this._currentGeoJSON = geoJSON; - this.setLayerNameFromGeojson(geoJSON); - - this._trackPoints = this.getLineStringsFromGeoJSON(geoJSON); - var length = turf.length(this._trackPoints, { units: 'kilometers' }); - this._maxTrackPoints = Math.min(length * Math.max(-0.14 * length + 10, 1), 200); - this.fire('file:loaded'); - - if (this._options.showTrackLayer || this._options.isTestMode) this.addTrackOverlay(geoJSON); - - if (!this._options.isTestMode) this.addRoutingPoints(); - - this.onBusyChanged(false); - } - }); - - RouteLoader.include(L.Evented.prototype); - - var routeLoaderControl = new RouteLoader(); - routeLoaderControl.addTo(map); - - return routeLoaderControl; -}; +BR.routeLoader = function (map, layersControl, routing, pois) { + RouteLoader = L.Control.extend({ + _layerName: 'Tracklayer', + _trackLayer: undefined, + _bounds: undefined, + _testLayer: L.layerGroup().addTo(map), + _trackPoints: [], + _maxTrackPoints: 200, + _closeCanceled: true, + _currentGeoJSON: {}, + _options: { + format: undefined, + showTrackLayer: true, + showPointAsPoi: true, + simplifyTolerance: -1, + isTestMode: false, + simplifyLastKnownGood: 0.001, + }, + + setDialogDraggable: function (jqDlgHeader) { + jqDlgHeader.on('mousedown', function (mousedownEvt) { + var $draggable = $(this); + var x = mousedownEvt.pageX - $draggable.offset().left, + y = mousedownEvt.pageY - $draggable.offset().top; + $('body').on('mousemove.draggable', function (mousemoveEvt) { + $draggable.closest('.modal-dialog').offset({ + left: mousemoveEvt.pageX - x, + top: mousemoveEvt.pageY - y, + }); + }); + $('body').one('mouseup', function () { + $('body').off('mousemove.draggable'); + }); + $draggable.closest('.modal').one('bs.modal.hide', function () { + $('body').off('mousemove.draggable'); + }); + }); + }, + + getSimplifiedCoords: function (tolerance) { + var simplifiedLine = turf.simplify(this._trackPoints.geometry, { + tolerance: tolerance, + highQuality: true, + }); + return simplifiedLine.coordinates; + }, + + refreshTestLayer: function () { + this.onBusyChanged(true); + this._testLayer.clearLayers(); + + var simplifiedLatLngs = L.GeoJSON.coordsToLatLngs( + this.getSimplifiedCoords(this._options.simplifyTolerance) + ); + if (simplifiedLatLngs.length > this._maxTrackPoints) { + this.onBusyChanged(false); + return false; + } + for (var i = 0; i < simplifiedLatLngs.length; i++) { + this._testLayer.addLayer( + L.circleMarker(simplifiedLatLngs[i], { + radius: 6, + fill: false, + color: '#FF0000', + }) + ); + } + + this.onBusyChanged(false); + return true; + }, + + cleanup: function (e) { + this._testLayer.clearLayers(); + if ( + this._trackLayer && + map.hasLayer(this._trackLayer) && + (!this._options.showTrackLayer || this._closeCanceled) + ) { + map.removeLayer(this._trackLayer); + layersControl.removeLayer(this._trackLayer); + this._trackLayer = undefined; + } + (this._bounds = undefined), (this._trackPoints = []); + this._currentGeoJSON = {}; + this._options = { + ext: 'gpx', + showTrackLayer: true, + showPointAsPoi: true, + simplifyTolerance: -1, + isTestMode: false, + simplifyLastKnownGood: 0.001, + }; + }, + + setSliderRange: function () { + $slider = $('#simplify_tolerance'); + $slider.prop('min', -500); + var guessedTolerance = this.guessSimplifyTolerance(this._trackPoints); + var guessedLength = this.getSimplifiedCoords(guessedTolerance).length; + + if (guessedLength > this._maxTrackPoints) { + this._maxTrackPoints = guessedLength; + $slider.prop('min', 0); + } + + $slider.data('lastknowngood', 0); + $slider.data('guess', guessedTolerance.toFixed(20)); + $slider.val(0); + this._options.simplifyTolerance = guessedTolerance; + this.refreshTestLayer(); + }, + + onToleranceSlider: function (e) { + var guess = parseFloat($(e.target).data('guess')); + var f = parseFloat(e.target.value); + var frac = parseFloat($(e.target).prop('max')); + + if (f > guess) + this._options.simplifyTolerance = guess + Math.pow(f, 2) * (guess / (Math.pow(frac, 2) / 10)); + else this._options.simplifyTolerance = Math.abs(guess + Math.pow(f, 3) * (guess / Math.pow(frac, 3))); + + if (!this.refreshTestLayer()) { + var iterate = this.findLowestTolerance( + parseInt(e.target.value), + parseInt($(e.target).data('lastknowngood')), + guess, + frac + ); + $(e.target).prop('min', iterate); + $(e.target).data('lastknowngood', iterate); + e.target.value = $(e.target).data('lastknowngood'); + this._options.simplifyTolerance = this._options.simplifyLastKnownGood = Math.abs( + guess + Math.pow(iterate, 3) * (guess / Math.pow(frac, 3)) + ); + this.refreshTestLayer(); + } else { + this._options.simplifyLastKnownGood = this._options.simplifyTolerance; + $(e.target).data('lastknowngood', e.target.value); + } + }, + + findLowestTolerance: function (min, max, guess, frac) { + if (Math.abs(max - min) <= 2) return max; + var meridian = Math.round((max + min) / 2); + + var tolerance = Math.abs(guess + Math.pow(meridian, 3) * (guess / Math.pow(frac, 3))); + var simplifiedCoords = this.getSimplifiedCoords(tolerance); + + if (simplifiedCoords.length > this._maxTrackPoints) + return this.findLowestTolerance(meridian, max, guess, frac); + else return this.findLowestTolerance(min, meridian, guess, frac); + }, + + onBusyChanged: function (isBusy) { + if (typeof isBusy === undefined) { + isBusy = false; + } + if (isBusy === true) $('#loadedittrackdlg #msg_busy').removeClass('invisible'); + else $('#loadedittrackdlg #msg_busy').addClass('invisible'); + }, + + onManualCollapse: function (e) { + //workaround for starting with closed collapse + if ($('#loadedittrackdlg').is(':hidden')) return; + this._options.isTestMode = $(e.target).hasClass('show'); + + if (this._options.isTestMode) { + this.once('file:loaded', this.setSliderRange, this); + this.convertTrackLocal(); + } else this.cleanup(); + }, + + onAdd: function (map) { + $('#loadedittrackdlg').on( + 'hidden.bs.modal', + function (e) { + this.cleanup(); + }.bind(this) + ); + $('#loadedittrackdlg').on( + 'show.bs.modal', + function (e) { + $('#manual_collapse').collapse('hide'); + this._closeCanceled = true; + }.bind(this) + ); + + L.DomUtil.get('submitLoadEditTrack').onclick = L.bind(function () { + this._closeCanceled = false; + this.onBusyChanged(true); + if (this._testLayer.getLayers().length > 0) { + this._testLayer.clearLayers(); + setTimeout( + function () { + this.addRoutingPoints(); + this.onBusyChanged(false); + $('#loadedittrackdlg').modal('hide'); + }.bind(this), + 0 + ); + } else + setTimeout( + function () { + this.convertTrackLocal(); + $('#loadedittrackdlg').modal('hide'); + }.bind(this), + 0 + ); + }, this); + + L.DomUtil.get('simplify_tolerance').oninput = L.bind(this.onToleranceSlider, this); + + L.DomUtil.get('loadedittrackFile').onchange = L.bind(this.onFileChanged, this); + this.onFileChanged({ target: L.DomUtil.get('loadedittrackFile') }); + + this.setDialogDraggable($('#loadedittrackdlg .modal-header')); + + $('#manual_collapse').collapse('hide'); + $('#manual_collapse').on( + 'hidden.bs.collapse shown.bs.collapse', + function (e) { + this.onManualCollapse(e); + }.bind(this) + ); + + // dummy, no own representation, delegating to EasyButton + var dummy = L.DomUtil.create('div'); + dummy.hidden = true; + return dummy; + }, + + onRemove: function (map) { + // Nothing to do here + }, + + onFileChanged: function (e) { + if (!e.target.files[0]) return; + $(e.target).next('label').text(e.target.files[0].name); + var testmode = this._options.isTestMode; + this.cleanup(); + this._options.isTestMode = testmode; + if (this._options.isTestMode) { + this.once('file:loaded', this.setSliderRange, this); + this.convertTrackLocal(); + } + }, + + setLayerNameFromGeojson: function (geoJSON) { + if (geoJSON.type == 'Feature' && geoJSON.properties && geoJSON.properties.name) { + this._layerName = geoJSON.properties.name; + return; + } + + if (geoJSON.type == 'FeatureCollection') { + for (var i = 0; i < geoJSON.features.length; i++) { + if (geoJSON.features[i].properties && geoJSON.features[i].properties.name) { + this._layerName = geoJSON.features[i].properties.name; + return; + } + } + } + }, + + getOptions: function () { + this._options.showTrackLayer = $('#cb_showtracklayer')[0].checked; + this._options.showPointAsPoi = $('#cb_showpois')[0].checked; + + this._options.simplifyTolerance = -1; + this._bounds = undefined; + }, + + convertTrackLocal: function () { + if ($('#loadedittrackFile')[0].files.length == 0) return; + this.onBusyChanged(true); + + this.getOptions(); + + var trackFile = $('#loadedittrackFile')[0].files[0]; + this._layerName = trackFile.name.replace(/\.[^\.]*$/, ''); + + if (!this._options.format) this._options.format = trackFile.name.split('.').pop(); + + var reader = new FileReader(); + + reader.onload = L.bind(this.processFile, this); + reader.readAsText(trackFile); + }, + + addTrackOverlay: function (geoJSON) { + this._trackLayer = L.geoJSON(geoJSON, BR.Track.getGeoJsonOptions(layersControl)).addTo(map); + + layersControl.addOverlay(this._trackLayer, BR.Util.sanitizeHTMLContent(this._layerName)); + + this._bounds = this._trackLayer.getBounds(); + + if (this._bounds) map.fitBounds(this._bounds); + }, + + getLineStringsFromGeoJSON: function (geoJSON) { + var allLinePoints = []; + var flat = turf.flatten(geoJSON); + turf.featureEach(flat, function (feature, idx) { + if (turf.getType(feature) == 'LineString') { + feature = turf.cleanCoords(feature); + var lPoints = turf.coordAll(feature); + allLinePoints = allLinePoints.concat(lPoints); + } + }); + + var linesGeoJSON = turf.lineString(allLinePoints); + linesGeoJSON.length = allLinePoints.length; + return linesGeoJSON; + }, + + guessSimplifyTolerance: function (trackPoints) { + var tolerance = trackPoints.length / 1000000; + if (tolerance > 0.8) tolerance = 0.8; + return tolerance; + }, + + addRoutingPoints: function (geoJSON) { + if (this._options.simplifyTolerance < 0) + this._options.simplifyTolerance = this.guessSimplifyTolerance(this._trackPoints); + + var routingPoints = []; + var simplifiedLatLngs = L.GeoJSON.coordsToLatLngs( + this.getSimplifiedCoords(this._options.simplifyTolerance) + ); + + for (var i = 0; i < simplifiedLatLngs.length; i++) { + routingPoints.push(simplifiedLatLngs[i]); + } + + if (routingPoints.length > 0) { + routing.setWaypoints(routingPoints, function (event) { + if (!event) return; + var err = event.error; + BR.message.showError( + i18next.t('warning.tracks-load-error', { + error: err && err.message ? err.message : err, + }) + ); + }); + + if (!this._bounds) this._bounds = L.latLngBounds(routingPoints); + } + + if (!this._bounds) map.fitBounds(this._bounds); + + if (this._options.showPointAsPoi) { + BR.Track.addPoiMarkers(pois, this._currentGeoJSON); + } + }, + + processFile: function (e) { + var res = e.target.result; + var geoJSON = null; + switch (this._options.format) { + case 'kml': + case 'gpx': + var xml = new DOMParser().parseFromString(res, 'text/xml'); + geoJSON = toGeoJSON[this._options.format](xml); + break; + + default: + geoJSON = JSON.parse(res); + break; + } + + this._currentGeoJSON = geoJSON; + this.setLayerNameFromGeojson(geoJSON); + + this._trackPoints = this.getLineStringsFromGeoJSON(geoJSON); + var length = turf.length(this._trackPoints, { units: 'kilometers' }); + this._maxTrackPoints = Math.min(length * Math.max(-0.14 * length + 10, 1), 200); + this.fire('file:loaded'); + + if (this._options.showTrackLayer || this._options.isTestMode) this.addTrackOverlay(geoJSON); + + if (!this._options.isTestMode) this.addRoutingPoints(); + + this.onBusyChanged(false); + }, + }); + + RouteLoader.include(L.Evented.prototype); + + var routeLoaderControl = new RouteLoader(); + routeLoaderControl.addTo(map); + + return routeLoaderControl; +}; diff --git a/js/plugin/Routing.js b/js/plugin/Routing.js index dedf2b8..4572c0e 100644 --- a/js/plugin/Routing.js +++ b/js/plugin/Routing.js @@ -1,4 +1,4 @@ -L.Routing.Draw.prototype._hideTrailer = function() { +L.Routing.Draw.prototype._hideTrailer = function () { if (this._trailer.options.opacity !== 0.0) { this._trailer.setStyle({ opacity: 0.0 }); } @@ -12,7 +12,7 @@ BR.Routing = L.Routing.extend({ normal: L.VectorMarkers.icon({ icon: 'circle', markerColor: BR.conf.markerColors.via }), end: L.VectorMarkers.icon({ icon: 'stop', markerColor: BR.conf.markerColors.stop }), draw: false, - opacity: 1 + opacity: 1, }, snapping: null, zIndexOffset: -2000, @@ -20,21 +20,21 @@ BR.Routing = L.Routing.extend({ // width as base number, multiplied by number of digits + one for padding iconSize: [6, 18], offset: 5000, - textFunction: function(distance) { + textFunction: function (distance) { return distance / 1000; - } + }, }, shortcut: { draw: { enable: 68, // char code for 'd' - disable: 27 // char code for 'ESC' + disable: 27, // char code for 'ESC' }, reverse: 82, // char code for 'r' - deleteLastPoint: 90 // char code for 'z' - } + deleteLastPoint: 90, // char code for 'z' + }, }, - onAdd: function(map) { + onAdd: function (map) { this._segmentsCasing = new L.FeatureGroup().addTo(map); this._loadingTrailerGroup = new L.FeatureGroup().addTo(map); @@ -45,18 +45,18 @@ BR.Routing = L.Routing.extend({ this._waypoints.on('layeradd', this._setMarkerOpacity, this); - this.on('routing:routeWaypointStart routing:rerouteAllSegmentsStart', function(evt) { + this.on('routing:routeWaypointStart routing:rerouteAllSegmentsStart', function (evt) { this._removeDistanceMarkers(); }); - this.on('routing:routeWaypointEnd routing:setWaypointsEnd routing:rerouteAllSegmentsEnd', function(evt) { + this.on('routing:routeWaypointEnd routing:setWaypointsEnd routing:rerouteAllSegmentsEnd', function (evt) { this._updateDistanceMarkers(evt); }); // turn line mouse marker off while over waypoint marker this.on( 'waypoint:mouseover', - function(e) { + function (e) { // L.Routing.Edit._segmentOnMouseout without firing 'segment:mouseout' (enables draw) if (this._dragging) { return; @@ -71,7 +71,7 @@ BR.Routing = L.Routing.extend({ this.on( 'waypoint:mouseout', - function(e) { + function (e) { this._segmentOnMouseover(e); this._suspended = false; }, @@ -82,7 +82,7 @@ BR.Routing = L.Routing.extend({ L.divIcon({ className: 'line-mouse-marker', iconAnchor: [8, 8], // size/2 + border/2 - iconSize: [16, 16] + iconSize: [16, 16], }) ); @@ -90,7 +90,7 @@ BR.Routing = L.Routing.extend({ // update indicator), see also L.Routing.Edit._segmentOnMousemove this._edit._mouseMarker.on( 'move', - L.bind(function(e) { + L.bind(function (e) { var latLng = e.latlng; if (latLng._feature) { this._mouseMarker._feature = latLng._feature; @@ -98,7 +98,7 @@ BR.Routing = L.Routing.extend({ } }, this._edit) ); - var mouseoutHandler = function(e) { + var mouseoutHandler = function (e) { if (this._mouseMarker._feature) { this._mouseMarker._feature.fire('mouseout', e, true); this._mouseMarker._feature = null; @@ -108,7 +108,7 @@ BR.Routing = L.Routing.extend({ this._edit._mouseMarker.on('dragstart', mouseoutHandler, this._edit); this.on('waypoint:mouseover', mouseoutHandler, this._edit); - this._draw.on('enabled', function() { + this._draw.on('enabled', function () { // crosshair cursor L.DomUtil.addClass(map.getContainer(), 'routing-draw-enabled'); @@ -120,7 +120,7 @@ BR.Routing = L.Routing.extend({ this._parent.off('waypoint:mouseout', this._catchWaypointEvent, this); this.on( 'waypoint:mouseout', - function(e) { + function (e) { if (!this._parent._edit._suspended) { this._catchWaypointEvent(e); } @@ -128,7 +128,7 @@ BR.Routing = L.Routing.extend({ this ); }); - this._draw.on('disabled', function() { + this._draw.on('disabled', function () { L.DomUtil.removeClass(map.getContainer(), 'routing-draw-enabled'); }); @@ -143,13 +143,13 @@ BR.Routing = L.Routing.extend({ this._hide(); } } - this._draw.on('enabled', function() { + this._draw.on('enabled', function () { this._map.on('mouseout', hide, this); this._map.on('mouseover', show, this); L.DomEvent.on(this._map._controlContainer, 'mouseout', show, this); L.DomEvent.on(this._map._controlContainer, 'mouseover', hide, this); }); - this._draw.on('disabled', function() { + this._draw.on('disabled', function () { this._map.off('mouseout', hide, this); this._map.off('mouseover', show, this); L.DomEvent.off(this._map._controlContainer, 'mouseout', show, this); @@ -163,7 +163,7 @@ BR.Routing = L.Routing.extend({ // although enabled. this.on( 'waypoint:click', - function() { + function () { if (this._hidden && !this._parent._waypoints._first) { this._show(); this._hideTrailer(); @@ -181,18 +181,18 @@ BR.Routing = L.Routing.extend({ return container; }, - _addSegmentCasing: function(e) { + _addSegmentCasing: function (e) { var casing = L.polyline(e.layer.getLatLngs(), this.options.styles.trackCasing); this._segmentsCasing.addLayer(casing); e.layer._casing = casing; this._segments.bringToFront(); }, - _removeSegmentCasing: function(e) { + _removeSegmentCasing: function (e) { this._segmentsCasing.removeLayer(e.layer._casing); }, - setOpacity: function(opacity) { + setOpacity: function (opacity) { // Due to the second Polyline layer for casing, the combined opacity is less // transparent than with a single layer and the slider is non-linear. The // inverted formula is used to get the same result as with a single layer. @@ -205,12 +205,12 @@ BR.Routing = L.Routing.extend({ this.options.icons.opacity = opacity; this._segments.setStyle({ - opacity: sourceOpacity + opacity: sourceOpacity, }); this._segmentsCasing.setStyle({ - opacity: sourceOpacity + opacity: sourceOpacity, }); - this._waypoints.eachLayer(function(marker) { + this._waypoints.eachLayer(function (marker) { marker.setOpacity(opacity); }); @@ -219,11 +219,11 @@ BR.Routing = L.Routing.extend({ } }, - _setMarkerOpacity: function(e) { + _setMarkerOpacity: function (e) { e.layer.setOpacity(this.options.icons.opacity); }, - _removeMarkerEvents: function(marker) { + _removeMarkerEvents: function (marker) { marker.off('mouseover', this._fireWaypointEvent, this); marker.off('mouseout', this._fireWaypointEvent, this); marker.off('dragstart', this._fireWaypointEvent, this); @@ -232,7 +232,7 @@ BR.Routing = L.Routing.extend({ marker.off('click', this._fireWaypointEvent, this); }, - clear: function() { + clear: function () { var drawEnabled = this._draw._enabled; var current = this._waypoints._first; @@ -259,13 +259,13 @@ BR.Routing = L.Routing.extend({ } }, - setWaypoints: function(latLngs, cb) { + setWaypoints: function (latLngs, cb) { var i; var callbackCount = 0; var firstErr; var $this = this; - var callback = function(err, data) { + var callback = function (err, data) { callbackCount++; firstErr = firstErr || err; if (callbackCount >= latLngs.length) { @@ -299,10 +299,10 @@ BR.Routing = L.Routing.extend({ // patch to fix error when line is null or error line // (when called while still segments to calculate, e.g. permalink or fast drawing) - toPolyline: function() { + toPolyline: function () { var latLngs = []; - this._eachSegment(function(m1, m2, line) { + this._eachSegment(function (m1, m2, line) { // omit if null (still calculating) or error // NOTE: feature check specific to BRouter GeoJSON response, workaround to detect error line if (line && line.feature) { @@ -313,7 +313,7 @@ BR.Routing = L.Routing.extend({ return L.polyline(latLngs); }, - _routeSegment: function(m1, m2, cb) { + _routeSegment: function (m1, m2, cb) { var loadingTrailer; // change segment color before request to indicate recalculation (mark old) @@ -327,7 +327,7 @@ BR.Routing = L.Routing.extend({ color: this.options.styles.track.color, opacity: this.options.styles.trailer.opacity, dashArray: [10, 10], - className: 'loading-trailer' + className: 'loading-trailer', }); this._loadingTrailerGroup.addLayer(loadingTrailer); } @@ -336,7 +336,7 @@ BR.Routing = L.Routing.extend({ this, m1, m2, - L.bind(function(err, data) { + L.bind(function (err, data) { if (loadingTrailer) { this._loadingTrailerGroup.removeLayer(loadingTrailer); } @@ -345,10 +345,10 @@ BR.Routing = L.Routing.extend({ ); }, - getSegments: function() { + getSegments: function () { var segments = []; - this._eachSegment(function(m1, m2, line) { + this._eachSegment(function (m1, m2, line) { // omit if null (still calculating) or error // NOTE: feature check specific to BRouter GeoJSON response, workaround to detect error line if (line && line.feature) { @@ -359,7 +359,7 @@ BR.Routing = L.Routing.extend({ return segments; }, - _keydownListener: function(e) { + _keydownListener: function (e) { if (!BR.Util.keyboardShortcutsAllowed(e)) { return; } @@ -374,7 +374,7 @@ BR.Routing = L.Routing.extend({ } }, - _keyupListener: function(e) { + _keyupListener: function (e) { // Prevent Leaflet from triggering drawing a second time on keyup, // since this is already done in _keydownListener if (e.keyCode === this.options.shortcut.draw.enable) { @@ -382,30 +382,30 @@ BR.Routing = L.Routing.extend({ } }, - isDrawing: function() { + isDrawing: function () { return this._draw._enabled; }, - reverse: function() { + reverse: function () { var waypoints = this.getWaypoints(); waypoints.reverse(); this.clear(); this.setWaypoints(waypoints); }, - deleteLastPoint: function() { + deleteLastPoint: function () { if ((lastPoint = this.getLast())) { - this.removeWaypoint(lastPoint, function(err, data) {}); + this.removeWaypoint(lastPoint, function (err, data) {}); } }, - _removeDistanceMarkers: function() { + _removeDistanceMarkers: function () { if (this._map && this._distanceMarkers) { this._map.removeLayer(this._distanceMarkers); } }, - _updateDistanceMarkers: function(e) { + _updateDistanceMarkers: function (e) { this._removeDistanceMarkers(); if (this._map) { @@ -413,5 +413,5 @@ BR.Routing = L.Routing.extend({ this._distanceMarkers = new L.DistanceMarkers(this.toPolyline(), this._map, distanceMarkersOpts); this._map.addLayer(this._distanceMarkers); } - } + }, }); diff --git a/js/plugin/RoutingPathQuality.js b/js/plugin/RoutingPathQuality.js index 7c714c1..2e0e074 100644 --- a/js/plugin/RoutingPathQuality.js +++ b/js/plugin/RoutingPathQuality.js @@ -2,11 +2,11 @@ BR.RoutingPathQuality = L.Control.extend({ options: { shortcut: { toggle: 67, // char code for 'c' - muteKeyCode: 77 // char code for 'm' - } + muteKeyCode: 77, // char code for 'm' + }, }, - initialize: function(map, layersControl, options) { + initialize: function (map, layersControl, options) { L.setOptions(this, options); // hotline uses canvas and cannot be moved in front of the svg, so we create another pane @@ -32,20 +32,20 @@ BR.RoutingPathQuality = L.Control.extend({ 0.25: '#00ffff', // cyan 0.5: '#00ff00', // green 0.75: '#ffff00', // yellow - 1.0: '#ff0000' // red + 1.0: '#ff0000', // red }, outlineColor: 'dimgray', - renderer: renderer + renderer: renderer, }, - valueFunction: function(latLng, prevLatLng) { + valueFunction: function (latLng, prevLatLng) { var deltaAltitude = latLng.alt - prevLatLng.alt, // in m distance = prevLatLng.distanceTo(latLng); // in m if (distance === 0) { return 0; } return (Math.atan(deltaAltitude / distance) * 180) / Math.PI; - } - }) + }, + }), }, altitude: { title: i18next.t('map.route-quality-shortcut', { action: '$t(map.route-quality-altitude)', key: 'C' }), @@ -53,12 +53,12 @@ BR.RoutingPathQuality = L.Control.extend({ provider: new HotLineQualityProvider({ hotlineOptions: { outlineColor: 'dimgray', - renderer: renderer + renderer: renderer, }, - valueFunction: function(latLng) { + valueFunction: function (latLng) { return latLng.alt; - } - }) + }, + }), }, cost: { title: i18next.t('map.route-quality-shortcut', { action: '$t(map.route-quality-cost)', key: 'C' }), @@ -66,9 +66,9 @@ BR.RoutingPathQuality = L.Control.extend({ provider: new HotLineQualityProvider({ hotlineOptions: { outlineColor: 'dimgray', - renderer: renderer + renderer: renderer, }, - valueFunction: function(latLng) { + valueFunction: function (latLng) { var feature = latLng.feature; var cost = feature.cost.perKm; var distance = feature.distance / 1000; // in km @@ -78,9 +78,9 @@ BR.RoutingPathQuality = L.Control.extend({ distance; } return cost; - } - }) - } + }, + }), + }, }; this._initialProvider = this.options.initialProvider || 'incline'; this.selectedProvider = this._initialProvider; @@ -89,12 +89,12 @@ BR.RoutingPathQuality = L.Control.extend({ this._muted = false; }, - onAdd: function(map) { + onAdd: function (map) { this._map = map; map.on( 'overlayadd', - function(evt) { + function (evt) { if (evt.layer === this._routingSegments) { this._activate(this.routingPathButton); } @@ -103,7 +103,7 @@ BR.RoutingPathQuality = L.Control.extend({ ); map.on( 'overlayremove', - function(evt) { + function (evt) { if (evt.layer === this._routingSegments) { this._deactivate(this.routingPathButton); } @@ -123,8 +123,8 @@ BR.RoutingPathQuality = L.Control.extend({ stateName: keys[i], icon: provider.icon, title: provider.title, - onClick: L.bind(function(state) { - return L.bind(function(btn) { + onClick: L.bind(function (state) { + return L.bind(function (btn) { if (this._active) { btn.state(state); this.setProvider(state); @@ -138,7 +138,7 @@ BR.RoutingPathQuality = L.Control.extend({ this._activate(btn); } }, this); - }, this)(nextState) + }, this)(nextState), }); } @@ -148,42 +148,42 @@ BR.RoutingPathQuality = L.Control.extend({ } this.routingPathButton = new L.easyButton({ - states: states + states: states, }).addTo(map); return new L.DomUtil.create('div'); }, - _activate: function(btn) { + _activate: function (btn) { this._active = true; this._getIcon(btn).classList.add('active'); this._routingSegments.addTo(this._map); }, - _deactivate: function(btn) { + _deactivate: function (btn) { this._active = false; this._getIcon(btn).classList.remove('active'); this._map.removeLayer(this._routingSegments); }, - _getIcon: function(btn) { + _getIcon: function (btn) { return btn.button.firstChild.firstChild; }, - update: function(track, layer) { + update: function (track, layer) { var segments = []; - layer.eachLayer(function(layer) { + layer.eachLayer(function (layer) { segments.push(layer); }); this.segments = segments; this._update(this.segments); }, - setProvider: function(provider) { + setProvider: function (provider) { this.selectedProvider = provider; this._update(this.segments); }, - _update: function(segments) { + _update: function (segments) { this._routingSegments.clearLayers(); var layers = this.providers[this.selectedProvider].provider.computeLayers(segments); if (layers) { @@ -193,7 +193,7 @@ BR.RoutingPathQuality = L.Control.extend({ } }, - _keydownListener: function(e) { + _keydownListener: function (e) { if (!BR.Util.keyboardShortcutsAllowed(e)) { return; } @@ -206,21 +206,21 @@ BR.RoutingPathQuality = L.Control.extend({ } }, - _keyupListener: function(e) { + _keyupListener: function (e) { if (BR.Util.keyboardShortcutsAllowed(e) && this._muted && e.keyCode === this.options.shortcut.muteKeyCode) { this._muted = false; this._activate(this.routingPathButton); } - } + }, }); var HotLineQualityProvider = L.Class.extend({ - initialize: function(options) { + initialize: function (options) { this.hotlineOptions = options.hotlineOptions; this.valueFunction = options.valueFunction; }, - computeLayers: function(segments) { + computeLayers: function (segments) { var layers = []; if (segments) { var segmentLatLngs = []; @@ -250,7 +250,7 @@ var HotLineQualityProvider = L.Class.extend({ return layers; }, - _computeLatLngVals: function(segment) { + _computeLatLngVals: function (segment) { var latLngVals = [], segmentLatLngs = segment.getLatLngs(), segmentLength = segmentLatLngs.length; @@ -268,11 +268,11 @@ var HotLineQualityProvider = L.Class.extend({ return latLngVals; }, - _convertToArray: function(latLng, val) { + _convertToArray: function (latLng, val) { return [latLng.lat, latLng.lng, val]; }, - _calcMinMaxValues: function(lines) { + _calcMinMaxValues: function (lines) { var min = lines[0][2], max = min; for (var i = 1; lines && i < lines.length; i++) { @@ -285,7 +285,7 @@ var HotLineQualityProvider = L.Class.extend({ } return { min: min, - max: max + max: max, }; - } + }, }); diff --git a/js/plugin/Search.js b/js/plugin/Search.js index 4985caa..c56e6df 100644 --- a/js/plugin/Search.js +++ b/js/plugin/Search.js @@ -2,30 +2,30 @@ BR.Search = L.Control.Geocoder.extend({ options: { geocoder: new L.Control.Geocoder.LatLng({ next: new L.Control.Geocoder.Nominatim({ - serviceUrl: 'https://nominatim.openstreetmap.org/' + serviceUrl: 'https://nominatim.openstreetmap.org/', }), - sizeInMeters: 800 + sizeInMeters: 800, }), position: 'topleft', shortcut: { - search: 70 // char code for 'f' - } + search: 70, // char code for 'f' + }, }, - initialize: function(options) { + initialize: function (options) { L.Control.Geocoder.prototype.initialize.call(this, options); L.setOptions(this, { // i18next.t will only return 'undefined' if it is called in a static context // (e.g. when added directly to "options:" above), so we have to call it here - placeholder: i18next.t('map.geocoder-placeholder') + placeholder: i18next.t('map.geocoder-placeholder'), }); L.DomEvent.addListener(document, 'keydown', this._keydownListener, this); }, - markGeocode: function(result) { + markGeocode: function (result) { this._map.fitBounds(result.geocode.bbox, { - maxZoom: 17 + maxZoom: 17, }); this.clear(); @@ -33,22 +33,22 @@ BR.Search = L.Control.Geocoder.extend({ interactive: false, color: 'red', opacity: 1, - weight: 3 + weight: 3, }).addTo(this._map); return this; }, - clear: function() { + clear: function () { if (this._geocodeMarker) { this._map.removeLayer(this._geocodeMarker); } }, - _keydownListener: function(e) { + _keydownListener: function (e) { if (BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.shortcut.search) { $('#map .leaflet-control-geocoder')[0].dispatchEvent(new MouseEvent('mousedown')); e.preventDefault(); } - } + }, }); diff --git a/js/plugin/Sidebar.js b/js/plugin/Sidebar.js index c8e16be..79c7094 100644 --- a/js/plugin/Sidebar.js +++ b/js/plugin/Sidebar.js @@ -9,15 +9,15 @@ BR.Sidebar = L.Control.Sidebar.extend({ defaultTabId: '', shortcut: { - toggleTabs: 84 // char code for 't' + toggleTabs: 84, // char code for 't' }, // Tabs to be notified when shown or hidden // (tab div id -> object implementing show/hide methods) - listeningTabs: {} + listeningTabs: {}, }, - initialize: function(id, options) { + initialize: function (id, options) { L.Control.Sidebar.prototype.initialize.call(this, id, options); this.oldTab = null; @@ -25,7 +25,7 @@ BR.Sidebar = L.Control.Sidebar.extend({ L.DomEvent.addListener(document, 'keydown', this._keydownListener, this); }, - addTo: function(map) { + addTo: function (map) { L.Control.Sidebar.prototype.addTo.call(this, map); this.on('content', this._notifyOnContent, this); @@ -34,7 +34,7 @@ BR.Sidebar = L.Control.Sidebar.extend({ this.on( 'closing', - function() { + function () { this._map.getContainer().focus(); }, this @@ -43,7 +43,7 @@ BR.Sidebar = L.Control.Sidebar.extend({ this.recentTab = this.options.defaultTabId; this.on( 'content', - function(tab) { + function (tab) { this.recentTab = tab.id; }, this @@ -59,14 +59,14 @@ BR.Sidebar = L.Control.Sidebar.extend({ return this; }, - showPanel: function(id) { + showPanel: function (id) { var tab = this._getTab(id); tab.hidden = false; return this; }, - _rememberTabState: function() { + _rememberTabState: function () { if (BR.Util.localStorageAvailable()) { this.on('content closing', this._storeActiveTab, this); @@ -85,42 +85,42 @@ BR.Sidebar = L.Control.Sidebar.extend({ } }, - _notifyShow: function(tab) { + _notifyShow: function (tab) { if (tab && tab.show) { tab.show(); } }, - _notifyHide: function(tab) { + _notifyHide: function (tab) { if (tab && tab.hide) { tab.hide(); } }, - _notifyOnContent: function(e) { + _notifyOnContent: function (e) { var tab = this.options.listeningTabs[e.id]; this._notifyHide(this.oldTab); this._notifyShow(tab); this.oldTab = tab; }, - _notifyOnClose: function(e) { + _notifyOnClose: function (e) { this._notifyHide(this.oldTab); this.oldTab = null; }, - _notifyOnResize: function(e) { + _notifyOnResize: function (e) { var tab = this.oldTab; if (tab && tab.onResize) { tab.onResize(); } }, - _storeActiveTab: function(e) { + _storeActiveTab: function (e) { localStorage.setItem(this.storageId, e.id || ''); }, - _keydownListener: function(e) { + _keydownListener: function (e) { if (BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.shortcut.toggleTabs) { if ($('#sidebarTabs > ul > li[class=active]').length) { // sidebar is currently open, close current tab @@ -142,9 +142,9 @@ BR.Sidebar = L.Control.Sidebar.extend({ this.open(nextTab.attr('href').slice(1)); } } - } + }, }); -BR.sidebar = function(divId, options) { +BR.sidebar = function (divId, options) { return new BR.Sidebar(divId, options); }; diff --git a/js/plugin/TracksLoader.js b/js/plugin/TracksLoader.js index d78c888..9f53401 100644 --- a/js/plugin/TracksLoader.js +++ b/js/plugin/TracksLoader.js @@ -1,6 +1,6 @@ -BR.tracksLoader = function(map, layersControl, routing, pois) { +BR.tracksLoader = function (map, layersControl, routing, pois) { // proxy to L.geoJSON factory function, to get hold of raw GeoJSON object - var createGeoJsonLayer = function(geojson, options) { + var createGeoJsonLayer = function (geojson, options) { BR.Track.addPoiMarkers(pois, geojson); return L.geoJSON(geojson, options); @@ -15,11 +15,11 @@ BR.tracksLoader = function(map, layersControl, routing, pois) { // File size limit in kb (default: 1024) ? fileSizeLimit: 1024, shortcut: { - open: 79 // char code for 'o' - } + open: 79, // char code for 'o' + }, }, - _initContainer: function() { + _initContainer: function () { var thisLoader = this.loader; var fileInput; @@ -40,7 +40,7 @@ BR.tracksLoader = function(map, layersControl, routing, pois) { // Load on file change fileInput.addEventListener( 'change', - function() { + function () { thisLoader.loadMultiple(this.files); // reset so that the user can upload the same file again if they want to this.value = ''; @@ -50,7 +50,7 @@ BR.tracksLoader = function(map, layersControl, routing, pois) { var link = L.DomUtil.get('navbarLoadTracks'); L.DomEvent.disableClickPropagation(link); - L.DomEvent.on(link, 'click', function(e) { + L.DomEvent.on(link, 'click', function (e) { fileInput.click(); e.preventDefault(); }); @@ -60,7 +60,7 @@ BR.tracksLoader = function(map, layersControl, routing, pois) { return dummy; }, - _keydownListener: function(e) { + _keydownListener: function (e) { if (BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.shortcut.open) { if (e.shiftKey) { $('#loadNogos').modal('show'); @@ -68,12 +68,12 @@ BR.tracksLoader = function(map, layersControl, routing, pois) { $('#navbarLoadTracks')[0].click(); } } - } + }, }); var tracksLoaderControl = new TracksLoader(); tracksLoaderControl.addTo(map); - tracksLoaderControl.loader.on('data:loaded', function(event) { + tracksLoaderControl.loader.on('data:loaded', function (event) { var eventLayer = event.layer, routingMarkers = []; /* disabled for now, see issue #254 @@ -101,11 +101,11 @@ BR.tracksLoader = function(map, layersControl, routing, pois) { eventLayer.addTo(map); }); - tracksLoaderControl.loader.on('data:error', function(event) { + tracksLoaderControl.loader.on('data:error', function (event) { var err = event.error; BR.message.showError( i18next.t('warning.tracks-load-error', { - error: err && err.message ? err.message : err + error: err && err.message ? err.message : err, }) ); console.error(err); diff --git a/js/plugin/leaflet-distance-marker.js b/js/plugin/leaflet-distance-marker.js index dd63a80..7c5bd06 100644 --- a/js/plugin/leaflet-distance-marker.js +++ b/js/plugin/leaflet-distance-marker.js @@ -24,7 +24,7 @@ */ L.DistanceMarkers = L.LayerGroup.extend({ - initialize: function(line, map, options) { + initialize: function (line, map, options) { options = options || {}; var offset = options.offset || 1000; var showAll = Math.min(map.getMaxZoom(), options.showAll || 12); @@ -32,7 +32,7 @@ L.DistanceMarkers = L.LayerGroup.extend({ var iconSize = options.iconSize !== undefined ? options.iconSize : [12, 12]; var textFunction = options.textFunction || - function(distance, i) { + function (distance, i) { return i; }; @@ -81,7 +81,7 @@ L.DistanceMarkers = L.LayerGroup.extend({ var currentZoomLevel = 0; var markerLayer = this; - var updateMarkerVisibility = function() { + var updateMarkerVisibility = function () { var oldZoom = currentZoomLevel; var newZoom = (currentZoomLevel = map.getZoom()); @@ -106,20 +106,20 @@ L.DistanceMarkers = L.LayerGroup.extend({ updateMarkerVisibility(); }, - setOpacity: function(opacity) { + setOpacity: function (opacity) { var i, keys = Object.keys(this._zoomLayers), l = keys.length; for (i = 0; i < l; ++i) { var zoomLayer = this._zoomLayers[keys[i]]; - zoomLayer.eachLayer(function(layer) { + zoomLayer.eachLayer(function (layer) { layer.setOpacity(opacity); }); } }, - _minimumZoomLevelForItem: function(item, showAllLevel) { + _minimumZoomLevelForItem: function (item, showAllLevel) { var zoom = showAllLevel, i = item; while (i > 0 && i % 2 === 0) { @@ -127,5 +127,5 @@ L.DistanceMarkers = L.LayerGroup.extend({ i = Math.floor(i / 2); } return zoom; - } + }, }); diff --git a/js/plugin/leaflet-fullHash.js b/js/plugin/leaflet-fullHash.js index 7c77f40..6254f62 100644 --- a/js/plugin/leaflet-fullHash.js +++ b/js/plugin/leaflet-fullHash.js @@ -1,10 +1,10 @@ -(function(window) { - var HAS_HASHCHANGE = (function() { +(function (window) { + var HAS_HASHCHANGE = (function () { var doc_mode = window.documentMode; return 'onhashchange' in window && (doc_mode === undefined || doc_mode > 7); })(); - L.Hash = function(map, options) { + L.Hash = function (map, options) { this.onHashChange = L.Util.bind(this.onHashChange, this); if (map) { @@ -12,7 +12,7 @@ } }; - L.Hash.parseHash = function(hash) { + L.Hash.parseHash = function (hash) { if (hash.indexOf('#map=') === 0) { hash = hash.substr(5); } @@ -31,7 +31,7 @@ center: new L.LatLng(lat, lon), zoom: zoom, layers: layers, - additional: additional + additional: additional, }; } } else { @@ -39,7 +39,7 @@ } }; - (L.Hash.formatHash = function(map) { + (L.Hash.formatHash = function (map) { var center = map.getCenter(), zoom = map.getZoom(), precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)), @@ -57,7 +57,7 @@ }), (L.Hash.prototype = { options: { - layerSeparator: ',' + layerSeparator: ',', }, map: null, lastHash: null, @@ -65,7 +65,7 @@ parseHash: L.Hash.parseHash, formatHash: L.Hash.formatHash, - init: function(map, options) { + init: function (map, options) { this.map = map; L.Util.setOptions(this, options); @@ -78,9 +78,9 @@ } }, - _parseLayers: function(layersParam, layerSeparator) { + _parseLayers: function (layersParam, layerSeparator) { var layers = layersParam.split(layerSeparator).map( - L.bind(function(layerEncoded) { + L.bind(function (layerEncoded) { var obj = null; var layerString = decodeURIComponent(layerEncoded); @@ -95,8 +95,8 @@ return layers; }, - parseLayers: function(layersParam) { - var countFoundLayers = function(count, obj) { + parseLayers: function (layersParam) { + var countFoundLayers = function (count, obj) { if (obj) { count++; } @@ -119,14 +119,14 @@ return layers; }, - activateLayers: function(layers) { + activateLayers: function (layers) { var layersControl = this.options.layersControl; var added = false; layersControl.removeActiveLayers(); layers.forEach( - L.bind(function(obj, index, array) { + L.bind(function (obj, index, array) { if (obj) { layersControl.activateLayer(obj); if (obj && !obj.overlay) { @@ -142,14 +142,14 @@ } }, - formatLayers: function() { + formatLayers: function () { var objList = this.options.layersControl.getActiveLayers(); // exclude vector layers (loaded tracks), but not when id set (route quality coding) - objList = objList.filter(function(obj) { + objList = objList.filter(function (obj) { return obj.layer instanceof L.GridLayer || obj.layer.id; }); var layerList = objList.map( - L.bind(function(obj) { + L.bind(function (obj) { return encodeURIComponent(this.options.layersControl.toLayerString(obj)); }, this) ); @@ -157,7 +157,7 @@ return layerList.join(this.options.layerSeparator); }, - removeFrom: function(map) { + removeFrom: function (map) { if (this.changeTimeout) { clearTimeout(this.changeTimeout); } @@ -169,7 +169,7 @@ this.map = null; }, - onMapMove: function() { + onMapMove: function () { // bail if we're moving the map (updating from a hash), // or if the map is not yet loaded @@ -185,7 +185,7 @@ }, movingMap: false, - update: function() { + update: function () { var hash = location.hash; if (hash === this.lastHash) { return; @@ -221,12 +221,12 @@ // defer hash change updates every 100ms changeDefer: 100, changeTimeout: null, - onHashChange: function() { + onHashChange: function () { // throttle calls to update() so that they only happen every // `changeDefer` ms if (!this.changeTimeout) { var that = this; - this.changeTimeout = setTimeout(function() { + this.changeTimeout = setTimeout(function () { that.update(); that.changeTimeout = null; }, this.changeDefer); @@ -235,7 +235,7 @@ isListening: false, hashChangeInterval: null, - startListening: function() { + startListening: function () { this.map.on('moveend layeradd layerremove', this.onMapMove, this); if (HAS_HASHCHANGE) { @@ -247,7 +247,7 @@ this.isListening = true; }, - stopListening: function() { + stopListening: function () { this.map.off('moveend layeradd layerremove', this.onMapMove, this); if (HAS_HASHCHANGE) { @@ -258,7 +258,7 @@ this.isListening = false; }, - _keyByValue: function(obj, value) { + _keyByValue: function (obj, value) { for (var key in obj) { if (obj.hasOwnProperty(key)) { if (obj[key] === value) { @@ -268,15 +268,15 @@ } } } - } + }, }); - L.hash = function(map, options) { + L.hash = function (map, options) { return new L.Hash(map, options); }; - L.Map.prototype.addHash = function() { + L.Map.prototype.addHash = function () { this._hash = L.hash(this, this.options); }; - L.Map.prototype.removeHash = function() { + L.Map.prototype.removeHash = function () { this._hash.removeFrom(); }; })(window); diff --git a/js/plugin/stravaSegments.js b/js/plugin/stravaSegments.js index 626a9db..2f7117e 100644 --- a/js/plugin/stravaSegments.js +++ b/js/plugin/stravaSegments.js @@ -1,29 +1,29 @@ -BR.stravaSegments = function(map, layersControl) { +BR.stravaSegments = function (map, layersControl) { var stravaControl = L.control .stravaSegments({ runningTitle: i18next.t('map.strava-shortcut', { action: '$t(map.strava-running)', key: 'S' }), bikingTitle: i18next.t('map.strava-shortcut', { action: '$t(map.strava-biking)', key: 'S' }), loadingTitle: i18next.t('map.loading'), - stravaToken: BR.keys.strava + stravaToken: BR.keys.strava, }) .addTo(map); layersControl.addOverlay(stravaControl.stravaLayer, i18next.t('map.layer.strava-segments')); - stravaControl.onError = function(err) { + stravaControl.onError = function (err) { BR.message.showError( i18next.t('warning.strava-error', { - error: err && err.message ? err.message : err + error: err && err.message ? err.message : err, }) ); }; L.setOptions(this, { shortcut: { - toggleLayer: 83 // char code for 's' - } + toggleLayer: 83, // char code for 's' + }, }); // hide strava buttons when layer is inactive - var toggleStravaControl = function() { + var toggleStravaControl = function () { var stravaBar = stravaControl.runningButton.button.parentElement; stravaBar.hidden = !stravaBar.hidden; }; @@ -33,7 +33,7 @@ BR.stravaSegments = function(map, layersControl) { L.DomEvent.addListener( document, 'keydown', - function(e) { + function (e) { if (BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.shortcut.toggleLayer) { if (map.hasLayer(stravaControl.stravaLayer)) { map.removeLayer(stravaControl.stravaLayer); diff --git a/js/router/BRouter.js b/js/router/BRouter.js index f38ee1b..9d5d22c 100644 --- a/js/router/BRouter.js +++ b/js/router/BRouter.js @@ -10,39 +10,39 @@ L.BRouter = L.Class.extend({ GROUP_SEPARATOR: '|', ABORTED_ERROR: 'aborted', CUSTOM_PREFIX: 'custom_', - isCustomProfile: function(profileName) { + isCustomProfile: function (profileName) { return profileName && profileName.substring(0, 7) === L.BRouter.CUSTOM_PREFIX; - } + }, }, options: {}, - initialize: function(options) { + initialize: function (options) { L.setOptions(this, options); this.queue = async.queue( - L.bind(function(task, callback) { + L.bind(function (task, callback) { this.getRoute(task.segment, callback); }, this), 1 ); // patch to call callbacks on kill for cleanup (loadingTrailer) - this.queue.kill = function() { + this.queue.kill = function () { var aborted = this.tasks; this.drain = null; this.tasks = []; - aborted.forEach(function(task) { + aborted.forEach(function (task) { task.callback(L.BRouter.ABORTED_ERROR); }); }; }, - setOptions: function(options) { + setOptions: function (options) { L.setOptions(this, options); }, - getUrlParams: function(latLngs, pois, circlego, format) { + getUrlParams: function (latLngs, pois, circlego, format) { params = {}; if (this._getLonLatsString(latLngs) != null) params.lonlats = this._getLonLatsString(latLngs); @@ -79,7 +79,7 @@ L.BRouter = L.Class.extend({ return params; }, - parseUrlParams: function(params) { + parseUrlParams: function (params) { var opts = {}; if (params.lonlats) { opts.lonlats = this._parseLonLats(params.lonlats); @@ -108,7 +108,7 @@ L.BRouter = L.Class.extend({ circlego = [ Number.parseFloat(circlego[0]), Number.parseFloat(circlego[1]), - Number.parseInt(circlego[2]) + Number.parseInt(circlego[2]), ]; opts.circlego = circlego; } @@ -116,7 +116,7 @@ L.BRouter = L.Class.extend({ return opts; }, - getUrl: function(latLngs, pois, circlego, format, trackname, exportWaypoints) { + getUrl: function (latLngs, pois, circlego, format, trackname, exportWaypoints) { var urlParams = this.getUrlParams(latLngs, pois, circlego, format); var args = []; if (urlParams.lonlats != null && urlParams.lonlats.length > 0) @@ -132,7 +132,7 @@ L.BRouter = L.Class.extend({ if (trackname) args.push( L.Util.template('trackname={trackname}', { - trackname: trackname + trackname: trackname, }) ); if (exportWaypoints) args.push('exportWaypoints=1'); @@ -142,7 +142,7 @@ L.BRouter = L.Class.extend({ return (prepend_host ? BR.conf.host : '') + '/brouter?' + args.join('&'); }, - getRoute: function(latLngs, cb) { + getRoute: function (latLngs, cb) { var url = this.getUrl(latLngs, null, null, 'geojson'), xhr = new XMLHttpRequest(); @@ -153,7 +153,7 @@ L.BRouter = L.Class.extend({ xhr.open('GET', url, true); xhr.onload = L.bind(this._handleRouteResponse, this, xhr, cb); xhr.onerror = L.bind( - function(xhr, cb) { + function (xhr, cb) { cb(BR.Util.getError(xhr)); }, this, @@ -163,7 +163,7 @@ L.BRouter = L.Class.extend({ xhr.send(); }, - _handleRouteResponse: function(xhr, cb) { + _handleRouteResponse: function (xhr, cb) { var layer, geojson; if ( @@ -189,11 +189,11 @@ L.BRouter = L.Class.extend({ } }, - getRouteSegment: function(l1, l2, cb) { + getRouteSegment: function (l1, l2, cb) { this.queue.push({ segment: [l1, l2] }, cb); }, - uploadProfile: function(profileId, profileText, cb) { + uploadProfile: function (profileId, profileText, cb) { var url = L.BRouter.URL_PROFILE_UPLOAD; xhr = new XMLHttpRequest(); @@ -204,7 +204,7 @@ L.BRouter = L.Class.extend({ xhr.open('POST', url, true); xhr.onload = L.bind(this._handleProfileResponse, this, xhr, cb); - xhr.onerror = function(evt) { + xhr.onerror = function (evt) { var xhr = this; cb(i18next.t('warning.upload-error', { error: xhr.statusText })); }; @@ -213,7 +213,7 @@ L.BRouter = L.Class.extend({ xhr.send(profileText); }, - _assignFeatures: function(segment) { + _assignFeatures: function (segment) { if (segment.feature.properties.messages) { var featureMessages = segment.feature.properties.messages, segmentLatLngs = segment.getLatLngs(), @@ -240,7 +240,7 @@ L.BRouter = L.Class.extend({ return segment; }, - _getFeature: function(featureMessage) { + _getFeature: function (featureMessage) { //["Longitude", "Latitude", "Elevation", "Distance", "CostPerKm", "ElevCost", "TurnCost", "NodeCost", "InitialCost", "WayTags", "NodeTags"] return { cost: { @@ -248,22 +248,22 @@ L.BRouter = L.Class.extend({ elev: parseInt(featureMessage[5]), turn: parseInt(featureMessage[6]), node: parseInt(featureMessage[7]), - initial: parseInt(featureMessage[8]) + initial: parseInt(featureMessage[8]), }, distance: parseInt(featureMessage[3]), wayTags: featureMessage[9], - nodeTags: featureMessage[10] + nodeTags: featureMessage[10], }; }, - _getFeatureLatLng: function(message) { + _getFeatureLatLng: function (message) { var lon = message[0] / 1000000, lat = message[1] / 1000000; return L.latLng(lat, lon); }, - _handleProfileResponse: function(xhr, cb) { + _handleProfileResponse: function (xhr, cb) { var response; if (xhr.status === 200 && xhr.responseText && xhr.responseText.length > 0) { @@ -274,7 +274,7 @@ L.BRouter = L.Class.extend({ } }, - _getLonLatsString: function(latLngs) { + _getLonLatsString: function (latLngs) { var s = ''; for (var i = 0; i < latLngs.length; i++) { s += this._formatLatLng(latLngs[i]); @@ -285,7 +285,7 @@ L.BRouter = L.Class.extend({ return s; }, - _parseLonLats: function(s) { + _parseLonLats: function (s) { var groups, numbers, lonlats = []; @@ -304,7 +304,7 @@ L.BRouter = L.Class.extend({ return lonlats; }, - _getLonLatsNameString: function(latLngNames) { + _getLonLatsNameString: function (latLngNames) { var s = ''; for (var i = 0; i < latLngNames.length; i++) { s += this._formatLatLng(latLngNames[i].latlng); @@ -318,7 +318,7 @@ L.BRouter = L.Class.extend({ return s; }, - _parseLonLatNames: function(s) { + _parseLonLatNames: function (s) { var groups, part, lonlatnames = []; @@ -337,7 +337,7 @@ L.BRouter = L.Class.extend({ return lonlatnames; }, - _getNogosString: function(nogos) { + _getNogosString: function (nogos) { var s = ''; for (var i = 0, circle; i < nogos.length; i++) { circle = nogos[i]; @@ -360,7 +360,7 @@ L.BRouter = L.Class.extend({ return s; }, - _parseNogos: function(s) { + _parseNogos: function (s) { var groups, numbers, nogos = []; @@ -386,7 +386,7 @@ L.BRouter = L.Class.extend({ return nogos; }, - _getNogosPolylinesString: function(nogos) { + _getNogosPolylinesString: function (nogos) { var s = ''; for (var i = 0, polyline, vertices; i < nogos.length; i++) { polyline = nogos[i]; @@ -413,7 +413,7 @@ L.BRouter = L.Class.extend({ return s; }, - _parseNogosPolylines: function(s) { + _parseNogosPolylines: function (s) { var groups, numbers, latlngs, @@ -439,7 +439,7 @@ L.BRouter = L.Class.extend({ return nogos; }, - _getNogosPolygonsString: function(nogos) { + _getNogosPolygonsString: function (nogos) { var s = ''; for (var i = 0, polygon, vertices; i < nogos.length; i++) { polygon = nogos[i]; @@ -466,7 +466,7 @@ L.BRouter = L.Class.extend({ return s; }, - _parseNogosPolygons: function(s) { + _parseNogosPolygons: function (s) { var groups, numbers, latlngs, @@ -493,15 +493,15 @@ L.BRouter = L.Class.extend({ }, // formats L.LatLng object as lng,lat string - _formatLatLng: function(latLng) { + _formatLatLng: function (latLng) { var s = ''; s += L.Util.formatNum(latLng.lng || latLng[1], L.BRouter.PRECISION); s += L.BRouter.NUMBER_SEPARATOR; s += L.Util.formatNum(latLng.lat || latLng[0], L.BRouter.PRECISION); return s; - } + }, }); -L.bRouter = function(options) { +L.bRouter = function (options) { return new L.BRouter(options); }; diff --git a/js/router/brouterCgi.js b/js/router/brouterCgi.js index 3cd91bf..1bb30f6 100644 --- a/js/router/brouterCgi.js +++ b/js/router/brouterCgi.js @@ -1,6 +1,6 @@ // BRouter online demo interface // TODO remove or adopt to new structure (only supports two waypoints!) -var brouterCgi = (function() { +var brouterCgi = (function () { // http://brouter.de/cgi-bin/brouter.sh?coords=13.404681_52.520185_13.340278_52.512356_trekking_0 //var URL_TEMPLATE = '/cgi-bin/proxy.cgi?url=' + 'http://brouter.de/cgi-bin/brouter.sh?coords={fromLng}_{fromLat}_{toLng}_{toLat}_{profile}_{alt}'; var URL_TEMPLATE = @@ -15,7 +15,7 @@ var brouterCgi = (function() { toLat: L.Util.formatNum(latLngs[1].lat, PRECISION), toLng: L.Util.formatNum(latLngs[1].lng, PRECISION), profile: 'trekking', - alt: '0' + alt: '0', }; var url = L.Util.template(URL_TEMPLATE, urlParams); //console.log(url); @@ -24,6 +24,6 @@ var brouterCgi = (function() { } return { - getUrl: getUrl + getUrl: getUrl, }; })(); diff --git a/js/util/Track.js b/js/util/Track.js index f806131..19734ca 100644 --- a/js/util/Track.js +++ b/js/util/Track.js @@ -9,29 +9,29 @@ BR.Track = { * * @returns {Object} to pass as `options` parameter to `L.geoJson` */ - getGeoJsonOptions: function(layersControl) { + getGeoJsonOptions: function (layersControl) { return { - style: function(geoJsonFeature) { + style: function (geoJsonFeature) { var currentLayerId = layersControl.getActiveBaseLayer().layer.id; return { color: currentLayerId === 'cyclosm' ? 'yellow' : 'blue', - weight: 4 + weight: 4, }; }, interactive: false, - filter: function(geoJsonFeature) { + filter: function (geoJsonFeature) { // remove POIs, added separately return !BR.Track.isPoiPoint(geoJsonFeature); }, - pointToLayer: function(geoJsonPoint, latlng) { + pointToLayer: function (geoJsonPoint, latlng) { // route waypoint (type=from/via/to) return L.marker(latlng, { interactive: false, opacity: 0.7, // prevent being on top of route markers - zIndexOffset: -1000 + zIndexOffset: -1000, }); - } + }, }; }, @@ -41,8 +41,8 @@ BR.Track = { * @param {BR.PoiMarkers} pois POI control instance * @param {Object} geoJson GeoJSON object */ - addPoiMarkers: function(pois, geoJson) { - turf.featureEach(geoJson, function(feature, idx) { + addPoiMarkers: function (pois, geoJson) { + turf.featureEach(geoJson, function (feature, idx) { if (BR.Track.isPoiPoint(feature)) { var coord = turf.getCoord(feature); var latlng = L.GeoJSON.coordsToLatLng(coord); @@ -61,7 +61,7 @@ BR.Track = { * * @param {Object} geoJsonPointFeature GeoJSON Point feature */ - isRouteWaypoint: function(geoJsonPointFeature) { + isRouteWaypoint: function (geoJsonPointFeature) { var props = geoJsonPointFeature.properties; if (props && props.type) { var wptType = props.type; @@ -77,7 +77,7 @@ BR.Track = { * * @param {Object} geoJsonFeature GeoJSON feature */ - isPoiPoint: function(geoJsonFeature) { + isPoiPoint: function (geoJsonFeature) { return turf.getType(geoJsonFeature) === 'Point' && !BR.Track.isRouteWaypoint(geoJsonFeature); - } + }, }; diff --git a/js/util/TrackEdges.js b/js/util/TrackEdges.js index 7815064..6602545 100644 --- a/js/util/TrackEdges.js +++ b/js/util/TrackEdges.js @@ -17,7 +17,7 @@ BR.TrackEdges = L.Class.extend({ /** * @param {Array} segments */ - initialize: function(segments) { + initialize: function (segments) { this.edges = this.getTrackEdges(segments); }, @@ -30,7 +30,7 @@ BR.TrackEdges = L.Class.extend({ * * @return {number[]} */ - getTrackEdges: function(segments) { + getTrackEdges: function (segments) { var messages, segLatLngs, length, @@ -70,10 +70,10 @@ BR.TrackEdges = L.Class.extend({ return edges; }, - getMessageLatLng: function(message) { + getMessageLatLng: function (message) { var lon = message[0] / 1000000, lat = message[1] / 1000000; return L.latLng(lat, lon); - } + }, }); diff --git a/keys.template.js b/keys.template.js index a39d13f..9c7359b 100644 --- a/keys.template.js +++ b/keys.template.js @@ -1,4 +1,4 @@ -(function() { +(function () { // COPYING: Please get your own API keys from the sites listed below BR.keys = { @@ -15,6 +15,6 @@ strava: '', // OpenMapSurfer (OpenRouteService API), https://openrouteservice.org/plans/ - openrouteservice: '' + openrouteservice: '', }; })(); diff --git a/package.json b/package.json index a6da37b..0cf4fe0 100644 --- a/package.json +++ b/package.json @@ -109,8 +109,8 @@ "merge-stream": "^2.0.0", "node-fetch": "^2.6.1", "npmfiles": "^0.1.1", - "prettier": "^1.17.1", - "pretty-quick": "^1.10.0" + "prettier": "^2.2.1", + "pretty-quick": "^3.1.0" }, "overrides": { "leaflet": { diff --git a/yarn.lock b/yarn.lock index 65ffbee..ea2c2a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1231,6 +1231,11 @@ "@turf/invariant" "^5.1.5" d3-voronoi "1.1.2" +"@types/minimatch@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" @@ -1446,7 +1451,7 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -1563,10 +1568,10 @@ array-differ@^1.0.0: resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= -array-differ@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" - integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== array-each@^1.0.0, array-each@^1.0.1: version "1.0.1" @@ -1612,13 +1617,18 @@ array-sort@^1.0.0: get-value "^2.0.6" kind-of "^5.0.2" -array-union@^1.0.1, array-union@^1.0.2: +array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-uniq@^1.0.1, array-uniq@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -1634,10 +1644,10 @@ arraybuffer.slice@~0.0.7: resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== asn1@~0.2.3: version "0.2.4" @@ -2168,7 +2178,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2177,6 +2187,14 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" @@ -2561,15 +2579,6 @@ cosmiconfig@^5.2.0: js-yaml "^3.13.1" parse-json "^4.0.0" -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -2581,6 +2590,15 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + css@2.X, css@^2.0.0: version "2.2.4" resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" @@ -3237,19 +3255,6 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -3263,6 +3268,21 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -3428,13 +3448,6 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -3699,6 +3712,13 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -4190,6 +4210,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" @@ -4289,6 +4314,11 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + husky@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/husky/-/husky-2.3.0.tgz#8b78ed24d763042df7fd899991985d65a976dd13" @@ -4374,16 +4404,16 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^3.3.7: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + immutable@^3: version "3.8.2" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" @@ -4730,6 +4760,11 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -5152,14 +5187,6 @@ localtunnel@^2.0.0: openurl "1.1.1" yargs "13.3.0" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -5332,14 +5359,6 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - make-iterator@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" @@ -5543,10 +5562,10 @@ monotone-convex-hull-2d@^1.0.1: dependencies: robust-orientation "^1.1.3" -mri@^1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" - integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== +mri@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" + integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== ms@2.0.0: version "2.0.0" @@ -5558,14 +5577,15 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -multimatch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" - integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== +multimatch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" + integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== dependencies: - array-differ "^2.0.3" - array-union "^1.0.2" - arrify "^1.0.1" + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" minimatch "^3.0.4" multipipe@^0.1.2: @@ -5739,6 +5759,13 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + npmfiles@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/npmfiles/-/npmfiles-0.1.1.tgz#081f51f98c9a4d488e6e15acc5989870c94db77b" @@ -5953,13 +5980,6 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" @@ -5974,13 +5994,6 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -5995,11 +6008,6 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -6112,6 +6120,11 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -6313,10 +6326,10 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@^1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.1.tgz#ed64b4e93e370cb8a25b9ef7fef3e4fd1c0995db" - integrity sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg== +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== pretty-bytes@^1.0.4: version "1.0.4" @@ -6331,17 +6344,17 @@ pretty-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= -pretty-quick@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-1.10.0.tgz#d86cc46fe92ed8cfcfba6a082ec5949c53858198" - integrity sha512-uNvm2N3UWmnZRZrClyQI45hIbV20f5BpSyZY51Spbvn4APp9+XLyX4bCjWRGT3fGyVyQ/2/iw7dbQq1UUaq7SQ== +pretty-quick@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.0.tgz#cb172e9086deb57455dea7c7e8f136cd0a4aef6c" + integrity sha512-DtxIxksaUWCgPFN7E1ZZk4+Aav3CCuRdhrDSFZENb404sYMtuo9Zka823F+Mgeyt8Zt3bUiCjFzzWYE9LYqkmQ== dependencies: - chalk "^2.3.0" - execa "^0.8.0" - find-up "^2.1.0" - ignore "^3.3.7" - mri "^1.1.0" - multimatch "^3.0.0" + chalk "^3.0.0" + execa "^4.0.0" + find-up "^4.1.0" + ignore "^5.1.4" + mri "^1.1.5" + multimatch "^4.0.0" process-nextick-args@^2.0.0: version "2.0.0" @@ -6376,11 +6389,6 @@ promise-polyfill@^8.1.0: resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.0.tgz#30059da54d1358ce905ac581f287e184aedf995d" integrity sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA== -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - psl@^1.1.24: version "1.1.31" resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" @@ -7092,11 +7100,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -7533,6 +7553,11 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" @@ -7569,6 +7594,13 @@ supports-color@^5.3.0, supports-color@^5.4.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + sver-compat@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" @@ -8125,6 +8157,13 @@ which@^1.2.14, which@^1.2.9: dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -8238,11 +8277,6 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - yallist@^3.0.0, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"