module OnIdle def on_idle(timeout, options, wakeoptions) timeout *= 1000 remote = remote_function(options) wakeremote = remote_function(wakeoptions) javascript_tag(" var alarm = { remind: function() { this.idle = 1; #{remote} ; delete this.timeoutID; this.setup(this.ms * 2); }, setup: function(ms) { this.cancel(); var self = this; self.ms = ms; this.timeoutID = window.setTimeout(function(msg) {self.remind();}, ms); }, wake: function() { if (this.idle == 1) { #{wakeremote} ; } this.idle = 0; }, cancel: function() { if(typeof this.timeoutID == \"number\") { window.clearTimeout(this.timeoutID); delete this.timeoutID; } } }; alarm.setup(#{timeout}); window.onblur = function() { alarm.setup(#{timeout}) ; alarm.wake(); }; window.onfocus = function() { alarm.setup(#{timeout}) ; alarm.wake(); }; window.onmousemove = function() { alarm.setup(#{timeout}) ; alarm.wake(); }; ") end end