123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- /*
- * jQuery Idle Timeout 1.2
- * Copyright (c) 2011 Eric Hynds
- *
- * http://www.erichynds.com/jquery/a-new-and-improved-jquery-idle-timeout-plugin/
- *
- * Depends:
- * - jQuery 1.4.2+
- * - jQuery Idle Timer (by Paul Irish, http://paulirish.com/2009/jquery-idletimer-plugin/)
- *
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- *
- */
- (function($, win){
-
- var idleTimeout = {
- init: function( element, resume, options ){
- var self = this, elem;
- this.warning = elem = $(element);
- this.resume = $(resume);
- this.options = options;
- this.countdownOpen = false;
- this.failedRequests = options.failedRequests;
- this._startTimer();
- this.title = document.title;
-
- // expose obj to data cache so peeps can call internal methods
- $.data( elem[0], 'idletimeout', this );
-
- // start the idle timer
- $.idleTimer(options.idleAfter * 1000);
-
- // once the user becomes idle
- $(document).bind("idle.idleTimer", function(){
-
- // if the user is idle and a countdown isn't already running
- if( $.data(document, 'idleTimer') === 'idle' && !self.countdownOpen ){
- self._stopTimer();
- self.countdownOpen = true;
- self._idle();
- }
- });
-
- // bind continue link
- this.resume.bind("click", function(e){
- e.preventDefault();
-
- win.clearInterval(self.countdown); // stop the countdown
- self.countdownOpen = false; // stop countdown
- self._startTimer(); // start up the timer again
- self._keepAlive( false ); // ping server
- options.onResume.call( self.warning ); // call the resume callback
- });
- },
-
- _idle: function(){
- var self = this,
- options = this.options,
- warning = this.warning[0],
- counter = options.warningLength;
-
- // fire the onIdle function
- options.onIdle.call(warning);
-
- // set inital value in the countdown placeholder
- options.onCountdown.call(warning, counter);
-
- // create a timer that runs every second
- this.countdown = win.setInterval(function(){
- if(--counter === 0){
- window.clearInterval(self.countdown);
- options.onTimeout.call(warning);
- } else {
- options.onCountdown.call(warning, counter);
- document.title = options.titleMessage.replace('%s', counter) + self.title;
- }
- }, 1000);
- },
-
- _startTimer: function(){
- var self = this;
- this.timer = win.setTimeout(function(){
- self._keepAlive();
- }, this.options.pollingInterval * 1000);
- },
-
- _stopTimer: function(){
- // reset the failed requests counter
- this.failedRequests = this.options.failedRequests;
- win.clearTimeout(this.timer);
- },
-
- _keepAlive: function( recurse ){
- var self = this,
- options = this.options;
-
- //Reset the title to what it was.
- document.title = self.title;
-
- // assume a startTimer/keepAlive loop unless told otherwise
- if( typeof recurse === "undefined" ){
- recurse = true;
- }
-
- // if too many requests failed, abort
- if( !this.failedRequests ){
- this._stopTimer();
- options.onAbort.call( this.warning[0] );
- return;
- }
-
- $.ajax({
- timeout: options.AJAXTimeout,
- url: options.keepAliveURL,
- error: function(){
- self.failedRequests--;
- },
- success: function(response){
- if($.trim(response) !== options.serverResponseEquals){
- self.failedRequests--;
- }
- },
- complete: function(){
- if( recurse ){
- self._startTimer();
- }
- }
- });
- }
- };
-
- // expose
- $.idleTimeout = function(element, resume, options){
- idleTimeout.init( element, resume, $.extend($.idleTimeout.options, options) );
- return this;
- };
-
- // options
- $.idleTimeout.options = {
- // number of seconds after user is idle to show the warning
- warningLength: 30,
-
- // url to call to keep the session alive while the user is active
- keepAliveURL: "",
-
- // the response from keepAliveURL must equal this text:
- serverResponseEquals: "OK",
-
- // user is considered idle after this many seconds. 10 minutes default
- idleAfter: 600,
-
- // a polling request will be sent to the server every X seconds
- pollingInterval: 60,
-
- // number of failed polling requests until we abort this script
- failedRequests: 5,
-
- // the $.ajax timeout in MILLISECONDS!
- AJAXTimeout: 250,
-
- // %s will be replaced by the counter value
- titleMessage: 'Warning: %s seconds until log out | ',
-
- /*
- Callbacks
- "this" refers to the element found by the first selector passed to $.idleTimeout.
- */
- // callback to fire when the session times out
- onTimeout: $.noop,
-
- // fires when the user becomes idle
- onIdle: $.noop,
-
- // fires during each second of warningLength
- onCountdown: $.noop,
-
- // fires when the user resumes the session
- onResume: $.noop,
-
- // callback to fire when the script is aborted due to too many failed requests
- onAbort: $.noop
- };
-
- })(jQuery, window);
|