IW4M-Admin/WebfrontCore/wwwroot/js/action.js

190 lines
5.9 KiB
JavaScript

function hideLoader() {
$('#mainLoadingBar').fadeOut();
$('.modal-loading-bar').fadeOut();
}
function showLoader() {
$('#mainLoadingBar').fadeIn();
$('.modal-loading-bar').fadeIn();
}
function errorLoader() {
$('#mainLoadingBar').addClass('bg-danger').delay(2000).fadeOut();
}
function staleLoader() {
$('#mainLoadingBar').addClass('bg-grey');
}
function getUrlParameter(sParam) {
let sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : decodeURIComponent(unescape(sParameterName[1]));
}
}
return false;
}
function clearQueryString() {
const uri = window.location.href.toString();
if (uri.indexOf("?") > 0) {
const cleanUri = uri.substring(0, uri.indexOf("?"));
window.history.replaceState({}, document.title, cleanUri);
}
}
const entityMap = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#39;',
'/': '&#x2F;',
'`': '&#x60;',
'=': '&#x3D;'
};
function escapeHtml (string) {
return String(string).replace(/[&<>"'`=\/]/g, function (s) {
return entityMap[s];
});
}
function buildToastUri(message, duration) {
let uri = '&';
if (window.location.href.toString().indexOf('?') <= 0) {
uri = '?';
}
uri += `toastMessage=${escape(message)}${duration ? `&duration=${duration}` : ''}`;
return uri;
}
$(document).ready(function () {
let toastMessage = getUrlParameter('toastMessage');
const duration = parseInt(getUrlParameter('duration'));
if (toastMessage) {
toastMessage = unescape(toastMessage);
}
if (toastMessage) {
clearQueryString();
halfmoon.initStickyAlert({
content: toastMessage,
title: _localization['WEBFRONT_SCRIPT_ACTION_SUCCESS'],
alertType: 'alert-success',
fillType: 'filled',
timeShown: duration
});
}
hideLoader();
$(document).off('click', '.profile-action');
$(document).on('click', '.profile-action', function (e) {
e.preventDefault();
const action = $(this).data('action');
const actionId = $(this).data('action-id');
const actionMeta = $(this).data('action-meta');
const responseDuration = $(this).data('response-duration') || 5000;
let actionKeys = actionId === undefined ? '' : `?id=${actionId}`;
if (actionMeta !== undefined) {
actionKeys = actionKeys + '&meta=' + JSON.stringify(actionMeta);
}
showLoader();
$.get(`/Action/${action}Form/${actionKeys}`)
.done(function (response) {
$('#actionModal .modal-message').fadeOut('fast')
$('#actionModal').attr('data-response-duration', responseDuration);
$('#actionModalContent').html(response);
hideLoader();
halfmoon.toggleModal('actionModal');
})
.fail(function (jqxhr, textStatus, error) {
halfmoon.initStickyAlert({
content: jqxhr.responseText,
title: _localization['WEBFRONT_SCRIPT_ACTION_ERROR'],
alertType: 'alert-danger',
fillType: 'filled'
});
});
});
/*
* handle action submit
*/
$(document).on('submit', '.action-form', function (e) {
e.preventDefault();
$(this).append($('#target_id input'));
const modal = $('#actionModal');
const shouldRefresh = modal.data('should-refresh', modal.find('.refreshable').length !== 0);
const data = $(this).serialize();
const duration = modal.data('response-duration');
showLoader();
$.get($(this).attr('action') + '/?' + data)
.done(function (response) {
hideLoader();
// success without content
if (response.length === 0) {
location.reload();
} else {
let message = response;
try {
message = response.map(r => escapeHtml(r.response));
}
catch{}
if (shouldRefresh) {
window.location = `${window.location.href.replace('#', '')}${buildToastUri(message, duration)}`;
}
else {
modal.modal();
halfmoon.initStickyAlert({
content: escapeHtml(message),
title: _localization['WEBFRONT_SCRIPT_ACTION_EXECUTED'],
alertType: 'alert-primary',
fillType: 'filled'
});
}
}
})
.fail(function (jqxhr) {
hideLoader();
let message = jqxhr.responseText;
try {
const jsonMessage = $.parseJSON(message);
if (jsonMessage) {
message = jsonMessage.map(r => escapeHtml(r.response));
}
}
catch{}
if (message instanceof Array)
{
message = message.join("<br/>");
}
halfmoon.initStickyAlert({
content: message,
title: _localization['WEBFRONT_SCRIPT_ACTION_ERROR'],
alertType: 'alert-danger',
fillType: 'filled'
});
});
});
});