From f40c554a92da35eacf26068155e4ce55ac237c6f Mon Sep 17 00:00:00 2001 From: "Nicholas C. Zakas" Date: Tue, 27 Oct 2009 13:41:18 -0700 Subject: [PATCH] Idle timer --- .../gallery-idletimer-debug.js | 150 ++++++++++++++++++ .../gallery-idletimer-min.js | 1 + build/gallery-idletimer/gallery-idletimer.js | 150 ++++++++++++++++++ src/gallery-idletimer/build.properties | 4 + src/gallery-idletimer/build.xml | 6 + src/gallery-idletimer/js/idletimer.js | 144 +++++++++++++++++ 6 files changed, 455 insertions(+) create mode 100644 build/gallery-idletimer/gallery-idletimer-debug.js create mode 100644 build/gallery-idletimer/gallery-idletimer-min.js create mode 100644 build/gallery-idletimer/gallery-idletimer.js create mode 100644 src/gallery-idletimer/build.properties create mode 100644 src/gallery-idletimer/build.xml create mode 100644 src/gallery-idletimer/js/idletimer.js diff --git a/build/gallery-idletimer/gallery-idletimer-debug.js b/build/gallery-idletimer/gallery-idletimer-debug.js new file mode 100644 index 0000000000..08afb27e02 --- /dev/null +++ b/build/gallery-idletimer/gallery-idletimer-debug.js @@ -0,0 +1,150 @@ +YUI.add('gallery-idletimer', function(Y) { + +/* + * Copyright (c) 2009 Nicholas C. Zakas. All rights reserved. + * http://www.nczonline.net/ + */ + +/** + * Idle timer + * @module gallery-idletimer + */ + +//------------------------------------------------------------------------- +// Private variables +//------------------------------------------------------------------------- + +var idle = false, //indicates if the user is idle + tId = -1, //timeout ID + enabled = false, //indicates if the idle timer is enabled + timeout = 30000; //the amount of time (ms) before the user is considered idle + +//------------------------------------------------------------------------- +// Private functions +//------------------------------------------------------------------------- + +/* (intentionally not documented) + * Handles a user event indicating that the user isn't idle. + * @param {Event} event A DOM2-normalized event object. + * @return {void} + */ +function handleUserEvent(){ + + //clear any existing timeout + clearTimeout(tId); + + //if the idle timer is enabled + if (enabled){ + + //if it's idle, that means the user is no longer idle + if (idle){ + toggleIdleState(); + } + + //set a new timeout + tId = setTimeout(toggleIdleState, timeout); + } +} + +/* (intentionally not documented) + * Toggles the idle state and fires an appropriate event. + * @return {void} + */ +function toggleIdleState(){ + + //toggle the state + idle = !idle; + + //fire appropriate event + Y.IdleTimer.fire(idle ? "idle" : "active"); +} + +//------------------------------------------------------------------------- +// Public interface +//------------------------------------------------------------------------- + +/** + * Centralized control for determining when a user has become idle + * on the current page. + * @class IdleTimer + * @static + */ +Y.IdleTimer = { + + /** + * Indicates if the idle timer is running or not. + * @return {Boolean} True if the idle timer is running, false if not. + * @method isRunning + * @static + */ + isRunning: function(){ + return enabled; + }, + + /** + * Indicates if the user is idle or not. + * @return {Boolean} True if the user is idle, false if not. + * @method isIdle + * @static + */ + isIdle: function(){ + return idle; + }, + + /** + * Starts the idle timer. This adds appropriate event handlers + * and starts the first timeout. + * @param {int} newTimeout (Optional) A new value for the timeout period in ms. + * @return {void} + * @method start + * @static + */ + start: function(newTimeout){ + + //set to enabled + enabled = true; + + //set idle to false to begin with + idle = false; + + //assign a new timeout if necessary + if (typeof newTimeout == "number"){ + timeout = newTimeout; + } + + //assign appropriate event handlers + Y.on("mousemove", handleUserEvent, document); + Y.on("keydown", handleUserEvent, document); + + //set a timeout to toggle state + tId = setTimeout(toggleIdleState, timeout); + }, + + /** + * Stops the idle timer. This removes appropriate event handlers + * and cancels any pending timeouts. + * @return {void} + * @method stop + * @static + */ + stop: function(){ + + //set to disabled + enabled = false; + + //clear any pending timeouts + clearTimeout(tId); + + //detach the event handlers + Y.detach("mousemove", handleUserEvent, document); + Y.detach("keydown", handleUserEvent, document); + } + +}; + +//inherit event functionality +Y.augment(Y.IdleTimer, Y.Event.Target); + + + +}, '@VERSION@' ,{requires:['event','event-custom']}); diff --git a/build/gallery-idletimer/gallery-idletimer-min.js b/build/gallery-idletimer/gallery-idletimer-min.js new file mode 100644 index 0000000000..7eb7ef56c9 --- /dev/null +++ b/build/gallery-idletimer/gallery-idletimer-min.js @@ -0,0 +1 @@ +YUI.add("gallery-idletimer",function(F){var D=false,G=-1,B=false,E=30000;function C(){clearTimeout(G);if(B){if(D){A();}G=setTimeout(A,E);}}function A(){D=!D;F.IdleTimer.fire(D?"idle":"active");}F.IdleTimer={isRunning:function(){return B;},isIdle:function(){return D;},start:function(H){B=true;D=false;if(typeof H=="number"){E=H;}F.on("mousemove",C,document);F.on("keydown",C,document);G=setTimeout(A,E);},stop:function(){B=false;clearTimeout(G);F.detach("mousemove",C,document);F.detach("keydown",C,document);}};F.augment(F.IdleTimer,F.Event.Target);},"@VERSION@",{requires:["event","event-custom"]}); \ No newline at end of file diff --git a/build/gallery-idletimer/gallery-idletimer.js b/build/gallery-idletimer/gallery-idletimer.js new file mode 100644 index 0000000000..08afb27e02 --- /dev/null +++ b/build/gallery-idletimer/gallery-idletimer.js @@ -0,0 +1,150 @@ +YUI.add('gallery-idletimer', function(Y) { + +/* + * Copyright (c) 2009 Nicholas C. Zakas. All rights reserved. + * http://www.nczonline.net/ + */ + +/** + * Idle timer + * @module gallery-idletimer + */ + +//------------------------------------------------------------------------- +// Private variables +//------------------------------------------------------------------------- + +var idle = false, //indicates if the user is idle + tId = -1, //timeout ID + enabled = false, //indicates if the idle timer is enabled + timeout = 30000; //the amount of time (ms) before the user is considered idle + +//------------------------------------------------------------------------- +// Private functions +//------------------------------------------------------------------------- + +/* (intentionally not documented) + * Handles a user event indicating that the user isn't idle. + * @param {Event} event A DOM2-normalized event object. + * @return {void} + */ +function handleUserEvent(){ + + //clear any existing timeout + clearTimeout(tId); + + //if the idle timer is enabled + if (enabled){ + + //if it's idle, that means the user is no longer idle + if (idle){ + toggleIdleState(); + } + + //set a new timeout + tId = setTimeout(toggleIdleState, timeout); + } +} + +/* (intentionally not documented) + * Toggles the idle state and fires an appropriate event. + * @return {void} + */ +function toggleIdleState(){ + + //toggle the state + idle = !idle; + + //fire appropriate event + Y.IdleTimer.fire(idle ? "idle" : "active"); +} + +//------------------------------------------------------------------------- +// Public interface +//------------------------------------------------------------------------- + +/** + * Centralized control for determining when a user has become idle + * on the current page. + * @class IdleTimer + * @static + */ +Y.IdleTimer = { + + /** + * Indicates if the idle timer is running or not. + * @return {Boolean} True if the idle timer is running, false if not. + * @method isRunning + * @static + */ + isRunning: function(){ + return enabled; + }, + + /** + * Indicates if the user is idle or not. + * @return {Boolean} True if the user is idle, false if not. + * @method isIdle + * @static + */ + isIdle: function(){ + return idle; + }, + + /** + * Starts the idle timer. This adds appropriate event handlers + * and starts the first timeout. + * @param {int} newTimeout (Optional) A new value for the timeout period in ms. + * @return {void} + * @method start + * @static + */ + start: function(newTimeout){ + + //set to enabled + enabled = true; + + //set idle to false to begin with + idle = false; + + //assign a new timeout if necessary + if (typeof newTimeout == "number"){ + timeout = newTimeout; + } + + //assign appropriate event handlers + Y.on("mousemove", handleUserEvent, document); + Y.on("keydown", handleUserEvent, document); + + //set a timeout to toggle state + tId = setTimeout(toggleIdleState, timeout); + }, + + /** + * Stops the idle timer. This removes appropriate event handlers + * and cancels any pending timeouts. + * @return {void} + * @method stop + * @static + */ + stop: function(){ + + //set to disabled + enabled = false; + + //clear any pending timeouts + clearTimeout(tId); + + //detach the event handlers + Y.detach("mousemove", handleUserEvent, document); + Y.detach("keydown", handleUserEvent, document); + } + +}; + +//inherit event functionality +Y.augment(Y.IdleTimer, Y.Event.Target); + + + +}, '@VERSION@' ,{requires:['event','event-custom']}); diff --git a/src/gallery-idletimer/build.properties b/src/gallery-idletimer/build.properties new file mode 100644 index 0000000000..4bca103c04 --- /dev/null +++ b/src/gallery-idletimer/build.properties @@ -0,0 +1,4 @@ +builddir=../../../builder/componentbuild +component=gallery-idletimer +component.jsfiles=idletimer.js +component.requires=event,event-custom diff --git a/src/gallery-idletimer/build.xml b/src/gallery-idletimer/build.xml new file mode 100644 index 0000000000..df9f9a95cd --- /dev/null +++ b/src/gallery-idletimer/build.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/src/gallery-idletimer/js/idletimer.js b/src/gallery-idletimer/js/idletimer.js new file mode 100644 index 0000000000..50c74a51a9 --- /dev/null +++ b/src/gallery-idletimer/js/idletimer.js @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2009 Nicholas C. Zakas. All rights reserved. + * http://www.nczonline.net/ + */ + +/** + * Idle timer + * @module gallery-idletimer + */ + +//------------------------------------------------------------------------- +// Private variables +//------------------------------------------------------------------------- + +var idle = false, //indicates if the user is idle + tId = -1, //timeout ID + enabled = false, //indicates if the idle timer is enabled + timeout = 30000; //the amount of time (ms) before the user is considered idle + +//------------------------------------------------------------------------- +// Private functions +//------------------------------------------------------------------------- + +/* (intentionally not documented) + * Handles a user event indicating that the user isn't idle. + * @param {Event} event A DOM2-normalized event object. + * @return {void} + */ +function handleUserEvent(){ + + //clear any existing timeout + clearTimeout(tId); + + //if the idle timer is enabled + if (enabled){ + + //if it's idle, that means the user is no longer idle + if (idle){ + toggleIdleState(); + } + + //set a new timeout + tId = setTimeout(toggleIdleState, timeout); + } +} + +/* (intentionally not documented) + * Toggles the idle state and fires an appropriate event. + * @return {void} + */ +function toggleIdleState(){ + + //toggle the state + idle = !idle; + + //fire appropriate event + Y.IdleTimer.fire(idle ? "idle" : "active"); +} + +//------------------------------------------------------------------------- +// Public interface +//------------------------------------------------------------------------- + +/** + * Centralized control for determining when a user has become idle + * on the current page. + * @class IdleTimer + * @static + */ +Y.IdleTimer = { + + /** + * Indicates if the idle timer is running or not. + * @return {Boolean} True if the idle timer is running, false if not. + * @method isRunning + * @static + */ + isRunning: function(){ + return enabled; + }, + + /** + * Indicates if the user is idle or not. + * @return {Boolean} True if the user is idle, false if not. + * @method isIdle + * @static + */ + isIdle: function(){ + return idle; + }, + + /** + * Starts the idle timer. This adds appropriate event handlers + * and starts the first timeout. + * @param {int} newTimeout (Optional) A new value for the timeout period in ms. + * @return {void} + * @method start + * @static + */ + start: function(newTimeout){ + + //set to enabled + enabled = true; + + //set idle to false to begin with + idle = false; + + //assign a new timeout if necessary + if (typeof newTimeout == "number"){ + timeout = newTimeout; + } + + //assign appropriate event handlers + Y.on("mousemove", handleUserEvent, document); + Y.on("keydown", handleUserEvent, document); + + //set a timeout to toggle state + tId = setTimeout(toggleIdleState, timeout); + }, + + /** + * Stops the idle timer. This removes appropriate event handlers + * and cancels any pending timeouts. + * @return {void} + * @method stop + * @static + */ + stop: function(){ + + //set to disabled + enabled = false; + + //clear any pending timeouts + clearTimeout(tId); + + //detach the event handlers + Y.detach("mousemove", handleUserEvent, document); + Y.detach("keydown", handleUserEvent, document); + } + +}; + +//inherit event functionality +Y.augment(Y.IdleTimer, Y.Event.Target); \ No newline at end of file