//###### //## This work is licensed under the Creative Commons Attribution-Share Alike 3.0 //## United States License. To view a copy of this license, //## visit http://creativecommons.org/licenses/by-sa/3.0/us/ or send a letter //## to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. //###### (function($){ $.fn.idleTimeout = function(options) { var defaults = { inactivity: 1200000, //20 Minutes noconfirm: 10000, //10 Seconds sessionAlive: 30000, //10 Minutes redirect_url: 'https://github.com/MarQuisKnox/Bootbox-Session-Timeout', click_reset: true, alive_url: 'https://github.com/MarQuisKnox/Bootbox-Session-Timeout', logout_url: 'https://github.com/MarQuisKnox/Bootbox-Session-Timeout', showDialog: true, dialogTitle: 'Auto Logout', dialogText: 'You are about to be signed out due to inactivity.', btnDialogStay: 'Stay Logged In', btnDialogGo: 'Logoff' } //############################## //## Private Variables //############################## var opts = $.extend(defaults, options); var liveTimeout, confTimeout, sessionTimeout; //############################## //## Private Functions //############################## var start_liveTimeout = function() { clearTimeout(liveTimeout); clearTimeout(confTimeout); liveTimeout = setTimeout(logout, opts.inactivity); if(opts.sessionAlive) { clearTimeout(sessionTimeout); sessionTimeout = setTimeout(keep_session, opts.sessionAlive); } } var logout = function() { var buttonsOpts = {}; confTimeout = setTimeout(redirect, opts.noconfirm); buttonsOpts[opts.btnDialogStay] = function() { stay_logged_in(); } if(opts.showDialog) { bootbox.dialog(opts.dialogText, [{ "label": opts.btnDialogStay, "class": "btn", "callback": function() { stay_logged_in(); } }, { "label": opts.btnDialogGo, "class": "btn-danger", "callback": function() { redirect(); } }]); } } var redirect = function() { if(opts.logout_url) { $.get(opts.logout_url); } window.location.href = opts.redirect_url; } var stay_logged_in = function(el) { start_liveTimeout(); if(opts.alive_url) { $.get(opts.alive_url); } } var keep_session = function() { $.get(opts.alive_url); clearTimeout(sessionTimeout); sessionTimeout = setTimeout(keep_session, opts.sessionAlive); } //############################### //Build & Return the instance of the item as a plugin // This is basically your construct. //############################### return this.each(function() { obj = $(this); start_liveTimeout(); if(opts.click_reset) { $(document).bind('click', start_liveTimeout); } if(opts.sessionAlive) { keep_session(); } }); }; })(jQuery);