59 lines
2 KiB
JavaScript
59 lines
2 KiB
JavaScript
|
const Uiharu = function(apiUrl) {
|
||
|
const maxBatchSize = 5;
|
||
|
const lookupOneUrl = apiUrl + '/metadata',
|
||
|
lookupManyUrl = apiUrl + '/metadata/batch';
|
||
|
|
||
|
const lookupManyInternal = function(targetUrls, callback) {
|
||
|
const formData = new FormData;
|
||
|
|
||
|
for(const url of targetUrls)
|
||
|
formData.append('url[]', url);
|
||
|
|
||
|
const xhr = new XMLHttpRequest;
|
||
|
xhr.addEventListener('load', function() {
|
||
|
callback(JSON.parse(xhr.responseText));
|
||
|
});
|
||
|
xhr.addEventListener('error', function(ev) {
|
||
|
callback({ status: xhr.status, error: 'xhr', details: ev });
|
||
|
});
|
||
|
xhr.open('POST', lookupManyUrl);
|
||
|
xhr.send(formData);
|
||
|
};
|
||
|
|
||
|
return {
|
||
|
lookupOne: function(targetUrl, callback) {
|
||
|
if(typeof callback !== 'function')
|
||
|
throw 'callback is missing';
|
||
|
targetUrl = (targetUrl || '').toString();
|
||
|
if(targetUrl.length < 1)
|
||
|
return;
|
||
|
|
||
|
const xhr = new XMLHttpRequest;
|
||
|
xhr.addEventListener('load', function() {
|
||
|
callback(JSON.parse(xhr.responseText));
|
||
|
});
|
||
|
xhr.addEventListener('error', function() {
|
||
|
callback({ status: xhr.status, error: 'xhr', details: ex });
|
||
|
});
|
||
|
xhr.open('POST', lookupOneUrl);
|
||
|
xhr.send(targetUrl);
|
||
|
},
|
||
|
lookupMany: function(targetUrls, callback) {
|
||
|
if(!Array.isArray(targetUrls))
|
||
|
throw 'targetUrls must be an array of urls';
|
||
|
if(typeof callback !== 'function')
|
||
|
throw 'callback is missing';
|
||
|
if(targetUrls < 1)
|
||
|
return;
|
||
|
|
||
|
if(targetUrls.length <= maxBatchSize) {
|
||
|
lookupManyInternal(targetUrls, callback);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
for(let i = 0; i < targetUrls.length; i += maxBatchSize)
|
||
|
lookupManyInternal(targetUrls.slice(i, i + maxBatchSize), callback);
|
||
|
},
|
||
|
};
|
||
|
};
|