copy dari repo om Irfan
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
/*! Idle Timer - v0.9.2 - 2013-08-04
|
||||
* https://github.com/mikesherov/jquery-idletimer
|
||||
* Copyright (c) 2013 Paul Irish; Licensed MIT */
|
||||
( function( $ ) {
|
||||
|
||||
$.idleTimer = function( firstParam, elem, opts ) {
|
||||
|
||||
// defaults that are to be stored as instance props on the elem
|
||||
opts = $.extend( {
|
||||
startImmediately: true, //starts a timeout as soon as the timer is set up
|
||||
idle: false, //indicates if the user is idle
|
||||
enabled: true, //indicates if the idle timer is enabled
|
||||
timeout: 30000, //the amount of time (ms) before the user is considered idle
|
||||
events: "mousemove keydown DOMMouseScroll mousewheel mousedown touchstart touchmove" // activity is one of these events
|
||||
}, opts );
|
||||
|
||||
|
||||
elem = elem || document;
|
||||
|
||||
var jqElem = $( elem ),
|
||||
obj = jqElem.data("idleTimerObj") || {},
|
||||
|
||||
/* (intentionally not documented)
|
||||
* Toggles the idle state and fires an appropriate event.
|
||||
* @return {void}
|
||||
*/
|
||||
toggleIdleState = function( myelem ) {
|
||||
|
||||
// curse you, mozilla setTimeout lateness bug!
|
||||
if ( typeof myelem === "number" ) {
|
||||
myelem = undefined;
|
||||
}
|
||||
|
||||
var obj = $.data( myelem || elem, "idleTimerObj" );
|
||||
|
||||
//toggle the state
|
||||
obj.idle = !obj.idle;
|
||||
|
||||
// reset timeout
|
||||
var elapsed = ( +new Date() ) - obj.olddate;
|
||||
obj.olddate = +new Date();
|
||||
|
||||
// handle Chrome always triggering idle after js alert or comfirm popup
|
||||
if ( obj.idle && ( elapsed < opts.timeout ) ) {
|
||||
obj.idle = false;
|
||||
clearTimeout( $.idleTimer.tId );
|
||||
if ( opts.enabled ) {
|
||||
$.idleTimer.tId = setTimeout( toggleIdleState, opts.timeout );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// create a custom event, but first, store the new state on the element
|
||||
// and then append that string to a namespace
|
||||
var event = $.Event( $.data( elem, "idleTimer", obj.idle ? "idle" : "active" ) + ".idleTimer" );
|
||||
$( elem ).trigger( event );
|
||||
},
|
||||
|
||||
/**
|
||||
* Stops the idle timer. This removes appropriate event handlers
|
||||
* and cancels any pending timeouts.
|
||||
* @return {void}
|
||||
* @method stop
|
||||
* @static
|
||||
*/
|
||||
stop = function( jqElem ) {
|
||||
|
||||
var obj = jqElem.data("idleTimerObj") || {};
|
||||
|
||||
//set to disabled
|
||||
obj.enabled = false;
|
||||
|
||||
//clear any pending timeouts
|
||||
clearTimeout( obj.tId );
|
||||
|
||||
//detach the event handlers
|
||||
jqElem.off(".idleTimer");
|
||||
};
|
||||
|
||||
obj.olddate = obj.olddate || +new Date();
|
||||
|
||||
if ( typeof firstParam === "number" ) {
|
||||
opts.timeout = firstParam;
|
||||
} else if ( firstParam === "destroy" ) {
|
||||
stop( jqElem );
|
||||
return this;
|
||||
} else if ( firstParam === "getElapsedTime" ) {
|
||||
return ( +new Date() ) - obj.olddate;
|
||||
}
|
||||
|
||||
|
||||
/* (intentionally not documented)
|
||||
* Handles a user event indicating that the user isn't idle.
|
||||
* @param {Event} event A DOM2-normalized event object.
|
||||
* @return {void}
|
||||
*/
|
||||
jqElem.on( $.trim( ( opts.events + " " ).split(" ").join(".idleTimer ") ), function() {
|
||||
var obj = $.data( this, "idleTimerObj" );
|
||||
|
||||
//clear any existing timeout
|
||||
clearTimeout( obj.tId );
|
||||
|
||||
//if the idle timer is enabled
|
||||
if ( obj.enabled ){
|
||||
//if it's idle, that means the user is no longer idle
|
||||
if ( obj.idle ){
|
||||
toggleIdleState( this );
|
||||
}
|
||||
|
||||
//set a new timeout
|
||||
obj.tId = setTimeout( toggleIdleState, obj.timeout );
|
||||
}
|
||||
});
|
||||
|
||||
obj.idle = opts.idle;
|
||||
obj.enabled = opts.enabled;
|
||||
obj.timeout = opts.timeout;
|
||||
|
||||
//set a timeout to toggle state. May wish to omit this in some situations
|
||||
if ( opts.startImmediately ) {
|
||||
obj.tId = setTimeout( toggleIdleState, obj.timeout );
|
||||
}
|
||||
|
||||
// assume the user is active for the first x seconds.
|
||||
jqElem.data( "idleTimer", "active" );
|
||||
|
||||
// store our instance on the object
|
||||
jqElem.data( "idleTimerObj", obj );
|
||||
};
|
||||
|
||||
$.fn.idleTimer = function( firstParam, opts ) {
|
||||
// Allow omission of opts for backward compatibility
|
||||
if ( !opts ) {
|
||||
opts = {};
|
||||
}
|
||||
|
||||
if ( this[0] ){
|
||||
return $.idleTimer( firstParam, this[0], opts );
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
})( jQuery );
|
||||
@@ -0,0 +1,4 @@
|
||||
/*! Idle Timer - v0.9.2 - 2013-08-04
|
||||
* https://github.com/mikesherov/jquery-idletimer
|
||||
* Copyright (c) 2013 Paul Irish; Licensed MIT */
|
||||
(function(e){e.idleTimer=function(t,i,d){d=e.extend({startImmediately:!0,idle:!1,enabled:!0,timeout:3e4,events:"mousemove keydown DOMMouseScroll mousewheel mousedown touchstart touchmove"},d),i=i||document;var l=e(i),a=l.data("idleTimerObj")||{},o=function(t){"number"==typeof t&&(t=void 0);var l=e.data(t||i,"idleTimerObj");l.idle=!l.idle;var a=+new Date-l.olddate;if(l.olddate=+new Date,l.idle&&d.timeout>a)return l.idle=!1,clearTimeout(e.idleTimer.tId),d.enabled&&(e.idleTimer.tId=setTimeout(o,d.timeout)),void 0;var m=e.Event(e.data(i,"idleTimer",l.idle?"idle":"active")+".idleTimer");e(i).trigger(m)},m=function(e){var t=e.data("idleTimerObj")||{};t.enabled=!1,clearTimeout(t.tId),e.off(".idleTimer")};if(a.olddate=a.olddate||+new Date,"number"==typeof t)d.timeout=t;else{if("destroy"===t)return m(l),this;if("getElapsedTime"===t)return+new Date-a.olddate}l.on(e.trim((d.events+" ").split(" ").join(".idleTimer ")),function(){var t=e.data(this,"idleTimerObj");clearTimeout(t.tId),t.enabled&&(t.idle&&o(this),t.tId=setTimeout(o,t.timeout))}),a.idle=d.idle,a.enabled=d.enabled,a.timeout=d.timeout,d.startImmediately&&(a.tId=setTimeout(o,a.timeout)),l.data("idleTimer","active"),l.data("idleTimerObj",a)},e.fn.idleTimer=function(t,i){return i||(i={}),this[0]?e.idleTimer(t,this[0],i):this}})(jQuery);
|
||||
@@ -0,0 +1,302 @@
|
||||
/*! Idle Timer - v1.0.0 - 2014-03-10
|
||||
* https://github.com/thorst/jquery-idletimer
|
||||
* Copyright (c) 2014 Paul Irish; Licensed MIT */
|
||||
/*
|
||||
mousewheel (deprecated) -> IE6.0, Chrome, Opera, Safari
|
||||
DOMMouseScroll (deprecated) -> Firefox 1.0
|
||||
wheel (standard) -> Chrome 31, Firefox 17, IE9, Firefox Mobile 17.0
|
||||
|
||||
//No need to use, use DOMMouseScroll
|
||||
MozMousePixelScroll -> Firefox 3.5, Firefox Mobile 1.0
|
||||
|
||||
//Events
|
||||
WheelEvent -> see wheel
|
||||
MouseWheelEvent -> see mousewheel
|
||||
MouseScrollEvent -> Firefox 3.5, Firefox Mobile 1.0
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
$.idleTimer = function (firstParam, elem) {
|
||||
var opts;
|
||||
if ( typeof firstParam === "object" ) {
|
||||
opts = firstParam;
|
||||
firstParam = null;
|
||||
} else if (typeof firstParam === "number") {
|
||||
opts = { timeout: firstParam };
|
||||
firstParam = null;
|
||||
}
|
||||
|
||||
// element to watch
|
||||
elem = elem || document;
|
||||
|
||||
// defaults that are to be stored as instance props on the elem
|
||||
opts = $.extend({
|
||||
idle: false, // indicates if the user is idle
|
||||
timeout: 30000, // the amount of time (ms) before the user is considered idle
|
||||
events: "mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove" // define active events
|
||||
}, opts);
|
||||
|
||||
var jqElem = $(elem),
|
||||
obj = jqElem.data("idleTimerObj") || {},
|
||||
|
||||
/* (intentionally not documented)
|
||||
* Toggles the idle state and fires an appropriate event.
|
||||
* @return {void}
|
||||
*/
|
||||
toggleIdleState = function (e) {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// toggle the state
|
||||
obj.idle = !obj.idle;
|
||||
|
||||
// store toggle state date time
|
||||
obj.olddate = +new Date();
|
||||
|
||||
// create a custom event, with state and name space
|
||||
var event = $.Event((obj.idle ? "idle" : "active") + ".idleTimer");
|
||||
|
||||
// trigger event on object with elem and copy of obj
|
||||
$(elem).trigger(event, [elem, $.extend({}, obj), e]);
|
||||
},
|
||||
/**
|
||||
* Handle event triggers
|
||||
* @return {void}
|
||||
* @method event
|
||||
* @static
|
||||
*/
|
||||
handleEvent = function (e) {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// this is already paused, ignore events for now
|
||||
if (obj.remaining != null) { return; }
|
||||
|
||||
/*
|
||||
mousemove is kinda buggy, it can be triggered when it should be idle.
|
||||
Typically is happening between 115 - 150 milliseconds after idle triggered.
|
||||
@psyafter & @kaellis report "always triggered if using modal (jQuery ui, with overlay)"
|
||||
@thorst has similar issues on ios7 "after $.scrollTop() on text area"
|
||||
*/
|
||||
if (e.type === "mousemove") {
|
||||
// if coord are same, it didn't move
|
||||
if (e.pageX === obj.pageX && e.pageY === obj.pageY) {
|
||||
return;
|
||||
}
|
||||
// if coord don't exist how could it move
|
||||
if (typeof e.pageX === "undefined" && typeof e.pageY === "undefined") {
|
||||
return;
|
||||
}
|
||||
// under 200 ms is hard to do, and you would have to stop, as continuous activity will bypass this
|
||||
var elapsed = (+new Date()) - obj.olddate;
|
||||
if (elapsed < 200) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// clear any existing timeout
|
||||
clearTimeout(obj.tId);
|
||||
|
||||
// if the idle timer is enabled, flip
|
||||
if (obj.idle) {
|
||||
toggleIdleState(e);
|
||||
}
|
||||
|
||||
// store when user was last active
|
||||
obj.lastActive = +new Date();
|
||||
|
||||
// update mouse coord
|
||||
obj.pageX = e.pageX;
|
||||
obj.pageY = e.pageY;
|
||||
|
||||
// set a new timeout
|
||||
obj.tId = setTimeout(toggleIdleState, obj.timeout);
|
||||
|
||||
},
|
||||
/**
|
||||
* Restore initial settings and restart timer
|
||||
* @return {void}
|
||||
* @method reset
|
||||
* @static
|
||||
*/
|
||||
reset = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// reset settings
|
||||
obj.idle = obj.idleBackup;
|
||||
obj.olddate = +new Date();
|
||||
obj.lastActive = obj.olddate;
|
||||
obj.remaining = null;
|
||||
|
||||
// reset Timers
|
||||
clearTimeout(obj.tId);
|
||||
if (!obj.idle) {
|
||||
obj.tId = setTimeout(toggleIdleState, obj.timeout);
|
||||
}
|
||||
|
||||
},
|
||||
/**
|
||||
* Store remaining time, stop timer
|
||||
* You can pause from an idle OR active state
|
||||
* @return {void}
|
||||
* @method pause
|
||||
* @static
|
||||
*/
|
||||
pause = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// this is already paused
|
||||
if ( obj.remaining != null ) { return; }
|
||||
|
||||
// define how much is left on the timer
|
||||
obj.remaining = obj.timeout - ((+new Date()) - obj.olddate);
|
||||
|
||||
// clear any existing timeout
|
||||
clearTimeout(obj.tId);
|
||||
},
|
||||
/**
|
||||
* Start timer with remaining value
|
||||
* @return {void}
|
||||
* @method resume
|
||||
* @static
|
||||
*/
|
||||
resume = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// this isn't paused yet
|
||||
if ( obj.remaining == null ) { return; }
|
||||
|
||||
// start timer
|
||||
if ( !obj.idle ) {
|
||||
obj.tId = setTimeout(toggleIdleState, obj.remaining);
|
||||
}
|
||||
|
||||
// clear remaining
|
||||
obj.remaining = null;
|
||||
},
|
||||
/**
|
||||
* Stops the idle timer. This removes appropriate event handlers
|
||||
* and cancels any pending timeouts.
|
||||
* @return {void}
|
||||
* @method destroy
|
||||
* @static
|
||||
*/
|
||||
destroy = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
//clear any pending timeouts
|
||||
clearTimeout(obj.tId);
|
||||
|
||||
//Remove data
|
||||
jqElem.removeData("idleTimerObj");
|
||||
|
||||
//detach the event handlers
|
||||
jqElem.off("._idleTimer");
|
||||
},
|
||||
/**
|
||||
* Returns the time until becoming idle
|
||||
* @return {number}
|
||||
* @method remainingtime
|
||||
* @static
|
||||
*/
|
||||
remainingtime = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
//If idle there is no time remaining
|
||||
if ( obj.idle ) { return 0; }
|
||||
|
||||
//If its paused just return that
|
||||
if ( obj.remaining != null ) { return obj.remaining; }
|
||||
|
||||
//Determine remaining, if negative idle didn't finish flipping, just return 0
|
||||
var remaining = obj.timeout - ((+new Date()) - obj.lastActive);
|
||||
if (remaining < 0) { remaining = 0; }
|
||||
|
||||
//If this is paused return that number, else return current remaining
|
||||
return remaining;
|
||||
};
|
||||
|
||||
|
||||
// determine which function to call
|
||||
if (firstParam === null && typeof obj.idle !== "undefined") {
|
||||
// they think they want to init, but it already is, just reset
|
||||
reset();
|
||||
return jqElem;
|
||||
} else if (firstParam === null) {
|
||||
// they want to init
|
||||
} else if (firstParam !== null && typeof obj.idle === "undefined") {
|
||||
// they want to do something, but it isnt init
|
||||
// not sure the best way to handle this
|
||||
return false;
|
||||
} else if (firstParam === "destroy") {
|
||||
destroy();
|
||||
return jqElem;
|
||||
} else if (firstParam === "pause") {
|
||||
pause();
|
||||
return jqElem;
|
||||
} else if (firstParam === "resume") {
|
||||
resume();
|
||||
return jqElem;
|
||||
} else if (firstParam === "reset") {
|
||||
reset();
|
||||
return jqElem;
|
||||
} else if (firstParam === "getRemainingTime") {
|
||||
return remainingtime();
|
||||
} else if (firstParam === "getElapsedTime") {
|
||||
return (+new Date()) - obj.olddate;
|
||||
} else if (firstParam === "getLastActiveTime") {
|
||||
return obj.lastActive;
|
||||
} else if (firstParam === "isIdle") {
|
||||
return obj.idle;
|
||||
}
|
||||
|
||||
/* (intentionally not documented)
|
||||
* Handles a user event indicating that the user isn't idle. namespaced with internal idleTimer
|
||||
* @param {Event} event A DOM2-normalized event object.
|
||||
* @return {void}
|
||||
*/
|
||||
jqElem.on($.trim((opts.events + " ").split(" ").join("._idleTimer ")), function (e) {
|
||||
handleEvent(e);
|
||||
});
|
||||
|
||||
|
||||
// Internal Object Properties, This isn't all necessary, but we
|
||||
// explicitly define all keys here so we know what we are working with
|
||||
obj = $.extend({}, {
|
||||
olddate : +new Date(), // the last time state changed
|
||||
lastActive: +new Date(), // the last time timer was active
|
||||
idle : opts.idle, // current state
|
||||
idleBackup : opts.idle, // backup of idle parameter since it gets modified
|
||||
timeout : opts.timeout, // the interval to change state
|
||||
remaining : null, // how long until state changes
|
||||
tId : null, // the idle timer setTimeout
|
||||
pageX : null, // used to store the mouse coord
|
||||
pageY : null
|
||||
});
|
||||
|
||||
// set a timeout to toggle state. May wish to omit this in some situations
|
||||
if (!obj.idle) {
|
||||
obj.tId = setTimeout(toggleIdleState, obj.timeout);
|
||||
}
|
||||
|
||||
// store our instance on the object
|
||||
$.data(elem, "idleTimerObj", obj);
|
||||
|
||||
return jqElem;
|
||||
};
|
||||
|
||||
// This allows binding to element
|
||||
$.fn.idleTimer = function (firstParam) {
|
||||
if (this[0]) {
|
||||
return $.idleTimer(firstParam, this[0]);
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! Idle Timer v1.0.0 2014-03-10 | https://github.com/thorst/jquery-idletimer | (c) 2014 Paul Irish | Licensed MIT */
|
||||
!function(a){a.idleTimer=function(b,c){var d;"object"==typeof b?(d=b,b=null):"number"==typeof b&&(d={timeout:b},b=null),c=c||document,d=a.extend({idle:!1,timeout:3e4,events:"mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove"},d);var e=a(c),f=e.data("idleTimerObj")||{},g=function(b){var d=a.data(c,"idleTimerObj")||{};d.idle=!d.idle,d.olddate=+new Date;var e=a.Event((d.idle?"idle":"active")+".idleTimer");a(c).trigger(e,[c,a.extend({},d),b])},h=function(b){var d=a.data(c,"idleTimerObj")||{};if(null==d.remaining){if("mousemove"===b.type){if(b.pageX===d.pageX&&b.pageY===d.pageY)return;if("undefined"==typeof b.pageX&&"undefined"==typeof b.pageY)return;var e=+new Date-d.olddate;if(200>e)return}clearTimeout(d.tId),d.idle&&g(b),d.lastActive=+new Date,d.pageX=b.pageX,d.pageY=b.pageY,d.tId=setTimeout(g,d.timeout)}},i=function(){var b=a.data(c,"idleTimerObj")||{};b.idle=b.idleBackup,b.olddate=+new Date,b.lastActive=b.olddate,b.remaining=null,clearTimeout(b.tId),b.idle||(b.tId=setTimeout(g,b.timeout))},j=function(){var b=a.data(c,"idleTimerObj")||{};null==b.remaining&&(b.remaining=b.timeout-(+new Date-b.olddate),clearTimeout(b.tId))},k=function(){var b=a.data(c,"idleTimerObj")||{};null!=b.remaining&&(b.idle||(b.tId=setTimeout(g,b.remaining)),b.remaining=null)},l=function(){var b=a.data(c,"idleTimerObj")||{};clearTimeout(b.tId),e.removeData("idleTimerObj"),e.off("._idleTimer")},m=function(){var b=a.data(c,"idleTimerObj")||{};if(b.idle)return 0;if(null!=b.remaining)return b.remaining;var d=b.timeout-(+new Date-b.lastActive);return 0>d&&(d=0),d};if(null===b&&"undefined"!=typeof f.idle)return i(),e;if(null===b);else{if(null!==b&&"undefined"==typeof f.idle)return!1;if("destroy"===b)return l(),e;if("pause"===b)return j(),e;if("resume"===b)return k(),e;if("reset"===b)return i(),e;if("getRemainingTime"===b)return m();if("getElapsedTime"===b)return+new Date-f.olddate;if("getLastActiveTime"===b)return f.lastActive;if("isIdle"===b)return f.idle}return e.on(a.trim((d.events+" ").split(" ").join("._idleTimer ")),function(a){h(a)}),f=a.extend({},{olddate:+new Date,lastActive:+new Date,idle:d.idle,idleBackup:d.idle,timeout:d.timeout,remaining:null,tId:null,pageX:null,pageY:null}),f.idle||(f.tId=setTimeout(g,f.timeout)),a.data(c,"idleTimerObj",f),e},a.fn.idleTimer=function(b){return this[0]?a.idleTimer(b,this[0]):this}}(jQuery);
|
||||
@@ -0,0 +1,302 @@
|
||||
/*! Idle Timer - v1.0.1 - 2014-03-21
|
||||
* https://github.com/thorst/jquery-idletimer
|
||||
* Copyright (c) 2014 Paul Irish; Licensed MIT */
|
||||
/*
|
||||
mousewheel (deprecated) -> IE6.0, Chrome, Opera, Safari
|
||||
DOMMouseScroll (deprecated) -> Firefox 1.0
|
||||
wheel (standard) -> Chrome 31, Firefox 17, IE9, Firefox Mobile 17.0
|
||||
|
||||
//No need to use, use DOMMouseScroll
|
||||
MozMousePixelScroll -> Firefox 3.5, Firefox Mobile 1.0
|
||||
|
||||
//Events
|
||||
WheelEvent -> see wheel
|
||||
MouseWheelEvent -> see mousewheel
|
||||
MouseScrollEvent -> Firefox 3.5, Firefox Mobile 1.0
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
$.idleTimer = function (firstParam, elem) {
|
||||
var opts;
|
||||
if ( typeof firstParam === "object" ) {
|
||||
opts = firstParam;
|
||||
firstParam = null;
|
||||
} else if (typeof firstParam === "number") {
|
||||
opts = { timeout: firstParam };
|
||||
firstParam = null;
|
||||
}
|
||||
|
||||
// element to watch
|
||||
elem = elem || document;
|
||||
|
||||
// defaults that are to be stored as instance props on the elem
|
||||
opts = $.extend({
|
||||
idle: false, // indicates if the user is idle
|
||||
timeout: 30000, // the amount of time (ms) before the user is considered idle
|
||||
events: "mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove" // define active events
|
||||
}, opts);
|
||||
|
||||
var jqElem = $(elem),
|
||||
obj = jqElem.data("idleTimerObj") || {},
|
||||
|
||||
/* (intentionally not documented)
|
||||
* Toggles the idle state and fires an appropriate event.
|
||||
* @return {void}
|
||||
*/
|
||||
toggleIdleState = function (e) {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// toggle the state
|
||||
obj.idle = !obj.idle;
|
||||
|
||||
// store toggle state date time
|
||||
obj.olddate = +new Date();
|
||||
|
||||
// create a custom event, with state and name space
|
||||
var event = $.Event((obj.idle ? "idle" : "active") + ".idleTimer");
|
||||
|
||||
// trigger event on object with elem and copy of obj
|
||||
$(elem).trigger(event, [elem, $.extend({}, obj), e]);
|
||||
},
|
||||
/**
|
||||
* Handle event triggers
|
||||
* @return {void}
|
||||
* @method event
|
||||
* @static
|
||||
*/
|
||||
handleEvent = function (e) {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// this is already paused, ignore events for now
|
||||
if (obj.remaining != null) { return; }
|
||||
|
||||
/*
|
||||
mousemove is kinda buggy, it can be triggered when it should be idle.
|
||||
Typically is happening between 115 - 150 milliseconds after idle triggered.
|
||||
@psyafter & @kaellis report "always triggered if using modal (jQuery ui, with overlay)"
|
||||
@thorst has similar issues on ios7 "after $.scrollTop() on text area"
|
||||
*/
|
||||
if (e.type === "mousemove") {
|
||||
// if coord are same, it didn't move
|
||||
if (e.pageX === obj.pageX && e.pageY === obj.pageY) {
|
||||
return;
|
||||
}
|
||||
// if coord don't exist how could it move
|
||||
if (typeof e.pageX === "undefined" && typeof e.pageY === "undefined") {
|
||||
return;
|
||||
}
|
||||
// under 200 ms is hard to do, and you would have to stop, as continuous activity will bypass this
|
||||
var elapsed = (+new Date()) - obj.olddate;
|
||||
if (elapsed < 200) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// clear any existing timeout
|
||||
clearTimeout(obj.tId);
|
||||
|
||||
// if the idle timer is enabled, flip
|
||||
if (obj.idle) {
|
||||
toggleIdleState(e);
|
||||
}
|
||||
|
||||
// store when user was last active
|
||||
obj.lastActive = +new Date();
|
||||
|
||||
// update mouse coord
|
||||
obj.pageX = e.pageX;
|
||||
obj.pageY = e.pageY;
|
||||
|
||||
// set a new timeout
|
||||
obj.tId = setTimeout(toggleIdleState, obj.timeout);
|
||||
|
||||
},
|
||||
/**
|
||||
* Restore initial settings and restart timer
|
||||
* @return {void}
|
||||
* @method reset
|
||||
* @static
|
||||
*/
|
||||
reset = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// reset settings
|
||||
obj.idle = obj.idleBackup;
|
||||
obj.olddate = +new Date();
|
||||
obj.lastActive = obj.olddate;
|
||||
obj.remaining = null;
|
||||
|
||||
// reset Timers
|
||||
clearTimeout(obj.tId);
|
||||
if (!obj.idle) {
|
||||
obj.tId = setTimeout(toggleIdleState, obj.timeout);
|
||||
}
|
||||
|
||||
},
|
||||
/**
|
||||
* Store remaining time, stop timer
|
||||
* You can pause from an idle OR active state
|
||||
* @return {void}
|
||||
* @method pause
|
||||
* @static
|
||||
*/
|
||||
pause = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// this is already paused
|
||||
if ( obj.remaining != null ) { return; }
|
||||
|
||||
// define how much is left on the timer
|
||||
obj.remaining = obj.timeout - ((+new Date()) - obj.olddate);
|
||||
|
||||
// clear any existing timeout
|
||||
clearTimeout(obj.tId);
|
||||
},
|
||||
/**
|
||||
* Start timer with remaining value
|
||||
* @return {void}
|
||||
* @method resume
|
||||
* @static
|
||||
*/
|
||||
resume = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// this isn't paused yet
|
||||
if ( obj.remaining == null ) { return; }
|
||||
|
||||
// start timer
|
||||
if ( !obj.idle ) {
|
||||
obj.tId = setTimeout(toggleIdleState, obj.remaining);
|
||||
}
|
||||
|
||||
// clear remaining
|
||||
obj.remaining = null;
|
||||
},
|
||||
/**
|
||||
* Stops the idle timer. This removes appropriate event handlers
|
||||
* and cancels any pending timeouts.
|
||||
* @return {void}
|
||||
* @method destroy
|
||||
* @static
|
||||
*/
|
||||
destroy = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
//clear any pending timeouts
|
||||
clearTimeout(obj.tId);
|
||||
|
||||
//Remove data
|
||||
jqElem.removeData("idleTimerObj");
|
||||
|
||||
//detach the event handlers
|
||||
jqElem.off("._idleTimer");
|
||||
},
|
||||
/**
|
||||
* Returns the time until becoming idle
|
||||
* @return {number}
|
||||
* @method remainingtime
|
||||
* @static
|
||||
*/
|
||||
remainingtime = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
//If idle there is no time remaining
|
||||
if ( obj.idle ) { return 0; }
|
||||
|
||||
//If its paused just return that
|
||||
if ( obj.remaining != null ) { return obj.remaining; }
|
||||
|
||||
//Determine remaining, if negative idle didn't finish flipping, just return 0
|
||||
var remaining = obj.timeout - ((+new Date()) - obj.lastActive);
|
||||
if (remaining < 0) { remaining = 0; }
|
||||
|
||||
//If this is paused return that number, else return current remaining
|
||||
return remaining;
|
||||
};
|
||||
|
||||
|
||||
// determine which function to call
|
||||
if (firstParam === null && typeof obj.idle !== "undefined") {
|
||||
// they think they want to init, but it already is, just reset
|
||||
reset();
|
||||
return jqElem;
|
||||
} else if (firstParam === null) {
|
||||
// they want to init
|
||||
} else if (firstParam !== null && typeof obj.idle === "undefined") {
|
||||
// they want to do something, but it isnt init
|
||||
// not sure the best way to handle this
|
||||
return false;
|
||||
} else if (firstParam === "destroy") {
|
||||
destroy();
|
||||
return jqElem;
|
||||
} else if (firstParam === "pause") {
|
||||
pause();
|
||||
return jqElem;
|
||||
} else if (firstParam === "resume") {
|
||||
resume();
|
||||
return jqElem;
|
||||
} else if (firstParam === "reset") {
|
||||
reset();
|
||||
return jqElem;
|
||||
} else if (firstParam === "getRemainingTime") {
|
||||
return remainingtime();
|
||||
} else if (firstParam === "getElapsedTime") {
|
||||
return (+new Date()) - obj.olddate;
|
||||
} else if (firstParam === "getLastActiveTime") {
|
||||
return obj.lastActive;
|
||||
} else if (firstParam === "isIdle") {
|
||||
return obj.idle;
|
||||
}
|
||||
|
||||
/* (intentionally not documented)
|
||||
* Handles a user event indicating that the user isn't idle. namespaced with internal idleTimer
|
||||
* @param {Event} event A DOM2-normalized event object.
|
||||
* @return {void}
|
||||
*/
|
||||
jqElem.on($.trim((opts.events + " ").split(" ").join("._idleTimer ")), function (e) {
|
||||
handleEvent(e);
|
||||
});
|
||||
|
||||
|
||||
// Internal Object Properties, This isn't all necessary, but we
|
||||
// explicitly define all keys here so we know what we are working with
|
||||
obj = $.extend({}, {
|
||||
olddate : +new Date(), // the last time state changed
|
||||
lastActive: +new Date(), // the last time timer was active
|
||||
idle : opts.idle, // current state
|
||||
idleBackup : opts.idle, // backup of idle parameter since it gets modified
|
||||
timeout : opts.timeout, // the interval to change state
|
||||
remaining : null, // how long until state changes
|
||||
tId : null, // the idle timer setTimeout
|
||||
pageX : null, // used to store the mouse coord
|
||||
pageY : null
|
||||
});
|
||||
|
||||
// set a timeout to toggle state. May wish to omit this in some situations
|
||||
if (!obj.idle) {
|
||||
obj.tId = setTimeout(toggleIdleState, obj.timeout);
|
||||
}
|
||||
|
||||
// store our instance on the object
|
||||
$.data(elem, "idleTimerObj", obj);
|
||||
|
||||
return jqElem;
|
||||
};
|
||||
|
||||
// This allows binding to element
|
||||
$.fn.idleTimer = function (firstParam) {
|
||||
if (this[0]) {
|
||||
return $.idleTimer(firstParam, this[0]);
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! Idle Timer v1.0.1 2014-03-21 | https://github.com/thorst/jquery-idletimer | (c) 2014 Paul Irish | Licensed MIT */
|
||||
!function(a){a.idleTimer=function(b,c){var d;"object"==typeof b?(d=b,b=null):"number"==typeof b&&(d={timeout:b},b=null),c=c||document,d=a.extend({idle:!1,timeout:3e4,events:"mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove"},d);var e=a(c),f=e.data("idleTimerObj")||{},g=function(b){var d=a.data(c,"idleTimerObj")||{};d.idle=!d.idle,d.olddate=+new Date;var e=a.Event((d.idle?"idle":"active")+".idleTimer");a(c).trigger(e,[c,a.extend({},d),b])},h=function(b){var d=a.data(c,"idleTimerObj")||{};if(null==d.remaining){if("mousemove"===b.type){if(b.pageX===d.pageX&&b.pageY===d.pageY)return;if("undefined"==typeof b.pageX&&"undefined"==typeof b.pageY)return;var e=+new Date-d.olddate;if(200>e)return}clearTimeout(d.tId),d.idle&&g(b),d.lastActive=+new Date,d.pageX=b.pageX,d.pageY=b.pageY,d.tId=setTimeout(g,d.timeout)}},i=function(){var b=a.data(c,"idleTimerObj")||{};b.idle=b.idleBackup,b.olddate=+new Date,b.lastActive=b.olddate,b.remaining=null,clearTimeout(b.tId),b.idle||(b.tId=setTimeout(g,b.timeout))},j=function(){var b=a.data(c,"idleTimerObj")||{};null==b.remaining&&(b.remaining=b.timeout-(+new Date-b.olddate),clearTimeout(b.tId))},k=function(){var b=a.data(c,"idleTimerObj")||{};null!=b.remaining&&(b.idle||(b.tId=setTimeout(g,b.remaining)),b.remaining=null)},l=function(){var b=a.data(c,"idleTimerObj")||{};clearTimeout(b.tId),e.removeData("idleTimerObj"),e.off("._idleTimer")},m=function(){var b=a.data(c,"idleTimerObj")||{};if(b.idle)return 0;if(null!=b.remaining)return b.remaining;var d=b.timeout-(+new Date-b.lastActive);return 0>d&&(d=0),d};if(null===b&&"undefined"!=typeof f.idle)return i(),e;if(null===b);else{if(null!==b&&"undefined"==typeof f.idle)return!1;if("destroy"===b)return l(),e;if("pause"===b)return j(),e;if("resume"===b)return k(),e;if("reset"===b)return i(),e;if("getRemainingTime"===b)return m();if("getElapsedTime"===b)return+new Date-f.olddate;if("getLastActiveTime"===b)return f.lastActive;if("isIdle"===b)return f.idle}return e.on(a.trim((d.events+" ").split(" ").join("._idleTimer ")),function(a){h(a)}),f=a.extend({},{olddate:+new Date,lastActive:+new Date,idle:d.idle,idleBackup:d.idle,timeout:d.timeout,remaining:null,tId:null,pageX:null,pageY:null}),f.idle||(f.tId=setTimeout(g,f.timeout)),a.data(c,"idleTimerObj",f),e},a.fn.idleTimer=function(b){return this[0]?a.idleTimer(b,this[0]):this}}(jQuery);
|
||||
+302
@@ -0,0 +1,302 @@
|
||||
/*! Idle Timer - v1.0.1 - 2014-03-21
|
||||
* https://github.com/thorst/jquery-idletimer
|
||||
* Copyright (c) 2014 Paul Irish; Licensed MIT */
|
||||
/*
|
||||
mousewheel (deprecated) -> IE6.0, Chrome, Opera, Safari
|
||||
DOMMouseScroll (deprecated) -> Firefox 1.0
|
||||
wheel (standard) -> Chrome 31, Firefox 17, IE9, Firefox Mobile 17.0
|
||||
|
||||
//No need to use, use DOMMouseScroll
|
||||
MozMousePixelScroll -> Firefox 3.5, Firefox Mobile 1.0
|
||||
|
||||
//Events
|
||||
WheelEvent -> see wheel
|
||||
MouseWheelEvent -> see mousewheel
|
||||
MouseScrollEvent -> Firefox 3.5, Firefox Mobile 1.0
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
$.idleTimer = function (firstParam, elem) {
|
||||
var opts;
|
||||
if ( typeof firstParam === "object" ) {
|
||||
opts = firstParam;
|
||||
firstParam = null;
|
||||
} else if (typeof firstParam === "number") {
|
||||
opts = { timeout: firstParam };
|
||||
firstParam = null;
|
||||
}
|
||||
|
||||
// element to watch
|
||||
elem = elem || document;
|
||||
|
||||
// defaults that are to be stored as instance props on the elem
|
||||
opts = $.extend({
|
||||
idle: false, // indicates if the user is idle
|
||||
timeout: 30000, // the amount of time (ms) before the user is considered idle
|
||||
events: "mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove" // define active events
|
||||
}, opts);
|
||||
|
||||
var jqElem = $(elem),
|
||||
obj = jqElem.data("idleTimerObj") || {},
|
||||
|
||||
/* (intentionally not documented)
|
||||
* Toggles the idle state and fires an appropriate event.
|
||||
* @return {void}
|
||||
*/
|
||||
toggleIdleState = function (e) {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// toggle the state
|
||||
obj.idle = !obj.idle;
|
||||
|
||||
// store toggle state date time
|
||||
obj.olddate = +new Date();
|
||||
|
||||
// create a custom event, with state and name space
|
||||
var event = $.Event((obj.idle ? "idle" : "active") + ".idleTimer");
|
||||
|
||||
// trigger event on object with elem and copy of obj
|
||||
$(elem).trigger(event, [elem, $.extend({}, obj), e]);
|
||||
},
|
||||
/**
|
||||
* Handle event triggers
|
||||
* @return {void}
|
||||
* @method event
|
||||
* @static
|
||||
*/
|
||||
handleEvent = function (e) {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// this is already paused, ignore events for now
|
||||
if (obj.remaining != null) { return; }
|
||||
|
||||
/*
|
||||
mousemove is kinda buggy, it can be triggered when it should be idle.
|
||||
Typically is happening between 115 - 150 milliseconds after idle triggered.
|
||||
@psyafter & @kaellis report "always triggered if using modal (jQuery ui, with overlay)"
|
||||
@thorst has similar issues on ios7 "after $.scrollTop() on text area"
|
||||
*/
|
||||
if (e.type === "mousemove") {
|
||||
// if coord are same, it didn't move
|
||||
if (e.pageX === obj.pageX && e.pageY === obj.pageY) {
|
||||
return;
|
||||
}
|
||||
// if coord don't exist how could it move
|
||||
if (typeof e.pageX === "undefined" && typeof e.pageY === "undefined") {
|
||||
return;
|
||||
}
|
||||
// under 200 ms is hard to do, and you would have to stop, as continuous activity will bypass this
|
||||
var elapsed = (+new Date()) - obj.olddate;
|
||||
if (elapsed < 200) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// clear any existing timeout
|
||||
clearTimeout(obj.tId);
|
||||
|
||||
// if the idle timer is enabled, flip
|
||||
if (obj.idle) {
|
||||
toggleIdleState(e);
|
||||
}
|
||||
|
||||
// store when user was last active
|
||||
obj.lastActive = +new Date();
|
||||
|
||||
// update mouse coord
|
||||
obj.pageX = e.pageX;
|
||||
obj.pageY = e.pageY;
|
||||
|
||||
// set a new timeout
|
||||
obj.tId = setTimeout(toggleIdleState, obj.timeout);
|
||||
|
||||
},
|
||||
/**
|
||||
* Restore initial settings and restart timer
|
||||
* @return {void}
|
||||
* @method reset
|
||||
* @static
|
||||
*/
|
||||
reset = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// reset settings
|
||||
obj.idle = obj.idleBackup;
|
||||
obj.olddate = +new Date();
|
||||
obj.lastActive = obj.olddate;
|
||||
obj.remaining = null;
|
||||
|
||||
// reset Timers
|
||||
clearTimeout(obj.tId);
|
||||
if (!obj.idle) {
|
||||
obj.tId = setTimeout(toggleIdleState, obj.timeout);
|
||||
}
|
||||
|
||||
},
|
||||
/**
|
||||
* Store remaining time, stop timer
|
||||
* You can pause from an idle OR active state
|
||||
* @return {void}
|
||||
* @method pause
|
||||
* @static
|
||||
*/
|
||||
pause = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// this is already paused
|
||||
if ( obj.remaining != null ) { return; }
|
||||
|
||||
// define how much is left on the timer
|
||||
obj.remaining = obj.timeout - ((+new Date()) - obj.olddate);
|
||||
|
||||
// clear any existing timeout
|
||||
clearTimeout(obj.tId);
|
||||
},
|
||||
/**
|
||||
* Start timer with remaining value
|
||||
* @return {void}
|
||||
* @method resume
|
||||
* @static
|
||||
*/
|
||||
resume = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
// this isn't paused yet
|
||||
if ( obj.remaining == null ) { return; }
|
||||
|
||||
// start timer
|
||||
if ( !obj.idle ) {
|
||||
obj.tId = setTimeout(toggleIdleState, obj.remaining);
|
||||
}
|
||||
|
||||
// clear remaining
|
||||
obj.remaining = null;
|
||||
},
|
||||
/**
|
||||
* Stops the idle timer. This removes appropriate event handlers
|
||||
* and cancels any pending timeouts.
|
||||
* @return {void}
|
||||
* @method destroy
|
||||
* @static
|
||||
*/
|
||||
destroy = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
//clear any pending timeouts
|
||||
clearTimeout(obj.tId);
|
||||
|
||||
//Remove data
|
||||
jqElem.removeData("idleTimerObj");
|
||||
|
||||
//detach the event handlers
|
||||
jqElem.off("._idleTimer");
|
||||
},
|
||||
/**
|
||||
* Returns the time until becoming idle
|
||||
* @return {number}
|
||||
* @method remainingtime
|
||||
* @static
|
||||
*/
|
||||
remainingtime = function () {
|
||||
|
||||
var obj = $.data(elem, "idleTimerObj") || {};
|
||||
|
||||
//If idle there is no time remaining
|
||||
if ( obj.idle ) { return 0; }
|
||||
|
||||
//If its paused just return that
|
||||
if ( obj.remaining != null ) { return obj.remaining; }
|
||||
|
||||
//Determine remaining, if negative idle didn't finish flipping, just return 0
|
||||
var remaining = obj.timeout - ((+new Date()) - obj.lastActive);
|
||||
if (remaining < 0) { remaining = 0; }
|
||||
|
||||
//If this is paused return that number, else return current remaining
|
||||
return remaining;
|
||||
};
|
||||
|
||||
|
||||
// determine which function to call
|
||||
if (firstParam === null && typeof obj.idle !== "undefined") {
|
||||
// they think they want to init, but it already is, just reset
|
||||
reset();
|
||||
return jqElem;
|
||||
} else if (firstParam === null) {
|
||||
// they want to init
|
||||
} else if (firstParam !== null && typeof obj.idle === "undefined") {
|
||||
// they want to do something, but it isnt init
|
||||
// not sure the best way to handle this
|
||||
return false;
|
||||
} else if (firstParam === "destroy") {
|
||||
destroy();
|
||||
return jqElem;
|
||||
} else if (firstParam === "pause") {
|
||||
pause();
|
||||
return jqElem;
|
||||
} else if (firstParam === "resume") {
|
||||
resume();
|
||||
return jqElem;
|
||||
} else if (firstParam === "reset") {
|
||||
reset();
|
||||
return jqElem;
|
||||
} else if (firstParam === "getRemainingTime") {
|
||||
return remainingtime();
|
||||
} else if (firstParam === "getElapsedTime") {
|
||||
return (+new Date()) - obj.olddate;
|
||||
} else if (firstParam === "getLastActiveTime") {
|
||||
return obj.lastActive;
|
||||
} else if (firstParam === "isIdle") {
|
||||
return obj.idle;
|
||||
}
|
||||
|
||||
/* (intentionally not documented)
|
||||
* Handles a user event indicating that the user isn't idle. namespaced with internal idleTimer
|
||||
* @param {Event} event A DOM2-normalized event object.
|
||||
* @return {void}
|
||||
*/
|
||||
jqElem.on($.trim((opts.events + " ").split(" ").join("._idleTimer ")), function (e) {
|
||||
handleEvent(e);
|
||||
});
|
||||
|
||||
|
||||
// Internal Object Properties, This isn't all necessary, but we
|
||||
// explicitly define all keys here so we know what we are working with
|
||||
obj = $.extend({}, {
|
||||
olddate : +new Date(), // the last time state changed
|
||||
lastActive: +new Date(), // the last time timer was active
|
||||
idle : opts.idle, // current state
|
||||
idleBackup : opts.idle, // backup of idle parameter since it gets modified
|
||||
timeout : opts.timeout, // the interval to change state
|
||||
remaining : null, // how long until state changes
|
||||
tId : null, // the idle timer setTimeout
|
||||
pageX : null, // used to store the mouse coord
|
||||
pageY : null
|
||||
});
|
||||
|
||||
// set a timeout to toggle state. May wish to omit this in some situations
|
||||
if (!obj.idle) {
|
||||
obj.tId = setTimeout(toggleIdleState, obj.timeout);
|
||||
}
|
||||
|
||||
// store our instance on the object
|
||||
$.data(elem, "idleTimerObj", obj);
|
||||
|
||||
return jqElem;
|
||||
};
|
||||
|
||||
// This allows binding to element
|
||||
$.fn.idleTimer = function (firstParam) {
|
||||
if (this[0]) {
|
||||
return $.idleTimer(firstParam, this[0]);
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! Idle Timer v1.0.1 2014-03-21 | https://github.com/thorst/jquery-idletimer | (c) 2014 Paul Irish | Licensed MIT */
|
||||
!function(a){a.idleTimer=function(b,c){var d;"object"==typeof b?(d=b,b=null):"number"==typeof b&&(d={timeout:b},b=null),c=c||document,d=a.extend({idle:!1,timeout:3e4,events:"mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove"},d);var e=a(c),f=e.data("idleTimerObj")||{},g=function(b){var d=a.data(c,"idleTimerObj")||{};d.idle=!d.idle,d.olddate=+new Date;var e=a.Event((d.idle?"idle":"active")+".idleTimer");a(c).trigger(e,[c,a.extend({},d),b])},h=function(b){var d=a.data(c,"idleTimerObj")||{};if(null==d.remaining){if("mousemove"===b.type){if(b.pageX===d.pageX&&b.pageY===d.pageY)return;if("undefined"==typeof b.pageX&&"undefined"==typeof b.pageY)return;var e=+new Date-d.olddate;if(200>e)return}clearTimeout(d.tId),d.idle&&g(b),d.lastActive=+new Date,d.pageX=b.pageX,d.pageY=b.pageY,d.tId=setTimeout(g,d.timeout)}},i=function(){var b=a.data(c,"idleTimerObj")||{};b.idle=b.idleBackup,b.olddate=+new Date,b.lastActive=b.olddate,b.remaining=null,clearTimeout(b.tId),b.idle||(b.tId=setTimeout(g,b.timeout))},j=function(){var b=a.data(c,"idleTimerObj")||{};null==b.remaining&&(b.remaining=b.timeout-(+new Date-b.olddate),clearTimeout(b.tId))},k=function(){var b=a.data(c,"idleTimerObj")||{};null!=b.remaining&&(b.idle||(b.tId=setTimeout(g,b.remaining)),b.remaining=null)},l=function(){var b=a.data(c,"idleTimerObj")||{};clearTimeout(b.tId),e.removeData("idleTimerObj"),e.off("._idleTimer")},m=function(){var b=a.data(c,"idleTimerObj")||{};if(b.idle)return 0;if(null!=b.remaining)return b.remaining;var d=b.timeout-(+new Date-b.lastActive);return 0>d&&(d=0),d};if(null===b&&"undefined"!=typeof f.idle)return i(),e;if(null===b);else{if(null!==b&&"undefined"==typeof f.idle)return!1;if("destroy"===b)return l(),e;if("pause"===b)return j(),e;if("resume"===b)return k(),e;if("reset"===b)return i(),e;if("getRemainingTime"===b)return m();if("getElapsedTime"===b)return+new Date-f.olddate;if("getLastActiveTime"===b)return f.lastActive;if("isIdle"===b)return f.idle}return e.on(a.trim((d.events+" ").split(" ").join("._idleTimer ")),function(a){h(a)}),f=a.extend({},{olddate:+new Date,lastActive:+new Date,idle:d.idle,idleBackup:d.idle,timeout:d.timeout,remaining:null,tId:null,pageX:null,pageY:null}),f.idle||(f.tId=setTimeout(g,f.timeout)),a.data(c,"idleTimerObj",f),e},a.fn.idleTimer=function(b){return this[0]?a.idleTimer(b,this[0]):this}}(jQuery);
|
||||
Reference in New Issue
Block a user