123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- goog.provide('goog.ui.ActivityMonitor');
- goog.require('goog.array');
- goog.require('goog.asserts');
- goog.require('goog.dom');
- goog.require('goog.events.EventHandler');
- goog.require('goog.events.EventTarget');
- goog.require('goog.events.EventType');
- goog.ui.ActivityMonitor = function(opt_domHelper, opt_useBubble) {
- goog.events.EventTarget.call(this);
-
- this.documents_ = [];
-
- this.useBubble_ = !!opt_useBubble;
-
- this.eventHandler_ = new goog.events.EventHandler(this);
-
- this.isIframe_ = window.parent != window;
- if (!opt_domHelper) {
- this.addDocument(goog.dom.getDomHelper().getDocument());
- } else if (goog.isArray(opt_domHelper)) {
- for (var i = 0; i < opt_domHelper.length; i++) {
- this.addDocument(opt_domHelper[i].getDocument());
- }
- } else {
- this.addDocument(opt_domHelper.getDocument());
- }
-
- this.lastEventTime_ = goog.now();
- };
- goog.inherits(goog.ui.ActivityMonitor, goog.events.EventTarget);
- goog.tagUnsealableClass(goog.ui.ActivityMonitor);
- goog.ui.ActivityMonitor.prototype.lastEventType_ = '';
- goog.ui.ActivityMonitor.prototype.lastMouseX_;
- goog.ui.ActivityMonitor.prototype.lastMouseY_;
- goog.ui.ActivityMonitor.prototype.minEventTime_ = 0;
- goog.ui.ActivityMonitor.MIN_EVENT_SPACING = 3 * 1000;
- goog.ui.ActivityMonitor.userEventTypesBody_ = [
- goog.events.EventType.CLICK, goog.events.EventType.DBLCLICK,
- goog.events.EventType.MOUSEDOWN, goog.events.EventType.MOUSEMOVE,
- goog.events.EventType.MOUSEUP
- ];
- goog.ui.ActivityMonitor.userTouchEventTypesBody_ = [
- goog.events.EventType.TOUCHEND, goog.events.EventType.TOUCHMOVE,
- goog.events.EventType.TOUCHSTART
- ];
- goog.ui.ActivityMonitor.userEventTypesDocuments_ =
- [goog.events.EventType.KEYDOWN, goog.events.EventType.KEYUP];
- goog.ui.ActivityMonitor.Event = {
-
- ACTIVITY: 'activity'
- };
- goog.ui.ActivityMonitor.prototype.disposeInternal = function() {
- goog.ui.ActivityMonitor.superClass_.disposeInternal.call(this);
- this.eventHandler_.dispose();
- this.eventHandler_ = null;
- delete this.documents_;
- };
- goog.ui.ActivityMonitor.prototype.addDocument = function(doc) {
- if (goog.array.contains(this.documents_, doc)) {
- return;
- }
- this.documents_.push(doc);
- var useCapture = !this.useBubble_;
- var eventsToListenTo = goog.array.concat(
- goog.ui.ActivityMonitor.userEventTypesDocuments_,
- goog.ui.ActivityMonitor.userEventTypesBody_);
- if (!this.isIframe_) {
-
-
-
-
-
- goog.array.extend(
- eventsToListenTo, goog.ui.ActivityMonitor.userTouchEventTypesBody_);
- }
- this.eventHandler_.listen(
- doc, eventsToListenTo, this.handleEvent_, useCapture);
- };
- goog.ui.ActivityMonitor.prototype.removeDocument = function(doc) {
- if (this.isDisposed()) {
- return;
- }
- goog.array.remove(this.documents_, doc);
- var useCapture = !this.useBubble_;
- var eventsToUnlistenTo = goog.array.concat(
- goog.ui.ActivityMonitor.userEventTypesDocuments_,
- goog.ui.ActivityMonitor.userEventTypesBody_);
- if (!this.isIframe_) {
-
- goog.array.extend(
- eventsToUnlistenTo, goog.ui.ActivityMonitor.userTouchEventTypesBody_);
- }
- this.eventHandler_.unlisten(
- doc, eventsToUnlistenTo, this.handleEvent_, useCapture);
- };
- goog.ui.ActivityMonitor.prototype.handleEvent_ = function(e) {
- var update = false;
- switch (e.type) {
- case goog.events.EventType.MOUSEMOVE:
-
-
- if (typeof this.lastMouseX_ == 'number' &&
- this.lastMouseX_ != e.clientX ||
- typeof this.lastMouseY_ == 'number' &&
- this.lastMouseY_ != e.clientY) {
- update = true;
- }
- this.lastMouseX_ = e.clientX;
- this.lastMouseY_ = e.clientY;
- break;
- default:
- update = true;
- }
- if (update) {
- var type = goog.asserts.assertString(e.type);
- this.updateIdleTime(goog.now(), type);
- }
- };
- goog.ui.ActivityMonitor.prototype.resetTimer = function() {
- this.updateIdleTime(goog.now(), 'manual');
- };
- goog.ui.ActivityMonitor.prototype.updateIdleTime = function(
- eventTime, eventType) {
-
- this.lastEventTime_ = eventTime;
- this.lastEventType_ = eventType;
-
- if (eventTime > this.minEventTime_) {
- this.dispatchEvent(goog.ui.ActivityMonitor.Event.ACTIVITY);
- this.minEventTime_ = eventTime + goog.ui.ActivityMonitor.MIN_EVENT_SPACING;
- }
- };
- goog.ui.ActivityMonitor.prototype.getIdleTime = function(opt_now) {
- var now = opt_now || goog.now();
- return now - this.lastEventTime_;
- };
- goog.ui.ActivityMonitor.prototype.getLastEventType = function() {
- return this.lastEventType_;
- };
- goog.ui.ActivityMonitor.prototype.getLastEventTime = function() {
- return this.lastEventTime_;
- };
|