diff --git a/frontend-js/src/main/js/gui/Legend.js b/frontend-js/src/main/js/gui/Legend.js index ebcaa117926658712cd47d1cd7a9cf3c55597cb9..bbb0fdec575d008edac6260d553293d9ac504952 100644 --- a/frontend-js/src/main/js/gui/Legend.js +++ b/frontend-js/src/main/js/gui/Legend.js @@ -107,12 +107,38 @@ function createLegendSlide(file, index) { return result; } +function getValidLegendFiles(legendFiles) { + var result = []; + + var promises = []; + legendFiles.forEach(function (file) { + result.push(file); + var url = file.getValue(); + if (url.indexOf("http") !== 0 && "" !== url) { + url = ServerConnector.getServerBaseUrl() + url; + } + promises.push(ServerConnector.sendGetRequest(url).catch(function (error) { + var index = result.indexOf(file); + if (index > -1) { + result.splice(index, 1); + } + })); + }); + + return Promise.all(promises).then(function () { + return result; + }); +} + Legend.prototype.init = function () { + require('request').debug = true; var self = this; var element = self.getElement(); var menu = self.getControlElement(PanelControlElementType.LEGEND_INDICATORS_OL); var slides = self.getControlElement(PanelControlElementType.LEGEND_SLIDES_DIV); return ServerConnector.getConfigurationParam(ConfigurationType.LEGEND_FILES).then(function (legendFiles) { + return getValidLegendFiles(legendFiles); + }).then(function (legendFiles) { for (var i = 0; i < legendFiles.length; i++) { var legendFile = legendFiles[i]; menu.appendChild(createLegendIndicator(legendFile, i)); @@ -120,6 +146,7 @@ Legend.prototype.init = function () { } $(element).carousel(); }); + }; module.exports = Legend; diff --git a/frontend-js/src/test/js/gui/Legend-test.js b/frontend-js/src/test/js/gui/Legend-test.js index bd494e7b6b4023d9a5d261bd5862f7bd96f6456c..965085694c2a272b458dbb47bb7752b7fbf79324 100644 --- a/frontend-js/src/test/js/gui/Legend-test.js +++ b/frontend-js/src/test/js/gui/Legend-test.js @@ -3,6 +3,7 @@ require("../mocha-config.js"); var Legend = require('../../../main/js/gui/Legend'); +var ConfigurationType = require('../../../main/js/ConfigurationType'); var chai = require('chai'); var assert = chai.assert; @@ -22,15 +23,42 @@ describe('Legend', function () { }); - it('init', function () { - var map = helper.createCustomMap(); + describe('init', function () { + it('default', function () { + var map = helper.createCustomMap(); - var legend = new Legend({ - element: testDiv, - customMap: map + var legend = new Legend({ + element: testDiv, + customMap: map + }); + + return legend.init().then(function () { + //there are no elements visible (all of them have urls that cannot be resolved) + assert.equal(0, $(".item", testDiv).length); + }); }); - return legend.init(); + it('existing file', function () { + var map = helper.createCustomMap(); + + var legend = new Legend({ + element: testDiv, + customMap: map + }); + + var originalUrl; + var files; + return ServerConnector.getConfigurationParam(ConfigurationType.LEGEND_FILES).then(function (legendFiles) { + files = legendFiles; + originalUrl = legendFiles[0].getValue(); + legendFiles[0].setValue("https://www.google.pl/"); + return legend.init(); + }).then(function () { + assert.equal(1, $(".item", testDiv).length); + }).finally(function () { + files[0].setValue(originalUrl); + }); + }); }); });