diff --git a/src/main/resources/public/js/core.js b/src/main/resources/public/js/core.js new file mode 100644 index 0000000..6755ab7 --- /dev/null +++ b/src/main/resources/public/js/core.js @@ -0,0 +1,249 @@ +// from config.js +/* global urlVersions */ + +/* exported MessageTypesEnum */ +var MessageTypesEnum = { + INFO: "info", + SUCCESS: "success", + WARNING: "warning", + DANGER: "danger" +}; +Object.freeze(MessageTypesEnum); + +function isEmpty(value) { + if (typeof value === "function") { + return false; + } + return (value == null || value.length === 0); +} + +/* exported showFeedbackMessage */ +function showFeedbackMessage(message, type) { + var drawMessage = function (message, type) { + var li = $( + "
  • " + + "" + message + "" + + "
  • " + ); + li.click(function () { + $(this).remove(); + }); + messageDiv.append(li); + }; + + var liveTimeMs = 15000; + var messageDiv = $("#messages"); + if (isEmpty(message)) { + messageDiv.html(""); + return; + } + drawMessage(message, (isEmpty(type) || isEmpty(MessageTypesEnum[type.toUpperCase()]) ? + MessageTypesEnum.INFO : type)); + setTimeout(function () { + messageDiv.find("li").first().remove(); + }, liveTimeMs); +} + +/* exported errorHandler */ +function errorHandler(response, callBack, errorCallBack) { + if (isEmpty(response)) { + showFeedbackMessage("Empty response", MessageTypesEnum.DANGER); + return; + } + if (!isEmpty(response.error)) { + // TODO: add l10n + // showFeedbackMessage(response.error.code + ": " + response.error.message, MessageTypesEnum.DANGER); + if (!isEmpty(errorCallBack)) { + errorCallBack(response.data); + } + throw response.error.code + ": " + response.error.message + + " / Details: " + response.error.data; + } + if (!isEmpty(callBack)) { + if (isLoginPageResponse(response)) { + window.location.href = "/"; + } else { + callBack(response.data); + } + } +} + +function isLoginPageResponse(response) { + return (typeof response) === 'string' && response.indexOf("") >= 0; +} + +/* exported getFromRest */ +function getFromRest(url, callBack, errorCallBack) { + $.ajax({ + url: url, + cache: false, + success: function (response) { + errorHandler(response, callBack, errorCallBack); + } + }); +} + +/* exported getFromRestWithVersion */ +function getFromRestWithVersion(url, callBack, errorCallBack) { + getFromRestWithVersionAndParams(url, "", callBack, errorCallBack); +} + +/* exported getFromRestWithVersionAndParams */ +function getFromRestWithVersionAndParams(url, params, callBack, errorCallBack) { + getCurrentVersion(function (version) { + $.ajax({ + url: url + "?versionId=" + version + params, + cache: false, + success: function (response) { + errorHandler(response, callBack, errorCallBack); + } + }); + }); +} + +/* exported postToRest */ +function postToRest(url, postData, callBack, completeCallback, errorCallBack) { + $.ajax({ + url: url, + cache: false, + dataType: "json", + data: postData, + contentType: "application/json; charset=utf-8", + processData: false, + method: "POST", + success: function (response) { + errorHandler(response, callBack, errorCallBack); + }, + complete: function () { + if (isEmpty(completeCallback)) { + return; + } + completeCallback(); + } + }); +} + +/* exported postToRestWithVersion */ +function postToRestWithVersion(url, postData, callBack, errorCallBack) { + postToRestWithVersionAndParams(url, postData, "", callBack, errorCallBack); +} + +/* exported postToRestWithVersionAndParams */ +function postToRestWithVersionAndParams(url, postData, params, callBack, errorCallBack) { + getCurrentVersion(function (version) { + $.ajax({ + url: url + "?versionId=" + version + params, + cache: false, + dataType: "json", + data: postData, + contentType: "application/json; charset=utf-8", + processData: false, + method: "POST", + success: function (response) { + errorHandler(response, callBack, errorCallBack); + } + }); + }); +} + +/* exported putToRestWithVersion */ +function putToRestWithVersion(url, putData, callBack, errorCallBack) { + putToRestWithVersionAndParams(url, putData, "", callBack, errorCallBack); +} + +/* exported putToRestWithVersionAndParams */ +function putToRestWithVersionAndParams(url, putData, params, callBack, errorCallBack) { + getCurrentVersion(function (version) { + $.ajax({ + url: url + "?versionId=" + version + params, + cache: false, + dataType: "json", + data: putData, + contentType: "application/json; charset=utf-8", + processData: false, + method: "PUT", + success: function (response) { + errorHandler(response, callBack, errorCallBack); + } + }); + }); +} + +/* exported deleteFromRest */ +function deleteFromRest(url, callBack, completeCallback, errorCallBack) { + $.ajax({ + url: url, + cache: false, + method: "DELETE", + success: function (response) { + errorHandler(response, callBack, errorCallBack); + }, + complete: function () { + if (isEmpty(completeCallback)) { + return; + } + completeCallback(); + } + }); +} + +/* exported getCurrentVersion */ +function getCurrentVersion(callBack, errorCallBack) { + var version = localStorage.getItem("currentVersion"); + + if (($("#select-versions")[0].options.length > 0) + && ($("#select-versions option[value='" + version + "']").length === 0)) { + localStorage.removeItem("currentVersion"); + version = ""; + } + + if (isEmpty(version)) { + getFromRest(urlVersions, + function (versions) { + if (isEmpty(versions) || versions.count === 0) { + return; + } + var currentVersion = versions.items[0]; + localStorage.setItem("currentVersion", currentVersion.id); + callBack(currentVersion.id); + }, + errorCallBack); + } else { + callBack(version); + } +} + +/* exported fillSelect */ +function fillSelect(selectElement, values) { + $(selectElement).html(""); + $.each(values, function (key, value) { + $(selectElement).append( + "" + ); + }); +} + +/* exported isUrlVarExists */ +function isUrlVarExists(key) { + var URL = window.location.href; + if (URL.indexOf("?" + key + "=") !== -1) { + return true; + } else if (URL.indexOf("&" + key + "=") !== -1) { + return true; + } else if (URL.indexOf("?" + key + "&") !== -1) { + return true; + } else if (URL.indexOf("&" + key + "&") !== -1) { + return true; + } else if (URL.endsWith("?" + key)) { + return true; + } else if (URL.endsWith("&" + key)) { + return true; + } + return false; +} + +/* exported getUrlVar */ +function getUrlVar(key) { + var result = new RegExp(key + "=([^&]*)", "i").exec(window.location.search); + return result && decodeURIComponent(result[1]) || ""; +} diff --git a/src/main/resources/public/js/papers.js b/src/main/resources/public/js/papers.js new file mode 100644 index 0000000..f428ff3 --- /dev/null +++ b/src/main/resources/public/js/papers.js @@ -0,0 +1,17 @@ +var urlPaperList = "https://localhost:8443/api/1.0/papers"; + +function showPapers(papersElement) { + getFromRest(urlPaperList, function (paperList) { + paperList.forEach(function (paper, index) { + $(papersElement).parent().append("
    " + + "
    " + + " \n" + + " " + + " " + + " " + + " " + paper.title + "" + + "
    "); + }); + }); +} \ No newline at end of file diff --git a/src/main/resources/templates/papers.html b/src/main/resources/templates/papers.html index 107c479..013fbc7 100644 --- a/src/main/resources/templates/papers.html +++ b/src/main/resources/templates/papers.html @@ -7,56 +7,34 @@
    -
    -
    + - - - + + + - - + + - - - + + + - - + + + + +