mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 01:02:58 +00:00
This also includes a bunch of tweaks to make the tests work in both PhantomJS and modern browsers like Chrome. Basically - introduce some more async into the test code so that the coreData.get promise is guaranteed to settle. Because in PhantomJS the promise is polyfilled, and Chrome it's native, they work slightly differently.
70 lines
1.7 KiB
JavaScript
70 lines
1.7 KiB
JavaScript
import { json as d3_json } from 'd3-fetch';
|
|
import { data as _data } from '../../data'; // prebundled data
|
|
|
|
|
|
//
|
|
// The coreData module fetches data from JSON files
|
|
//
|
|
export function coreData(context) {
|
|
let _module = {};
|
|
let _inflight = {};
|
|
let _fileMap = {
|
|
'address_formats': 'data/address_formats.min.json',
|
|
'deprecated': 'data/deprecated.min.json',
|
|
'discarded': 'data/discarded.min.json',
|
|
'imagery': 'data/imagery.min.json',
|
|
'intro_graph': 'data/intro_graph.min.json',
|
|
'languages': 'data/languages.min.json',
|
|
'locales': 'data/locales.min.json',
|
|
'phone_formats': 'data/phone_formats.min.json',
|
|
'shortcuts': 'data/shortcuts.min.json',
|
|
'territory_languages': 'data/territory_languages.min.json',
|
|
'wikipedia': 'data/wikipedia.min.json'
|
|
};
|
|
|
|
|
|
// Returns a Promise to fetch data
|
|
// (resolved with the data if we have it already)
|
|
_module.get = (which) => {
|
|
if (_data[which]) {
|
|
return Promise.resolve(_data[which]);
|
|
}
|
|
|
|
const file = _fileMap[which];
|
|
const url = file && context.asset(file);
|
|
if (!url) {
|
|
return Promise.reject(`Unknown data file for "${which}"`);
|
|
}
|
|
|
|
let prom = _inflight[url];
|
|
if (!prom) {
|
|
_inflight[url] = prom = d3_json(url)
|
|
.then(result => {
|
|
delete _inflight[url];
|
|
if (!result) {
|
|
throw new Error(`No data loaded for "${which}"`);
|
|
}
|
|
_data[which] = result;
|
|
return result;
|
|
})
|
|
.catch(err => {
|
|
delete _inflight[url];
|
|
throw err;
|
|
});
|
|
}
|
|
|
|
return prom;
|
|
};
|
|
|
|
|
|
// Accessor for the file map
|
|
_module.fileMap = function(val) {
|
|
if (!arguments.length) return _fileMap;
|
|
_fileMap = val;
|
|
return _module;
|
|
};
|
|
|
|
|
|
return _module;
|
|
}
|