mirror of
https://github.com/FoggedLens/iD.git
synced 2026-03-31 01:09:22 +02:00
Convert lodah-es and d3 to named imports for services
This commit is contained in:
@@ -1,13 +1,33 @@
|
||||
/* global Mapillary:false */
|
||||
import * as d3 from 'd3';
|
||||
import _ from 'lodash';
|
||||
import _compact from 'lodash-es/compact';
|
||||
import _filter from 'lodash-es/filter';
|
||||
import _find from 'lodash-es/find';
|
||||
import _flatten from 'lodash-es/flatten';
|
||||
import _forEach from 'lodash-es/forEach';
|
||||
import _isEmpty from 'lodash-es/isEmpty';
|
||||
import _map from 'lodash-es/map';
|
||||
import _some from 'lodash-es/some';
|
||||
|
||||
import { range as d3_range } from 'd3-array';
|
||||
import { dispatch as d3_dispatch } from 'd3-dispatch';
|
||||
|
||||
import {
|
||||
request as d3_request,
|
||||
json as d3_json
|
||||
} from 'd3-request';
|
||||
|
||||
import {
|
||||
select as d3_select,
|
||||
selectAll as d3_selectAll
|
||||
} from 'd3-selection';
|
||||
|
||||
import rbush from 'rbush';
|
||||
import { utilRebind } from '../util/rebind';
|
||||
import { d3geoTile } from '../lib/d3.geo.tile';
|
||||
|
||||
import { d3geoTile as d3_geoTile } from '../lib/d3.geo.tile';
|
||||
import { geoExtent } from '../geo';
|
||||
import { svgIcon } from '../svg';
|
||||
import { utilDetect } from '../util/detect';
|
||||
import { geoExtent } from '../geo/index';
|
||||
import { svgIcon } from '../svg/index';
|
||||
import { utilQsString } from '../util/index';
|
||||
import { utilQsString, utilRebind } from '../util';
|
||||
|
||||
|
||||
var apibase = 'https://a.mapillary.com/v3/',
|
||||
@@ -16,7 +36,7 @@ var apibase = 'https://a.mapillary.com/v3/',
|
||||
clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi',
|
||||
maxResults = 1000,
|
||||
tileZoom = 14,
|
||||
dispatch = d3.dispatch('loadedImages', 'loadedSigns'),
|
||||
dispatch = d3_dispatch('loadedImages', 'loadedSigns'),
|
||||
mapillaryCache,
|
||||
mapillaryClicks,
|
||||
mapillaryImage,
|
||||
@@ -60,7 +80,7 @@ function getTiles(projection) {
|
||||
s / 2 - projection.translate()[0],
|
||||
s / 2 - projection.translate()[1]];
|
||||
|
||||
return d3geoTile()
|
||||
return d3_geoTile()
|
||||
.scaleExtent([tileZoom, tileZoom])
|
||||
.scale(s)
|
||||
.size(projection.clipExtent()[1])
|
||||
@@ -89,8 +109,8 @@ function loadTiles(which, url, projection) {
|
||||
return !nearNullIsland(t.xyz[0], t.xyz[1], t.xyz[2]);
|
||||
});
|
||||
|
||||
_.filter(which.inflight, function(v, k) {
|
||||
var wanted = _.find(tiles, function(tile) { return k === (tile.id + ',0'); });
|
||||
_filter(which.inflight, function(v, k) {
|
||||
var wanted = _find(tiles, function(tile) { return k === (tile.id + ',0'); });
|
||||
if (!wanted) delete which.inflight[k];
|
||||
return !wanted;
|
||||
}).map(abortRequest);
|
||||
@@ -118,7 +138,7 @@ function loadNextTilePage(which, currZoom, url, tile) {
|
||||
|
||||
var id = tile.id + ',' + String(nextPage);
|
||||
if (cache.loaded[id] || cache.inflight[id]) return;
|
||||
cache.inflight[id] = d3.request(nextURL)
|
||||
cache.inflight[id] = d3_request(nextURL)
|
||||
.mimeType('application/json')
|
||||
.response(function(xhr) {
|
||||
var linkHeader = xhr.getResponseHeader('Link');
|
||||
@@ -214,8 +234,8 @@ function parsePagination(links) {
|
||||
function partitionViewport(psize, projection) {
|
||||
var dimensions = projection.clipExtent()[1];
|
||||
psize = psize || 16;
|
||||
var cols = d3.range(0, dimensions[0], psize),
|
||||
rows = d3.range(0, dimensions[1], psize),
|
||||
var cols = d3_range(0, dimensions[0], psize),
|
||||
rows = d3_range(0, dimensions[1], psize),
|
||||
partitions = [];
|
||||
|
||||
rows.forEach(function(y) {
|
||||
@@ -236,7 +256,7 @@ function searchLimited(psize, limit, projection, rtree) {
|
||||
limit = limit || 3;
|
||||
|
||||
var partitions = partitionViewport(psize, projection);
|
||||
return _.flatten(_.compact(_.map(partitions, function(extent) {
|
||||
return _flatten(_compact(_map(partitions, function(extent) {
|
||||
return rtree.search(extent.bbox())
|
||||
.slice(0, limit)
|
||||
.map(function(d) { return d.data; });
|
||||
@@ -260,10 +280,10 @@ export default {
|
||||
|
||||
if (cache) {
|
||||
if (cache.images && cache.images.inflight) {
|
||||
_.forEach(cache.images.inflight, abortRequest);
|
||||
_forEach(cache.images.inflight, abortRequest);
|
||||
}
|
||||
if (cache.objects && cache.objects.inflight) {
|
||||
_.forEach(cache.objects.inflight, abortRequest);
|
||||
_forEach(cache.objects.inflight, abortRequest);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -329,7 +349,7 @@ export default {
|
||||
if (!mapillarySignDefs) {
|
||||
mapillarySignSprite = context.asset('img/traffic-signs/traffic-signs.png');
|
||||
mapillarySignDefs = {};
|
||||
d3.json(context.asset('img/traffic-signs/traffic-signs.json'), function(err, data) {
|
||||
d3_json(context.asset('img/traffic-signs/traffic-signs.json'), function(err, data) {
|
||||
if (err) return;
|
||||
mapillarySignDefs = data;
|
||||
});
|
||||
@@ -339,7 +359,7 @@ export default {
|
||||
|
||||
loadViewer: function(context) {
|
||||
var that = this;
|
||||
var wrap = d3.select('#content').selectAll('.mapillary-wrap')
|
||||
var wrap = d3_select('#content').selectAll('.mapillary-wrap')
|
||||
.data([0]);
|
||||
|
||||
var enter = wrap.enter()
|
||||
@@ -362,7 +382,7 @@ export default {
|
||||
.classed('active', false);
|
||||
|
||||
// load mapillary-viewercss
|
||||
d3.select('head').selectAll('#mapillary-viewercss')
|
||||
d3_select('head').selectAll('#mapillary-viewercss')
|
||||
.data([0])
|
||||
.enter()
|
||||
.append('link')
|
||||
@@ -371,7 +391,7 @@ export default {
|
||||
.attr('href', context.asset(viewercss));
|
||||
|
||||
// load mapillary-viewerjs
|
||||
d3.select('head').selectAll('#mapillary-viewerjs')
|
||||
d3_select('head').selectAll('#mapillary-viewerjs')
|
||||
.data([0])
|
||||
.enter()
|
||||
.append('script')
|
||||
@@ -381,7 +401,7 @@ export default {
|
||||
|
||||
|
||||
showViewer: function() {
|
||||
d3.select('#content')
|
||||
d3_select('#content')
|
||||
.selectAll('.mapillary-wrap')
|
||||
.classed('hidden', false)
|
||||
.selectAll('.mly-wrapper')
|
||||
@@ -392,13 +412,13 @@ export default {
|
||||
|
||||
|
||||
hideViewer: function() {
|
||||
d3.select('#content')
|
||||
d3_select('#content')
|
||||
.selectAll('.mapillary-wrap')
|
||||
.classed('hidden', true)
|
||||
.selectAll('.mly-wrapper')
|
||||
.classed('active', false);
|
||||
|
||||
d3.selectAll('.layer-mapillary-images .viewfield-group, .layer-mapillary-signs .icon-sign')
|
||||
d3_selectAll('.layer-mapillary-images .viewfield-group, .layer-mapillary-signs .icon-sign')
|
||||
.classed('selected', false);
|
||||
|
||||
mapillaryImage = null;
|
||||
@@ -475,14 +495,14 @@ export default {
|
||||
mapillaryClicks.push(imageKey);
|
||||
}
|
||||
|
||||
d3.selectAll('.layer-mapillary-images .viewfield-group')
|
||||
d3_selectAll('.layer-mapillary-images .viewfield-group')
|
||||
.classed('selected', function(d) {
|
||||
return d.key === imageKey;
|
||||
});
|
||||
|
||||
d3.selectAll('.layer-mapillary-signs .icon-sign')
|
||||
d3_selectAll('.layer-mapillary-signs .icon-sign')
|
||||
.classed('selected', function(d) {
|
||||
return _.some(d.detections, function(detection) {
|
||||
return _some(d.detections, function(detection) {
|
||||
return detection.image_key === imageKey;
|
||||
});
|
||||
});
|
||||
@@ -497,12 +517,12 @@ export default {
|
||||
return d.toLocaleString(undefined, { timeZone: 'UTC' });
|
||||
}
|
||||
|
||||
var selected = d3.selectAll('.layer-mapillary-images .viewfield-group.selected');
|
||||
var selected = d3_selectAll('.layer-mapillary-images .viewfield-group.selected');
|
||||
if (selected.empty()) return this;
|
||||
|
||||
var datum = selected.datum();
|
||||
var timestamp = localeTimestamp(datum.captured_at);
|
||||
var attribution = d3.select('.mapillary-js-dom .Attribution');
|
||||
var attribution = d3_select('.mapillary-js-dom .Attribution');
|
||||
var capturedAt = attribution.selectAll('.captured-at');
|
||||
if (capturedAt.empty()) {
|
||||
attribution
|
||||
@@ -525,8 +545,8 @@ export default {
|
||||
if (!mapillaryViewer) return;
|
||||
|
||||
var detections = mapillaryCache.detections[mapillaryImage];
|
||||
_.each(detections, function(data, k) {
|
||||
if (_.isEmpty(data)) {
|
||||
_forEach(detections, function(data, k) {
|
||||
if (_isEmpty(data)) {
|
||||
loadDetection(k);
|
||||
} else {
|
||||
var tag = makeTag(data);
|
||||
@@ -544,7 +564,7 @@ export default {
|
||||
client_id: clientId,
|
||||
});
|
||||
|
||||
d3.request(url)
|
||||
d3_request(url)
|
||||
.mimeType('application/json')
|
||||
.response(function(xhr) {
|
||||
return JSON.parse(xhr.responseText);
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import * as d3 from 'd3';
|
||||
import _ from 'lodash';
|
||||
import _assign from 'lodash-es/assign';
|
||||
import _forEach from 'lodash-es/forEach';
|
||||
|
||||
import { json as d3_json } from 'd3-request';
|
||||
|
||||
import rbush from 'rbush';
|
||||
import { geoExtent } from '../geo/index';
|
||||
import { utilQsString } from '../util/index';
|
||||
import { geoExtent } from '../geo';
|
||||
import { utilQsString } from '../util';
|
||||
|
||||
|
||||
var apibase = 'https://nominatim.openstreetmap.org/',
|
||||
@@ -18,7 +21,7 @@ export default {
|
||||
},
|
||||
|
||||
reset: function() {
|
||||
_.forEach(inflight, function(req) { req.abort(); });
|
||||
_forEach(inflight, function(req) { req.abort(); });
|
||||
inflight = {};
|
||||
nominatimCache = rbush();
|
||||
},
|
||||
@@ -50,7 +53,7 @@ export default {
|
||||
var url = apibase + 'reverse?' + utilQsString(params);
|
||||
if (inflight[url]) return;
|
||||
|
||||
inflight[url] = d3.json(url, function(err, result) {
|
||||
inflight[url] = d3_json(url, function(err, result) {
|
||||
delete inflight[url];
|
||||
|
||||
if (err) {
|
||||
@@ -60,7 +63,7 @@ export default {
|
||||
}
|
||||
|
||||
var extent = geoExtent(location).padByMeters(200);
|
||||
nominatimCache.insert(_.assign(extent.bbox(), {data: result}));
|
||||
nominatimCache.insert(_assign(extent.bbox(), {data: result}));
|
||||
|
||||
callback(null, result);
|
||||
});
|
||||
@@ -72,7 +75,7 @@ export default {
|
||||
var url = apibase + 'search/' + searchVal + '?limit=10&format=json';
|
||||
if (inflight[url]) return;
|
||||
|
||||
inflight[url] = d3.json(url, function(err, result) {
|
||||
inflight[url] = d3_json(url, function(err, result) {
|
||||
delete inflight[url];
|
||||
callback(err, result);
|
||||
});
|
||||
|
||||
@@ -1,8 +1,19 @@
|
||||
import * as d3 from 'd3';
|
||||
import _ from 'lodash';
|
||||
import _chunk from 'lodash-es/chunk';
|
||||
import _extend from 'lodash-es/extend';
|
||||
import _forEach from 'lodash-es/forEach';
|
||||
import _filter from 'lodash-es/filter';
|
||||
import _find from 'lodash-es/find';
|
||||
import _groupBy from 'lodash-es/groupBy';
|
||||
import _isEmpty from 'lodash-es/isEmpty';
|
||||
import _map from 'lodash-es/map';
|
||||
import _uniq from 'lodash-es/uniq';
|
||||
|
||||
import { dispatch as d3_dispatch } from 'd3-dispatch';
|
||||
import { xml as d3_xml } from 'd3-request';
|
||||
|
||||
import osmAuth from 'osm-auth';
|
||||
import { JXON } from '../util/jxon';
|
||||
import { d3geoTile } from '../lib/d3.geo.tile';
|
||||
import { d3geoTile as d3_geoTile } from '../lib/d3.geo.tile';
|
||||
import { geoExtent } from '../geo';
|
||||
import {
|
||||
osmEntity,
|
||||
@@ -14,7 +25,7 @@ import {
|
||||
import { utilRebind, utilIdleWorker } from '../util';
|
||||
|
||||
|
||||
var dispatch = d3.dispatch('authLoading', 'authDone', 'change', 'loading', 'loaded'),
|
||||
var dispatch = d3_dispatch('authLoading', 'authDone', 'change', 'loading', 'loaded'),
|
||||
urlroot = 'https://www.openstreetmap.org',
|
||||
blacklists = ['.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'],
|
||||
inflight = {},
|
||||
@@ -149,7 +160,7 @@ var parsers = {
|
||||
|
||||
|
||||
function parse(xml, callback, options) {
|
||||
options = _.extend({ cache: true }, options);
|
||||
options = _extend({ cache: true }, options);
|
||||
if (!xml || !xml.childNodes) return;
|
||||
|
||||
var root = xml.childNodes[0],
|
||||
@@ -181,7 +192,7 @@ export default {
|
||||
userChangesets = undefined;
|
||||
userDetails = undefined;
|
||||
rateLimitError = undefined;
|
||||
_.forEach(inflight, abortRequest);
|
||||
_forEach(inflight, abortRequest);
|
||||
entityCache = {};
|
||||
loadedTiles = {};
|
||||
inflight = {};
|
||||
@@ -219,7 +230,7 @@ export default {
|
||||
|
||||
|
||||
loadFromAPI: function(path, callback, options) {
|
||||
options = _.extend({ cache: true }, options);
|
||||
options = _extend({ cache: true }, options);
|
||||
var that = this;
|
||||
|
||||
function done(err, xml) {
|
||||
@@ -260,7 +271,7 @@ export default {
|
||||
return oauth.xhr({ method: 'GET', path: path }, done);
|
||||
} else {
|
||||
var url = urlroot + path;
|
||||
return d3.xml(url).get(done);
|
||||
return d3_xml(url).get(done);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -298,12 +309,12 @@ export default {
|
||||
loadMultiple: function(ids, callback) {
|
||||
var that = this;
|
||||
|
||||
_.each(_.groupBy(_.uniq(ids), osmEntity.id.type), function(v, k) {
|
||||
_forEach(_groupBy(_uniq(ids), osmEntity.id.type), function(v, k) {
|
||||
var type = k + 's',
|
||||
osmIDs = _.map(v, osmEntity.id.toOSM),
|
||||
osmIDs = _map(v, osmEntity.id.toOSM),
|
||||
options = { cache: false };
|
||||
|
||||
_.each(_.chunk(osmIDs, 150), function(arr) {
|
||||
_forEach(_chunk(osmIDs, 150), function(arr) {
|
||||
that.loadFromAPI(
|
||||
'/api/0.6/' + type + '?' + type + '=' + arr.join(),
|
||||
function(err, entities) {
|
||||
@@ -463,7 +474,7 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
d3.xml(urlroot + '/api/capabilities').get()
|
||||
d3_xml(urlroot + '/api/capabilities').get()
|
||||
.on('load', done)
|
||||
.on('error', callback);
|
||||
},
|
||||
@@ -493,7 +504,7 @@ export default {
|
||||
s / 2 - projection.translate()[1]
|
||||
];
|
||||
|
||||
var tiles = d3geoTile()
|
||||
var tiles = d3_geoTile()
|
||||
.scaleExtent([tileZoom, tileZoom])
|
||||
.scale(s)
|
||||
.size(dimensions)
|
||||
@@ -510,8 +521,8 @@ export default {
|
||||
};
|
||||
});
|
||||
|
||||
_.filter(inflight, function(v, i) {
|
||||
var wanted = _.find(tiles, function(tile) {
|
||||
_filter(inflight, function(v, i) {
|
||||
var wanted = _find(tiles, function(tile) {
|
||||
return i === tile.id;
|
||||
});
|
||||
if (!wanted) delete inflight[i];
|
||||
@@ -523,7 +534,7 @@ export default {
|
||||
|
||||
if (loadedTiles[id] || inflight[id]) return;
|
||||
|
||||
if (_.isEmpty(inflight)) {
|
||||
if (_isEmpty(inflight)) {
|
||||
dispatch.call('loading');
|
||||
}
|
||||
|
||||
@@ -536,10 +547,10 @@ export default {
|
||||
}
|
||||
|
||||
if (callback) {
|
||||
callback(err, _.extend({ data: parsed }, tile));
|
||||
callback(err, _extend({ data: parsed }, tile));
|
||||
}
|
||||
|
||||
if (_.isEmpty(inflight)) {
|
||||
if (_isEmpty(inflight)) {
|
||||
dispatch.call('loaded');
|
||||
}
|
||||
}
|
||||
@@ -551,7 +562,7 @@ export default {
|
||||
switch: function(options) {
|
||||
urlroot = options.urlroot;
|
||||
|
||||
oauth.options(_.extend({
|
||||
oauth.options(_extend({
|
||||
url: urlroot,
|
||||
loading: authLoading,
|
||||
done: authDone
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
import * as d3 from 'd3';
|
||||
import _ from 'lodash';
|
||||
import _debounce from 'lodash-es/debounce';
|
||||
import _extend from 'lodash-es/extend';
|
||||
import _forEach from 'lodash-es/forEach';
|
||||
import _omit from 'lodash-es/omit';
|
||||
|
||||
import { json as d3_json } from 'd3-request';
|
||||
|
||||
import { utilQsString } from '../util';
|
||||
|
||||
|
||||
@@ -59,7 +64,7 @@ function setSortMembers(params) {
|
||||
|
||||
|
||||
function clean(params) {
|
||||
return _.omit(params, ['geometry', 'debounce']);
|
||||
return _omit(params, ['geometry', 'debounce']);
|
||||
}
|
||||
|
||||
|
||||
@@ -131,14 +136,14 @@ function sortKeys(a, b) {
|
||||
}
|
||||
|
||||
|
||||
var debouncedRequest = _.debounce(request, 500, { leading: false });
|
||||
var debouncedRequest = _debounce(request, 500, { leading: false });
|
||||
|
||||
function request(url, params, exactMatch, callback, loaded) {
|
||||
if (inflight[url]) return;
|
||||
|
||||
if (checkCache(url, params, exactMatch, callback)) return;
|
||||
|
||||
inflight[url] = d3.json(url, function (err, data) {
|
||||
inflight[url] = d3_json(url, function (err, data) {
|
||||
delete inflight[url];
|
||||
loaded(err, data);
|
||||
});
|
||||
@@ -194,7 +199,7 @@ export default {
|
||||
|
||||
|
||||
reset: function() {
|
||||
_.forEach(inflight, function(req) { req.abort(); });
|
||||
_forEach(inflight, function(req) { req.abort(); });
|
||||
inflight = {};
|
||||
},
|
||||
|
||||
@@ -202,7 +207,7 @@ export default {
|
||||
keys: function(params, callback) {
|
||||
var doRequest = params.debounce ? debouncedRequest : request;
|
||||
params = clean(setSort(params));
|
||||
params = _.extend({ rp: 10, sortname: 'count_all', sortorder: 'desc', page: 1 }, params);
|
||||
params = _extend({ rp: 10, sortname: 'count_all', sortorder: 'desc', page: 1 }, params);
|
||||
|
||||
var url = apibase + 'keys/all?' + utilQsString(params);
|
||||
doRequest(url, params, false, callback, function(err, d) {
|
||||
@@ -221,7 +226,7 @@ export default {
|
||||
multikeys: function(params, callback) {
|
||||
var doRequest = params.debounce ? debouncedRequest : request;
|
||||
params = clean(setSort(params));
|
||||
params = _.extend({ rp: 25, sortname: 'count_all', sortorder: 'desc', page: 1 }, params);
|
||||
params = _extend({ rp: 25, sortname: 'count_all', sortorder: 'desc', page: 1 }, params);
|
||||
var prefix = params.query;
|
||||
|
||||
var url = apibase + 'keys/all?' + utilQsString(params);
|
||||
@@ -248,7 +253,7 @@ export default {
|
||||
|
||||
var doRequest = params.debounce ? debouncedRequest : request;
|
||||
params = clean(setSort(setFilter(params)));
|
||||
params = _.extend({ rp: 25, sortname: 'count_all', sortorder: 'desc', page: 1 }, params);
|
||||
params = _extend({ rp: 25, sortname: 'count_all', sortorder: 'desc', page: 1 }, params);
|
||||
|
||||
var url = apibase + 'key/values?' + utilQsString(params);
|
||||
doRequest(url, params, false, callback, function(err, d) {
|
||||
@@ -275,7 +280,7 @@ export default {
|
||||
var doRequest = params.debounce ? debouncedRequest : request;
|
||||
var geometry = params.geometry;
|
||||
params = clean(setSortMembers(params));
|
||||
params = _.extend({ rp: 25, sortname: 'count_all_members', sortorder: 'desc', page: 1 }, params);
|
||||
params = _extend({ rp: 25, sortname: 'count_all_members', sortorder: 'desc', page: 1 }, params);
|
||||
|
||||
var url = apibase + 'relation/roles?' + utilQsString(params);
|
||||
doRequest(url, params, true, callback, function(err, d) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { jsonpRequest } from '../util/jsonp_request';
|
||||
import { utilQsString } from '../util/index';
|
||||
import { utilQsString } from '../util';
|
||||
|
||||
|
||||
var endpoint = 'https://www.wikidata.org/w/api.php?';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { jsonpRequest } from '../util/jsonp_request';
|
||||
import { utilQsString } from '../util/index';
|
||||
import { utilQsString } from '../util';
|
||||
|
||||
|
||||
var endpoint = 'https://en.wikipedia.org/w/api.php?';
|
||||
|
||||
Reference in New Issue
Block a user