diff --git a/src/js/Aladin.js b/src/js/Aladin.js index 702139a3..daf42059 100644 --- a/src/js/Aladin.js +++ b/src/js/Aladin.js @@ -1871,7 +1871,7 @@ A.MOCFromJSON = function (jsonMOC, options) { // TODO: try first without proxy, and then with, if param useProxy not set // API -A.catalogFromURL = function (url, options, successCallback, useProxy) { +A.catalogFromURL = function (url, options, successCallback, errorCallback, useProxy) { var catalog = A.catalog(options); Catalog.parseVOTable( url, @@ -1896,6 +1896,7 @@ A.catalogFromURL = function (url, options, successCallback, useProxy) { successCallback(sources); } }, + errorCallback, catalog.maxNbSources, useProxy, catalog.raField, catalog.decField @@ -1906,17 +1907,17 @@ A.catalogFromURL = function (url, options, successCallback, useProxy) { // API // @param target: can be either a string representing a position or an object name, or can be an object with keys 'ra' and 'dec' (values being in decimal degrees) -A.catalogFromSimbad = function (target, radius, options, successCallback) { +A.catalogFromSimbad = function (target, radius, options, successCallback, errorCallback) { options = options || {}; if (!('name' in options)) { options['name'] = 'Simbad'; } var url = URLBuilder.buildSimbadCSURL(target, radius); - return A.catalogFromURL(url, options, successCallback, false); + return A.catalogFromURL(url, options, successCallback, errorCallback, false); }; // API -A.catalogFromNED = function (target, radius, options, successCallback) { +A.catalogFromNED = function (target, radius, options, successCallback, errorCallback) { options = options || {}; if (!('name' in options)) { options['name'] = 'NED'; @@ -1939,29 +1940,29 @@ A.catalogFromNED = function (target, radius, options, successCallback) { } } - return A.catalogFromURL(url, options, successCallback); + return A.catalogFromURL(url, options, successCallback, errorCallback, true); }; // API -A.catalogFromVizieR = function (vizCatId, target, radius, options, successCallback) { +A.catalogFromVizieR = function (vizCatId, target, radius, options, successCallback, errorCallback) { options = options || {}; if (!('name' in options)) { options['name'] = 'VizieR:' + vizCatId; } var url = URLBuilder.buildVizieRCSURL(vizCatId, target, radius, options); - return A.catalogFromURL(url, options, successCallback, false); + return A.catalogFromURL(url, options, successCallback, errorCallback, false); }; // API -A.catalogFromSkyBot = function (ra, dec, radius, epoch, queryOptions, options, successCallback) { +A.catalogFromSkyBot = function (ra, dec, radius, epoch, queryOptions, options, successCallback, errorCallback) { queryOptions = queryOptions || {}; options = options || {}; if (!('name' in options)) { options['name'] = 'SkyBot'; } var url = URLBuilder.buildSkyBotCSURL(ra, dec, radius, epoch, queryOptions); - return A.catalogFromURL(url, options, successCallback, false); + return A.catalogFromURL(url, options, successCallback, errorCallback, false); }; A.hipsDefinitionFromURL = function(url, successCallback) { diff --git a/src/js/Catalog.js b/src/js/Catalog.js index cf933a11..67bb0bcb 100644 --- a/src/js/Catalog.js +++ b/src/js/Catalog.js @@ -300,10 +300,10 @@ export let Catalog = (function() { // return an array of Source(s) from a VOTable url // callback function is called each time a TABLE element has been parsed - Catalog.parseVOTable = function(url, callback, maxNbSources, useProxy, raField, decField) { + Catalog.parseVOTable = function(url, successCallback, errorCallback, maxNbSources, useProxy, raField, decField) { VOTable.parse( url, - (fields, rows, type) => { + (fields, rows) => { let sources = []; let footprints = []; @@ -350,10 +350,12 @@ export let Catalog = (function() { return true; }) - if (callback) { - callback(sources, footprints, fields); + if (successCallback) { + successCallback(sources, footprints, fields); } }, + errorCallback, + useProxy, raField, decField ) diff --git a/src/js/vo/VOTable.js b/src/js/vo/VOTable.js index 14f12bb5..d417cb7b 100644 --- a/src/js/vo/VOTable.js +++ b/src/js/vo/VOTable.js @@ -32,19 +32,23 @@ import { Utils } from "./../Utils.js"; export let VOTable = (function() { - function VOTable(url, callback) { + function VOTable(url, successCallback, errorCallback) { fetch(url) .then((response) => response.text()) .then((xml) => { ALEvent.AL_USE_WASM.dispatchedTo(document.body, {callback: (wasm) => { let votable = wasm.parseVOTable(xml); - callback(votable); + + successCallback(votable); }}); }) + .catch((e) => errorCallback(e)) }; - VOTable.parse = function (url, callback, raField, decField) { - url = Utils.handleCORSNotSameOrigin(url); + VOTable.parse = function (url, successCallback, errorCallback, useProxy, raField, decField) { + if(useProxy) { + url = Utils.handleCORSNotSameOrigin(url); + } fetch(url) .then((response) => response.text()) @@ -79,7 +83,7 @@ export let VOTable = (function() { let rows = data.get("rows"); if (rows) { - callback(fields, rows) + successCallback(fields, rows) } } }) @@ -88,6 +92,13 @@ export let VOTable = (function() { } }) }) + .catch((e) => { + if (errorCallback) { + errorCallback(e); + } else { + throw e; + } + }) }; // return an array of Source(s) from a VOTable url