Add support for client-side session timeout warning
This commit is contained in:
		
							parent
							
								
									4ae70de339
								
							
						
					
					
						commit
						e3ec3be03b
					
				
					 4 changed files with 81 additions and 18 deletions
				
			
		|  | @ -69,28 +69,69 @@ function get_uuid(obj) { | |||
| 
 | ||||
| 
 | ||||
| /* | ||||
|  * get_dialog(id, callback) | ||||
|  * | ||||
|  * Returns a <DIV> element suitable for use as a jQuery dialog. | ||||
|  * | ||||
|  * ``id`` is used to construct a proper ID for the element and allows the | ||||
|  * dialog to be resused if possible. | ||||
|  * | ||||
|  * ``callback``, if specified, should be a callback function for the dialog. | ||||
|  * This function will be called whenever the dialog has been closed | ||||
|  * "successfully" (i.e. data submitted) by the user, and should accept a single | ||||
|  * ``data`` object which is the JSON response returned by the server. | ||||
|  * reference to existing timeout warning dialog, if any | ||||
|  */ | ||||
| var session_timeout_warning = null; | ||||
| 
 | ||||
| function get_dialog(id, callback) { | ||||
|     var dialog = $('#'+id+'-dialog'); | ||||
|     if (! dialog.length) { | ||||
|         dialog = $('<div class="dialog" id="'+id+'-dialog"></div>'); | ||||
| 
 | ||||
| /** | ||||
|  * Warn user of impending session timeout. | ||||
|  */ | ||||
| function timeout_warning() { | ||||
|     if (! session_timeout_warning) { | ||||
|         session_timeout_warning = $('<div id="session-timeout-warning">' + | ||||
|                                     'You will be logged out in <span class="seconds"></span> ' + | ||||
|                                     'seconds...</div>'); | ||||
|     } | ||||
|     if (callback) { | ||||
|         dialog.attr('callback', callback); | ||||
|     session_timeout_warning.find('.seconds').text('60'); | ||||
|     session_timeout_warning.dialog({ | ||||
|         title: "Session Timeout Warning", | ||||
|         modal: true, | ||||
|         buttons: { | ||||
|             "Stay Logged In": function() { | ||||
|                 session_timeout_warning.dialog('close'); | ||||
|                 $.get(noop_url, set_timeout_warning_timer); | ||||
|             }, | ||||
|             "Logout Now": function() { | ||||
|                 location.href = logout_url; | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
|     window.setTimeout(timeout_warning_update, 1000); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Decrement the 'seconds' counter for the current timeout warning | ||||
|  */ | ||||
| function timeout_warning_update() { | ||||
|     if (session_timeout_warning.is(':visible')) { | ||||
|         var span = session_timeout_warning.find('.seconds'); | ||||
|         var seconds = parseInt(span.text()) - 1; | ||||
|         if (seconds) { | ||||
|             span.text(seconds.toString()); | ||||
|             window.setTimeout(timeout_warning_update, 1000); | ||||
|         } else { | ||||
|             location.href = logout_url; | ||||
|         } | ||||
|     } | ||||
|     return dialog; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Warn user of impending session timeout. | ||||
|  */ | ||||
| function set_timeout_warning_timer() { | ||||
|     // TODO: are we calculating timer ok here?  (effective timeout - 60 seconds)
 | ||||
|     window.setTimeout(timeout_warning, session_timeout * 1000 - 60000); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* | ||||
|  * set initial timer for timeout warning, if applicable | ||||
|  */ | ||||
| if (session_timeout) { | ||||
|     set_timeout_warning_timer(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar