Variable cleanups

This commit is contained in:
Bryan Housel
2018-12-12 16:13:32 -05:00
parent d28b269b4c
commit f45e97d727

View File

@@ -9,36 +9,37 @@ import { utilQsString } from '../util';
import { currentLocale } from '../util/locale';
var apibase = 'https://taginfo.openstreetmap.org/api/4/',
inflight = {},
popularKeys = {},
taginfoCache = {},
tag_sorts = {
point: 'count_nodes',
vertex: 'count_nodes',
area: 'count_ways',
line: 'count_ways'
},
tag_sort_members = {
point: 'count_node_members',
vertex: 'count_node_members',
area: 'count_way_members',
line: 'count_way_members',
relation: 'count_relation_members'
},
tag_filters = {
point: 'nodes',
vertex: 'nodes',
area: 'ways',
line: 'ways'
},
tag_members_fractions = {
point: 'count_node_members_fraction',
vertex: 'count_node_members_fraction',
area: 'count_way_members_fraction',
line: 'count_way_members_fraction',
relation: 'count_relation_members_fraction'
};
var apibase = 'https://taginfo.openstreetmap.org/api/4/';
var _inflight = {};
var _popularKeys = {};
var _taginfoCache = {};
var tag_sorts = {
point: 'count_nodes',
vertex: 'count_nodes',
area: 'count_ways',
line: 'count_ways'
};
var tag_sort_members = {
point: 'count_node_members',
vertex: 'count_node_members',
area: 'count_way_members',
line: 'count_way_members',
relation: 'count_relation_members'
};
var tag_filters = {
point: 'nodes',
vertex: 'nodes',
area: 'ways',
line: 'ways'
};
var tag_members_fractions = {
point: 'count_node_members_fraction',
vertex: 'count_node_members_fraction',
area: 'count_way_members_fraction',
line: 'count_way_members_fraction',
relation: 'count_relation_members_fraction'
};
function sets(params, n, o) {
@@ -140,24 +141,24 @@ function sortKeys(a, b) {
var debouncedRequest = _debounce(request, 500, { leading: false });
function request(url, params, exactMatch, callback, loaded) {
if (inflight[url]) return;
if (_inflight[url]) return;
if (checkCache(url, params, exactMatch, callback)) return;
inflight[url] = d3_json(url, function (err, data) {
delete inflight[url];
_inflight[url] = d3_json(url, function (err, data) {
delete _inflight[url];
loaded(err, data);
});
}
function checkCache(url, params, exactMatch, callback) {
var rp = params.rp || 25,
testQuery = params.query || '',
testUrl = url;
var rp = params.rp || 25;
var testQuery = params.query || '';
var testUrl = url;
do {
var hit = taginfoCache[testUrl];
var hit = _taginfoCache[testUrl];
// exact match, or shorter match yielding fewer than max results (rp)
if (hit && (url === testUrl || hit.length < rp)) {
@@ -181,36 +182,49 @@ function checkCache(url, params, exactMatch, callback) {
export default {
init: function() {
inflight = {};
taginfoCache = {};
popularKeys = {
_inflight = {};
_taginfoCache = {};
_popularKeys = {
postal_code: true // #5377
};
// Fetch popular keys. We'll exclude these from `values`
// lookups because they stress taginfo, and they aren't likely
// to yield meaningful autocomplete results.. see #3955
var params = { rp: 100, sortname: 'values_all', sortorder: 'desc', page: 1, debounce: false, lang: currentLocale };
var params = {
rp: 100,
sortname: 'values_all',
sortorder: 'desc',
page: 1,
debounce: false,
lang: currentLocale
};
this.keys(params, function(err, data) {
if (err) return;
data.forEach(function(d) {
if (d.value === 'opening_hours') return; // exception
popularKeys[d.value] = true;
_popularKeys[d.value] = true;
});
});
},
reset: function() {
_forEach(inflight, function(req) { req.abort(); });
inflight = {};
_forEach(_inflight, function(req) { req.abort(); });
_inflight = {};
},
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, lang: currentLocale }, params);
params = _extend({
rp: 10,
sortname: 'count_all',
sortorder: 'desc',
page: 1,
lang: currentLocale
}, params);
var url = apibase + 'keys/all?' + utilQsString(params);
doRequest(url, params, false, callback, function(err, d) {
@@ -219,7 +233,7 @@ export default {
} else {
var f = filterKeys(params.filter);
var result = d.data.filter(f).sort(sortKeys).map(valKey);
taginfoCache[url] = result;
_taginfoCache[url] = result;
callback(null, result);
}
});
@@ -229,9 +243,15 @@ 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, lang: currentLocale }, params);
var prefix = params.query;
params = _extend({
rp: 25,
sortname: 'count_all',
sortorder: 'desc',
page: 1,
lang: currentLocale
}, params);
var prefix = params.query;
var url = apibase + 'keys/all?' + utilQsString(params);
doRequest(url, params, true, callback, function(err, d) {
if (err) {
@@ -239,7 +259,7 @@ export default {
} else {
var f = filterMultikeys(prefix);
var result = d.data.filter(f).map(valKey);
taginfoCache[url] = result;
_taginfoCache[url] = result;
callback(null, result);
}
});
@@ -249,14 +269,20 @@ export default {
values: function(params, callback) {
// Exclude popular keys from values lookups.. see #3955
var key = params.key;
if (key && popularKeys[key]) {
if (key && _popularKeys[key]) {
callback(null, []);
return;
}
var doRequest = params.debounce ? debouncedRequest : request;
params = clean(setSort(setFilter(params)));
params = _extend({ rp: 25, sortname: 'count_all', sortorder: 'desc', page: 1, lang: currentLocale }, params);
params = _extend({
rp: 25,
sortname: 'count_all',
sortorder: 'desc',
page: 1,
lang: currentLocale
}, params);
var url = apibase + 'key/values?' + utilQsString(params);
doRequest(url, params, false, callback, function(err, d) {
@@ -272,7 +298,7 @@ export default {
var f = filterValues(allowUpperCase);
var result = d.data.filter(f).map(valKeyDescription);
taginfoCache[url] = result;
_taginfoCache[url] = result;
callback(null, result);
}
});
@@ -283,7 +309,13 @@ 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, lang: currentLocale }, params);
params = _extend({
rp: 25,
sortname: 'count_all_members',
sortorder: 'desc',
page: 1,
lang: currentLocale
}, params);
var url = apibase + 'relation/roles?' + utilQsString(params);
doRequest(url, params, true, callback, function(err, d) {
@@ -292,7 +324,7 @@ export default {
} else {
var f = filterRoles(geometry);
var result = d.data.filter(f).map(roleKey);
taginfoCache[url] = result;
_taginfoCache[url] = result;
callback(null, result);
}
});
@@ -304,15 +336,18 @@ export default {
params = clean(setSort(params));
var path = 'key/wiki_pages?';
if (params.value) path = 'tag/wiki_pages?';
else if (params.rtype) path = 'relation/wiki_pages?';
if (params.value) {
path = 'tag/wiki_pages?';
} else if (params.rtype) {
path = 'relation/wiki_pages?';
}
var url = apibase + path + utilQsString(params);
doRequest(url, params, true, callback, function(err, d) {
if (err) {
callback(err);
} else {
taginfoCache[url] = d.data;
_taginfoCache[url] = d.data;
callback(null, d.data);
}
});