278 lines
7.2 KiB
JavaScript
278 lines
7.2 KiB
JavaScript
(function (window, document, $) {
|
|
'use strict';
|
|
|
|
if (window.SIGAlerts) {
|
|
return;
|
|
}
|
|
|
|
var queue = [];
|
|
var active = false;
|
|
var processScheduled = false;
|
|
|
|
function text(value) {
|
|
return value == null ? '' : String(value);
|
|
}
|
|
|
|
function encodedText(value) {
|
|
return $('<div />')
|
|
.text(text(value))
|
|
.html()
|
|
.replace(/\r?\n/g, '<br />');
|
|
}
|
|
|
|
function runScript(script) {
|
|
if (!script) {
|
|
return;
|
|
}
|
|
|
|
window.setTimeout(function () {
|
|
Function(text(script))();
|
|
}, 0);
|
|
}
|
|
|
|
function finishCurrent() {
|
|
if (!active) {
|
|
return;
|
|
}
|
|
|
|
active = false;
|
|
scheduleProcess();
|
|
}
|
|
|
|
function getModalSettings(type) {
|
|
switch (type) {
|
|
case 1:
|
|
return {
|
|
title: "<i class='fa fa-times-circle'></i> Error",
|
|
headerClass: 'header-red',
|
|
acceptClass: 'red'
|
|
};
|
|
case 3:
|
|
return {
|
|
title: "<i class='fa fa-check-square'></i> Confirmación",
|
|
headerClass: 'header-blue',
|
|
acceptClass: 'blue'
|
|
};
|
|
case 4:
|
|
return {
|
|
title: "<i class='fa fa-warning'></i> Advertencia",
|
|
headerClass: 'header-yellow',
|
|
acceptClass: 'yellow'
|
|
};
|
|
default:
|
|
return {
|
|
title: "<i class='fa fa-info-circle'></i> Información",
|
|
headerClass: 'header-green',
|
|
acceptClass: 'green'
|
|
};
|
|
}
|
|
}
|
|
|
|
function executeAccept(request) {
|
|
if (typeof request.acceptCallback === 'function') {
|
|
request.acceptCallback();
|
|
return;
|
|
}
|
|
|
|
runScript(request.acceptScript);
|
|
}
|
|
|
|
function showFallback(request) {
|
|
var confirmed = true;
|
|
|
|
if (request.type === 3 || request.type === 9) {
|
|
confirmed = window.confirm(text(request.message));
|
|
}
|
|
else {
|
|
window.alert(text(request.message));
|
|
}
|
|
|
|
if (confirmed) {
|
|
executeAccept(request);
|
|
}
|
|
|
|
finishCurrent();
|
|
}
|
|
|
|
function showToast(request) {
|
|
if (!window.toastr) {
|
|
showFallback(request);
|
|
return;
|
|
}
|
|
|
|
var timeoutMilliseconds = Math.max(0, request.timeout || 0) * 1000;
|
|
var options = {
|
|
closeButton: request.showCloseButton !== false,
|
|
debug: false,
|
|
positionClass: 'toast-top-right',
|
|
onclick: function () {
|
|
executeAccept(request);
|
|
},
|
|
onHidden: finishCurrent,
|
|
showDuration: 0,
|
|
hideDuration: 0,
|
|
timeOut: timeoutMilliseconds,
|
|
extendedTimeOut: 0,
|
|
showEasing: 'swing',
|
|
hideEasing: 'linear',
|
|
showMethod: 'fadeIn',
|
|
hideMethod: 'fadeOut'
|
|
};
|
|
|
|
switch (request.type) {
|
|
case 5:
|
|
toastr.success(text(request.message), '', options);
|
|
break;
|
|
case 7:
|
|
toastr.error(text(request.message), '', options);
|
|
break;
|
|
case 8:
|
|
toastr.warning(text(request.message), '', options);
|
|
break;
|
|
default:
|
|
toastr.info(text(request.message), '', options);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function buildButtons(request, settings) {
|
|
var buttons = {};
|
|
|
|
if (request.type === 3) {
|
|
buttons.cancel = {
|
|
label: encodedText(request.cancelText || 'Cancelar'),
|
|
className: 'red'
|
|
};
|
|
}
|
|
|
|
if (request.type === 9) {
|
|
buttons.second = {
|
|
label: encodedText(request.secondButtonText || 'Otra opción'),
|
|
className: 'blue',
|
|
callback: function () {
|
|
runScript(request.secondButtonScript);
|
|
}
|
|
};
|
|
}
|
|
|
|
buttons.accept = {
|
|
label: encodedText(request.acceptText || 'Aceptar'),
|
|
className: settings.acceptClass,
|
|
callback: function () {
|
|
executeAccept(request);
|
|
}
|
|
};
|
|
|
|
return buttons;
|
|
}
|
|
|
|
function showModal(request) {
|
|
if (!window.bootbox || typeof bootbox.dialog !== 'function') {
|
|
showFallback(request);
|
|
return;
|
|
}
|
|
|
|
var settings = getModalSettings(request.type);
|
|
var dialog = bootbox.dialog({
|
|
message: text(request.message),//request.allowHtml === true ? text(request.message) : encodedText(request.message),
|
|
title: settings.title,
|
|
className: settings.headerClass,
|
|
backdrop: request.showCloseButton === false ? 'static' : true,
|
|
keyboard: request.showCloseButton !== false,
|
|
closeButton: request.showCloseButton !== false,
|
|
buttons: buildButtons(request, settings)
|
|
});
|
|
|
|
dialog.css('z-index', 1060);
|
|
$('.modal-backdrop').last().css('z-index', 1055);
|
|
dialog.one('hidden.bs.modal.sigAlerts', function () {
|
|
if ($('.modal.in').length > 0) {
|
|
$('body').addClass('modal-open');
|
|
}
|
|
|
|
finishCurrent();
|
|
});
|
|
}
|
|
|
|
function showRequest(request) {
|
|
active = true;
|
|
|
|
if (request.type >= 5 && request.type <= 8) {
|
|
showToast(request);
|
|
return;
|
|
}
|
|
|
|
showModal(request);
|
|
}
|
|
|
|
function processQueue() {
|
|
processScheduled = false;
|
|
|
|
if (active || queue.length === 0) {
|
|
return;
|
|
}
|
|
|
|
showRequest(queue.shift());
|
|
}
|
|
|
|
function scheduleProcess() {
|
|
if (processScheduled) {
|
|
return;
|
|
}
|
|
|
|
processScheduled = true;
|
|
window.setTimeout(processQueue, 0);
|
|
}
|
|
|
|
function enqueue(request) {
|
|
if (!request) {
|
|
return;
|
|
}
|
|
|
|
queue.push(request);
|
|
scheduleProcess();
|
|
}
|
|
|
|
function processPending() {
|
|
var pending = window.SIG_PENDING_ALERTS || [];
|
|
window.SIG_PENDING_ALERTS = [];
|
|
|
|
for (var index = 0; index < pending.length; index++) {
|
|
enqueue(pending[index]);
|
|
}
|
|
}
|
|
|
|
function confirmPostBack(element, message) {
|
|
if (!element) {
|
|
return false;
|
|
}
|
|
|
|
if (element.getAttribute('data-sig-alert-confirmed') === '1') {
|
|
element.removeAttribute('data-sig-alert-confirmed');
|
|
return true;
|
|
}
|
|
|
|
enqueue({
|
|
type: 3,
|
|
message: message,
|
|
showCloseButton: true,
|
|
acceptText: 'Aceptar',
|
|
cancelText: 'Cancelar',
|
|
acceptCallback: function () {
|
|
element.setAttribute('data-sig-alert-confirmed', '1');
|
|
element.click();
|
|
}
|
|
});
|
|
|
|
return false;
|
|
}
|
|
|
|
window.SIGAlerts = {
|
|
enqueue: enqueue,
|
|
processPending: processPending,
|
|
confirmPostBack: confirmPostBack
|
|
};
|
|
|
|
processPending();
|
|
}(window, document, window.jQuery));
|