255 lines
7.4 KiB
JavaScript
255 lines
7.4 KiB
JavaScript
// from config.js
|
|
/* global urlVersions */
|
|
|
|
var urlFileUpload = "/api/1.0/papers/uploadTmpFile";
|
|
|
|
/* 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 = $(
|
|
"<li class=\"alert alert-" + type + "\">" +
|
|
"<span>" + message + "</span>" +
|
|
"</li>"
|
|
);
|
|
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.error);
|
|
}
|
|
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("<!DOCTYPE html>") >= 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();
|
|
},
|
|
|
|
}).fail(function (response) {
|
|
errorHandler(response.responseJSON, callBack, errorCallBack);
|
|
});
|
|
}
|
|
|
|
/* 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(
|
|
"<option value=\"" + value.id + "\">" + value.name + "</option>"
|
|
);
|
|
});
|
|
}
|
|
|
|
/* 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]) || "";
|
|
}
|