diff --git a/js/timeout-dialog.js b/js/timeout-dialog.js
index a77b342..da9ab01 100755
--- a/js/timeout-dialog.js
+++ b/js/timeout-dialog.js
@@ -1,7 +1,8 @@
/*
- * timeout-dialog.js v1.0.1, 01-03-2012
+ * timeout-dialog.js v1.0.2, 01-03-2012
*
* @author: Rodrigo Neri (@rigoneri)
+ * @contributor: Jason Ogaard (@jasonogaard)
*
* (The MIT License)
*
@@ -24,7 +25,6 @@
* THE SOFTWARE.
*/
-
/* String formatting, you might want to remove this if you already use it.
* Example:
*
@@ -32,149 +32,179 @@
* alert('Hello {0}'.format(location));
*/
String.prototype.format = function() {
- var s = this,
- i = arguments.length;
+ var s = this, i = arguments.length;
- while (i--) {
- s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i]);
- }
- return s;
+ while (i--) {
+ s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i]);
+ }
+ return s;
};
!function($) {
- $.timeoutDialog = function(options) {
-
- var settings = {
- timeout: 1200,
- countdown: 60,
- title : 'Your session is about to expire!',
- message : 'You will be logged out in {0} seconds.',
- question: 'Do you want to stay signed in?',
- keep_alive_button_text: 'Yes, Keep me signed in',
- sign_out_button_text: 'No, Sign me out',
- keep_alive_url: '/keep-alive',
- logout_url: null,
- logout_redirect_url: '/',
- restart_on_yes: true,
- dialog_width: 350
- }
-
- $.extend(settings, options);
-
- var TimeoutDialog = {
- init: function () {
- this.setupDialogTimer();
- },
-
- setupDialogTimer: function() {
- var self = this;
- window.setTimeout(function() {
- self.setupDialog();
- }, (settings.timeout - settings.countdown) * 1000);
- },
-
- setupDialog: function() {
- var self = this;
- self.destroyDialog();
-
- $('
' +
- '
' + settings.message.format('' + settings.countdown + '') + '
' +
- '
' + settings.question + '
' +
- '
')
- .appendTo('body')
- .dialog({
- modal: true,
- width: settings.dialog_width,
- minHeight: 'auto',
- zIndex: 10000,
- closeOnEscape: false,
- draggable: false,
- resizable: false,
- dialogClass: 'timeout-dialog',
- title: settings.title,
- buttons : {
- 'keep-alive-button' : {
- text: settings.keep_alive_button_text,
- id: "timeout-keep-signin-btn",
- click: function() {
- self.keepAlive();
- }
- },
- 'sign-out-button' : {
- text: settings.sign_out_button_text,
- id: "timeout-sign-out-button",
- click: function() {
- self.signOut(true);
- }
- }
- }
- });
-
- self.startCountdown();
- },
-
- destroyDialog: function() {
- if ($("#timeout-dialog").length) {
- $(this).dialog("close");
- $('#timeout-dialog').remove();
- }
- },
-
- startCountdown: function() {
- var self = this,
- counter = settings.countdown;
-
- this.countdown = window.setInterval(function() {
- counter -= 1;
- $("#timeout-countdown").html(counter);
-
- if (counter <= 0) {
- window.clearInterval(self.countdown);
- self.signOut(false);
- }
-
- }, 1000);
- },
-
- keepAlive: function() {
- var self = this;
- this.destroyDialog();
- window.clearInterval(this.countdown);
-
- $.get(settings.keep_alive_url, function(data) {
- if (data == "OK") {
- if (settings.restart_on_yes) {
- self.setupDialogTimer();
- }
- }
- else {
- self.signOut(false);
- }
- });
- },
-
- signOut: function(is_forced) {
- var self = this;
- this.destroyDialog();
-
- if (settings.logout_url != null) {
- $.post(settings.logout_url, function(data){
- self.redirectLogout(is_forced);
- });
- }
- else {
- self.redirectLogout(is_forced);
- }
- },
-
- redirectLogout: function(is_forced){
- var target = settings.logout_redirect_url + '?next=' + encodeURIComponent(window.location.pathname + window.location.search);
- if (!is_forced)
- target += '&timeout=t';
- window.location = target;
- }
- };
-
- TimeoutDialog.init();
- };
-}(window.jQuery);
\ No newline at end of file
+ $.timeoutDialog = function(options) {
+
+ var settings = {
+ timeout : 1200,
+ countdown : 60,
+ title : 'Your session is about to expire!',
+ message : 'You will be logged out in {0} ',
+ question : 'Do you want to stay signed in?',
+ keep_alive_button_text : 'Yes, Keep me signed in',
+ sign_out_button_text : 'No, Sign me out',
+ keep_alive_url : '/keep-alive',
+ logout_url : null,
+ logout_redirect_url : '/',
+ restart_on_yes : true,
+ dialog_width : 350,
+ display_minutes_and_seconds : false
+ }
+
+ $.extend(settings, options);
+
+ var TimeoutDialog = {
+ init : function() {
+ this.setupDialogTimer();
+ },
+
+ setupDialogTimer : function() {
+ var self = this;
+ window.setTimeout(function() {
+ self.setupDialog();
+ }, (settings.timeout - settings.countdown) * 1000);
+ },
+
+ setupDialog : function() {
+ var self = this;
+ self.destroyDialog();
+
+ var initialTimeDisplay = settings.countdown;
+ if(settings.display_minutes_and_seconds) {
+ seconds = settings.countdown%60;
+ if(seconds === 0) {
+ seconds = "00";
+ }
+ initialTimeDisplay = Math.floor(settings.countdown/60) + ":" + seconds;
+ }
+
+ $(
+ ''
+ + '
'
+ + settings.message
+ .format(''
+ + initialTimeDisplay
+ + '') + '
'
+ + '
'
+ + settings.question + '
' + '
')
+ .appendTo('body').dialog({
+ modal : true,
+ width : settings.dialog_width,
+ minHeight : 'auto',
+ zIndex : 10000,
+ closeOnEscape : false,
+ draggable : false,
+ resizable : false,
+ dialogClass : 'timeout-dialog',
+ title : settings.title,
+ buttons : {
+ 'keep-alive-button' : {
+ text : settings.keep_alive_button_text,
+ id : "timeout-keep-signin-btn",
+ click : function() {
+ self.keepAlive();
+ }
+ },
+ 'sign-out-button' : {
+ text : settings.sign_out_button_text,
+ id : "timeout-sign-out-button",
+ click : function() {
+ self.signOut(true);
+ }
+ }
+ }
+ });
+
+ self.startCountdown();
+ },
+
+ minutes : function() {
+ Math.floor(settings.countdown/60);
+ },
+
+ destroyDialog : function() {
+ if ($("#timeout-dialog").length) {
+ $("#timeout-dialog").dialog("close");
+ $('#timeout-dialog').remove();
+ }
+ },
+
+ startCountdown : function() {
+ var self = this,
+ counter = settings.countdown;
+
+ this.countdown = window.setInterval(function() {
+ counter -= 1;
+
+ if(settings.display_minutes_and_seconds) {
+ displayMinutes = Math.floor(counter/60),
+ displaySeconds = counter%60;
+ if(displaySeconds < 10) {
+ displaySeconds = "0" + displaySeconds;
+ }
+ $("#timeout-countdown").html(displayMinutes + ":" + displaySeconds);
+ }
+ else {
+ $("#timeout-countdown").html(counter);
+ }
+
+
+ if (counter <= 0) {
+ window.clearInterval(self.countdown);
+ self.signOut(false);
+ }
+
+ }, 1000);
+ },
+
+ keepAlive : function() {
+ var self = this;
+ this.destroyDialog();
+ window.clearInterval(this.countdown);
+
+ $.get(settings.keep_alive_url, function(data) {
+ if (data == "OK") {
+ if (settings.restart_on_yes) {
+ self.setupDialogTimer();
+ }
+ } else {
+ self.signOut(false);
+ }
+ });
+ },
+
+ signOut : function(is_forced) {
+ var self = this;
+ this.destroyDialog();
+
+ if (settings.logout_url != null) {
+ $.post(settings.logout_url, function(data) {
+ self.redirectLogout(is_forced);
+ });
+ } else {
+ self.redirectLogout(is_forced);
+ }
+ },
+
+ redirectLogout : function(is_forced) {
+ var target = settings.logout_redirect_url
+ + '?next='
+ + encodeURIComponent(window.location.pathname
+ + window.location.search);
+ if (!is_forced)
+ target += '&timeout=t';
+ window.location = target;
+ }
+ };
+
+ TimeoutDialog.init();
+ };
+}(window.jQuery);