diff --git a/editor/js/ui/palette-editor.js b/editor/js/ui/palette-editor.js index f93d007ce..6646c10b1 100644 --- a/editor/js/ui/palette-editor.js +++ b/editor/js/ui/palette-editor.js @@ -338,36 +338,45 @@ RED.palette.editor = (function() { var catalogueCount; var catalogueLoadStatus = []; var catalogueLoadStart; + var catalogueLoadErrors = false; var activeSort = sortModulesAZ; - function handleCatalogResponse(catalog,index,v) { - catalogueLoadStatus.push(v); - if (v.modules) { - v.modules.forEach(function(m) { - loadedIndex[m.id] = m; - m.index = [m.id]; - if (m.keywords) { - m.index = m.index.concat(m.keywords); - } - if (m.updated_at) { - m.timestamp = new Date(m.updated_at).getTime(); - } else { - m.timestamp = 0; - } - m.index = m.index.join(",").toLowerCase(); - }) - loadedList = loadedList.concat(v.modules); + function handleCatalogResponse(err,catalog,index,v) { + catalogueLoadStatus.push(err||v); + if (!err) { + if (v.modules) { + v.modules.forEach(function(m) { + loadedIndex[m.id] = m; + m.index = [m.id]; + if (m.keywords) { + m.index = m.index.concat(m.keywords); + } + if (m.updated_at) { + m.timestamp = new Date(m.updated_at).getTime(); + } else { + m.timestamp = 0; + } + m.index = m.index.join(",").toLowerCase(); + }) + loadedList = loadedList.concat(v.modules); + } + searchInput.searchBox('count',loadedList.length); + } else { + catalogueLoadErrors = true; } - searchInput.searchBox('count',loadedList.length); if (catalogueCount > 1) { $(".palette-module-shade-status").html(RED._('palette.editor.loading')+"
"+catalogueLoadStatus.length+"/"+catalogueCount); } if (catalogueLoadStatus.length === catalogueCount) { + if (catalogueLoadErrors) { + RED.notify(RED._('palette.editor.errors.catalogLoadFailed',{url: catalog}),"error",false,8000); + } var delta = 250-(Date.now() - catalogueLoadStart); setTimeout(function() { $("#palette-module-install-shade").hide(); },Math.max(delta,0)); + } } @@ -379,6 +388,7 @@ RED.palette.editor = (function() { $(".palette-module-shade-status").html(RED._('palette.editor.loading')); var catalogues = RED.settings.theme('palette.catalogues')||['https://catalogue.nodered.org/catalogue.json']; catalogueLoadStatus = []; + catalogueLoadErrors = false; catalogueCount = catalogues.length; if (catalogues.length > 1) { $(".palette-module-shade-status").html(RED._('palette.editor.loading')+"
0/"+catalogues.length); @@ -387,8 +397,10 @@ RED.palette.editor = (function() { catalogueLoadStart = Date.now(); catalogues.forEach(function(catalog,index) { $.getJSON(catalog, {_: new Date().getTime()},function(v) { - handleCatalogResponse(catalog,index,v); + handleCatalogResponse(null,catalog,index,v); refreshNodeModuleList(); + }).fail(function(jqxhr, textStatus, error) { + handleCatalogResponse(jqxhr,catalog,index); }) }); } diff --git a/red/api/locales/en-US/editor.json b/red/api/locales/en-US/editor.json index fdb737d07..0b855955c 100644 --- a/red/api/locales/en-US/editor.json +++ b/red/api/locales/en-US/editor.json @@ -292,6 +292,7 @@ "sortRecent": "recent", "more": "+ __count__ more", "errors": { + "catalogLoadFailed": "Failed to load node catalogue.
Check the browser console for more information", "installFailed": "Failed to install: __module__
__message__
Check the log for more information", "removeFailed": "Failed to remove: __module__
__message__
Check the log for more information" }