tiseza_oss_live/Content/assets/js/components/session-timeout/bootstrap-session-timeout.js

88 lines
5.3 KiB
JavaScript
Raw Normal View History

2025-11-15 11:14:31 +00:00
! function(a) {
"use strict";
a.sessionTimeout = function(b) {
function c() {
n || (a.ajax({
type: i.ajaxType,
url: i.keepAliveUrl,
data: i.ajaxData
}), n = !0, setTimeout(function() {
n = !1
}, i.keepAliveInterval))
}
function d() {
clearTimeout(g), (i.countdownMessage || i.countdownBar) && f("session", !0), "function" == typeof i.onStart && i.onStart(i), i.keepAlive && c(), g = setTimeout(function() {
"function" != typeof i.onWarn ? a("#session-timeout-dialog").modal("show") : i.onWarn(i), e()
}, i.warnAfter)
}
function e() {
clearTimeout(g), a("#session-timeout-dialog").hasClass("in") || !i.countdownMessage && !i.countdownBar || f("dialog", !0), g = setTimeout(function() {
"function" != typeof i.onRedir ? window.location = i.redirUrl : i.onRedir(i)
}, i.redirAfter - i.warnAfter)
}
function f(b, c) {
clearTimeout(j.timer), "dialog" === b && c ? j.timeLeft = Math.floor((i.redirAfter - i.warnAfter) / 1e3) : "session" === b && c && (j.timeLeft = Math.floor(i.redirAfter / 1e3)), i.countdownBar && "dialog" === b ? j.percentLeft = Math.floor(j.timeLeft / ((i.redirAfter - i.warnAfter) / 1e3) * 100) : i.countdownBar && "session" === b && (j.percentLeft = Math.floor(j.timeLeft / (i.redirAfter / 1e3) * 100));
var d = a(".countdown-holder"),
e = j.timeLeft >= 0 ? j.timeLeft : 0;
if (i.countdownSmart) {
var g = Math.floor(e / 60),
h = e % 60,
k = g > 0 ? g + "m" : "";
k.length > 0 && (k += " "), k += h + "s", d.text(k)
} else d.text(e + "s");
i.countdownBar && a(".countdown-bar").css("width", j.percentLeft + "%"), j.timeLeft = j.timeLeft - 1, j.timer = setTimeout(function() {
f(b)
}, 1e3)
}
var g, h = {
title: "Your Session is About to Expire!",
message: "Your session is about to expire.",
logoutButton: "Logout",
keepAliveButton: "Stay",
keepAliveUrl: "/keep-alive",
ajaxType: "POST",
ajaxData: "",
redirUrl: "/timed-out",
logoutUrl: "/log-out",
warnAfter: 9e5,
redirAfter: 12e5,
keepAliveInterval: 5e3,
keepAlive: !0,
ignoreUserActivity: !1,
onStart: !1,
onWarn: !1,
onRedir: !1,
countdownMessage: !1,
countdownBar: !1,
countdownSmart: !1
},
i = h,
j = {};
if (b && (i = a.extend(h, b)), i.warnAfter >= i.redirAfter) return console.error('Bootstrap-session-timeout plugin is miss-configured. Option "redirAfter" must be equal or greater than "warnAfter".'), !1;
if ("function" != typeof i.onWarn) {
var k = i.countdownMessage ? "<p>" + i.countdownMessage.replace(/{timer}/g, '<span class="countdown-holder"></span>') + "</p>" : "",
l = i.countdownBar ? '<div class="progress mb-3 mt-4"> <div class="progress-bar bg-secondary countdown-bar active progress-bar-striped progress-bar-animated" role="progressbar" style="min-width: 15px; width: 100%;"> </div> </div>' : "";
a("body").append('<div class="modal fade" id="session-timeout-dialog"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-body"> <p>' + i.message + "</p> " + k + " " + l + ' </div> <div class="modal-footer justify-content-center"> <button id="session-timeout-dialog-logout" type="button" class="btn btn-dark mb-0 mt-0">' + i.logoutButton + '</button> <button id="session-timeout-dialog-keepalive" type="button" class="btn btn-primary mb-0 mt-0" data-dismiss="modal">' + i.keepAliveButton + "</button> </div> </div> </div> </div>"), a("#session-timeout-dialog-logout").on("click", function() {
window.location = i.logoutUrl
}), a("#session-timeout-dialog").on("hide.bs.modal", function() {
d()
})
}
if (!i.ignoreUserActivity) {
var m = [-1, -1];
a(document).on("keyup mouseup mousemove touchend touchmove", function(b) {
if ("mousemove" === b.type) {
if (b.clientX === m[0] && b.clientY === m[1]) return;
m[0] = b.clientX, m[1] = b.clientY
}
d(), a("#session-timeout-dialog").length > 0 && a("#session-timeout-dialog").data("bs.modal") && a("#session-timeout-dialog").data("bs.modal").isShown && (a("#session-timeout-dialog").modal("hide"), a("body").removeClass("modal-open"), a("div.modal-backdrop").remove())
})
}
var n = !1;
d()
}
}(jQuery);