관리-도구
편집 파일: jTimeout.min.js
/* jTimeout v3.2.0 Made with love by HTMLGuy, LLC MIT Licensed */ !function(n){n.jTimeout=function(t){if(void 0!==window.jTimeout)return window.jTimeout;var o={timedOut:!1,timeoutWarning:!1,interval:!1,mouseTimeout:!1,options:t=n.extend({},n.jTimeout.defaults,t),get:function(t){return window.localStorage.getItem(t)},set:function(t,o){return window.localStorage.setItem(t,o)},getExpiration:function(){return this.get(this.options.expiration_key)},setExpiration:function(t){var o=new Date;return o.setSeconds(o.getSeconds()+t),this.set(this.options.expiration_key,o)},resetExpiration:function(){return this.setExpiration(this.options.timeoutAfter),this},getSecondsTillExpiration:function(){var t=Math.round((new Date(this.getExpiration()).getTime()-(new Date).getTime())/1e3);return t<=0?0:t},stopPriorCountdown:function(){o.priorCountDown&&(o.priorCountDown=!1)},resetOnAlert:function(){return o.options.triggerResetOnAlert?0===n("#jTimedoutAlert").length&&o.options.triggerResetOnAlert:0===n("#jTimeoutAlert").length&&0===n("#jTimedoutAlert").length},stopFlashing:function(){o.options.flashTitle&&(o.flashingTitle&&window.clearInterval(o.flashingTitle),o.flashingTitle=!1,document.title=o.options.originalTitle)},startFlashing:function(){!o.flashingTitle&&o.options.flashTitle&&(o.flashingTitle=window.setInterval(function(){document.title===o.options.flashingTitleText?document.title=o.options.originalTitle:document.title=o.options.flashingTitleText},o.options.flashTitleSpeed))},startPriorCountdown:function(t){o.priorCountDown=t},hideCountdownAlert:function(){o.timeoutWarning=!1;var t=n("#jTimeoutAlert");0<t.length&&t.closeAlert()},setMouseTimeout:function(t){this.mouseTimeout=t},stopMouseTimeout:function(){this.mouseTimeout&&window.clearTimeout(this.mouseTimeout)},stopActivityMonitoring:function(){o.stopMouseTimeout()},startActivityMonitoring:function(){o.stopActivityMonitoring(),o.options.extendOnMouseMove&&(e=1e3*o.options.mouseDebounce,o.mouseMoved=!1,o.setMouseTimeout(window.setTimeout(function(){n("body").on("mousemove.jTimeout",function(){!o.mouseMoved&&o.resetOnAlert()&&(o.mouseMoved=!0,o.setMouseTimeout(window.setTimeout(function(){o.mouseMoved=!1},e)),o.options.onMouseMove(o))})},e)))},setCountdown:function(t){this.interval=t},countdown:function(){o.getExpiration();var t=o.getSecondsTillExpiration();o.priorCountDown&&o.priorCountDown.text(t),t<=0&&!o.timedOut?(o.timeoutWarning=!0,o.timedOut=!0,o.options.onTimeout(o),o.stopActivityMonitoring()):0<t&&o.timedOut?(o.timeoutWarning=!1,o.timedOut=!1,o.options.onSessionExtended(o),o.startActivityMonitoring()):t<o.options.secondsPrior&&!o.timeoutWarning?(o.timeoutWarning=!0,o.startFlashing(),o.options.onPriorCallback(o,t)):t>=o.options.secondsPrior&&o.timeoutWarning&&(o.stopFlashing(),o.stopPriorCountdown(),o.hideCountdownAlert())},destroy:function(){o.stopFlashing(),o.stopActivityMonitoring(),delete o.options.onSessionExtended,delete o.countdown,n("body").off("mousemove.jTimeout")}};o.resetExpiration();var e=1e3*o.options.heartbeat;return o.setCountdown(window.setInterval(o.countdown,e)),o.startActivityMonitoring(),window.jTimeout=o},n.jTimeout.reset=function(t){var o=void 0===t?n.jTimeout.defaults.timeoutAfter:t;n.jTimeout().setExpiration(o)},n.jTimeout.defaults={expiration_key:"jtimeout-session-expiration",flashTitle:!0,flashTitleSpeed:500,flashingTitleText:"**WARNING**",originalTitle:document.title,timeoutAfter:1440,heartbeat:1,extendOnMouseMove:!0,mouseDebounce:30,onMouseMove:function(t){n.get({url:t.options.extendUrl,cache:!1,success:function(){t.resetExpiration()}})},extendUrl:"/dashboard",logoutUrl:"/logout",loginUrl:"/login",secondsPrior:60,triggerResetOnAlert:!1,onPriorCallback:function(e,t){n.jAlert({id:"jTimeoutAlert",title:"Oh No!",content:'<b>Your session will timeout in <span class="jTimeout_Countdown">'+t+"</span> seconds!</b>",theme:"red",closeBtn:!1,onOpen:function(t){e.startPriorCountdown(t.find(".jTimeout_Countdown"))},btns:[{text:"Extend my Session",theme:"blue",onClick:function(t,o){return t.preventDefault(),e.options.onClickExtend(e),o.parents(".jAlert").closeAlert(),!1}},{text:"Logout Now",onClick:function(t,o){return t.preventDefault(),window.location.href=e.options.logoutUrl,!1}}]})},onClickExtend:function(t){n.get({url:t.options.extendUrl,cache:!1}),t.resetExpiration()},onTimeout:function(t){n.jAlert({id:"jTimedoutAlert",title:"Oh No!",content:"<b>Your session has timed out.</b>",theme:"red",btns:{text:"Login Again",href:t.options.loginUrl,theme:"blue",closeAlert:!1},closeOnClick:!1,closeBtn:!1,closeOnEsc:!1}),n.get(t.options.logoutUrl)},onSessionExtended:function(t){n("#jTimedoutAlert").closeAlert()}}}(jQuery);