mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 01:02:58 +00:00
120 lines
3.4 KiB
JavaScript
120 lines
3.4 KiB
JavaScript
import { json as d3_json } from 'd3-fetch';
|
|
|
|
import { utilQsString } from '../util';
|
|
|
|
|
|
var endpoint = 'https://en.wikipedia.org/w/api.php?';
|
|
|
|
export default {
|
|
|
|
init: function() {},
|
|
reset: function() {},
|
|
|
|
|
|
search: function(lang, query, callback) {
|
|
if (!query) {
|
|
if (callback) callback('No Query', []);
|
|
return;
|
|
}
|
|
|
|
lang = lang || 'en';
|
|
var url = endpoint.replace('en', lang) +
|
|
utilQsString({
|
|
action: 'query',
|
|
list: 'search',
|
|
srlimit: '10',
|
|
srinfo: 'suggestion',
|
|
format: 'json',
|
|
origin: '*',
|
|
srsearch: query
|
|
});
|
|
|
|
d3_json(url)
|
|
.then(function(result) {
|
|
if (result && result.error) {
|
|
throw new Error(result.error);
|
|
} else if (!result || !result.query || !result.query.search) {
|
|
throw new Error('No Results');
|
|
}
|
|
if (callback) {
|
|
var titles = result.query.search.map(function(d) { return d.title; });
|
|
callback(null, titles);
|
|
}
|
|
})
|
|
.catch(function(err) {
|
|
if (callback) callback(err, []);
|
|
});
|
|
},
|
|
|
|
|
|
suggestions: function(lang, query, callback) {
|
|
if (!query) {
|
|
if (callback) callback('', []);
|
|
return;
|
|
}
|
|
|
|
lang = lang || 'en';
|
|
var url = endpoint.replace('en', lang) +
|
|
utilQsString({
|
|
action: 'opensearch',
|
|
namespace: 0,
|
|
suggest: '',
|
|
format: 'json',
|
|
origin: '*',
|
|
search: query
|
|
});
|
|
|
|
d3_json(url)
|
|
.then(function(result) {
|
|
if (result && result.error) {
|
|
throw new Error(result.error);
|
|
} else if (!result || result.length < 2) {
|
|
throw new Error('No Results');
|
|
}
|
|
if (callback) callback(null, result[1] || []);
|
|
})
|
|
.catch(function(err) {
|
|
if (callback) callback(err.message, []);
|
|
});
|
|
},
|
|
|
|
|
|
translations: function(lang, title, callback) {
|
|
if (!title) {
|
|
if (callback) callback('No Title');
|
|
return;
|
|
}
|
|
|
|
var url = endpoint.replace('en', lang) +
|
|
utilQsString({
|
|
action: 'query',
|
|
prop: 'langlinks',
|
|
format: 'json',
|
|
origin: '*',
|
|
lllimit: 500,
|
|
titles: title
|
|
});
|
|
|
|
d3_json(url)
|
|
.then(function(result) {
|
|
if (result && result.error) {
|
|
throw new Error(result.error);
|
|
} else if (!result || !result.query || !result.query.pages) {
|
|
throw new Error('No Results');
|
|
}
|
|
if (callback) {
|
|
var list = result.query.pages[Object.keys(result.query.pages)[0]];
|
|
var translations = {};
|
|
if (list && list.langlinks) {
|
|
list.langlinks.forEach(function(d) { translations[d.lang] = d['*']; });
|
|
}
|
|
callback(null, translations);
|
|
}
|
|
})
|
|
.catch(function(err) {
|
|
if (callback) callback(err.message);
|
|
});
|
|
}
|
|
|
|
};
|