123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- goog.provide('goog.events.InputHandler');
- goog.provide('goog.events.InputHandler.EventType');
- goog.require('goog.Timer');
- goog.require('goog.dom.TagName');
- goog.require('goog.events.BrowserEvent');
- goog.require('goog.events.EventHandler');
- goog.require('goog.events.EventTarget');
- goog.require('goog.events.KeyCodes');
- goog.require('goog.userAgent');
- goog.events.InputHandler = function(element) {
- goog.events.InputHandler.base(this, 'constructor');
-
- this.timer_ = null;
-
- this.element_ = element;
-
-
-
-
-
-
-
-
-
- var emulateInputEvents = goog.userAgent.IE || goog.userAgent.EDGE ||
- (goog.userAgent.WEBKIT && !goog.userAgent.isVersionOrHigher('531') &&
- element.tagName == goog.dom.TagName.TEXTAREA);
-
- this.eventHandler_ = new goog.events.EventHandler(this);
-
-
-
-
-
-
-
- this.eventHandler_.listen(
- this.element_,
- emulateInputEvents ? ['keydown', 'paste', 'cut', 'drop', 'input'] :
- 'input',
- this);
- };
- goog.inherits(goog.events.InputHandler, goog.events.EventTarget);
- goog.events.InputHandler.EventType = {
- INPUT: 'input'
- };
- goog.events.InputHandler.prototype.handleEvent = function(e) {
- if (e.type == 'input') {
-
-
-
-
- if (goog.userAgent.IE && goog.userAgent.isVersionOrHigher(10) &&
- e.keyCode == 0 && e.charCode == 0) {
- return;
- }
-
-
-
- this.cancelTimerIfSet_();
- this.dispatchEvent(this.createInputEvent_(e));
- } else {
-
- if (e.type == 'keydown' &&
- !goog.events.KeyCodes.isTextModifyingKeyEvent(e)) {
- return;
- }
-
-
-
-
- var valueBeforeKey = e.type == 'keydown' ? this.element_.value : null;
-
-
-
-
-
-
- if (goog.userAgent.IE && e.keyCode == goog.events.KeyCodes.WIN_IME) {
- valueBeforeKey = null;
- }
-
-
- var inputEvent = this.createInputEvent_(e);
-
-
-
- this.cancelTimerIfSet_();
- this.timer_ = goog.Timer.callOnce(function() {
- this.timer_ = null;
- if (this.element_.value != valueBeforeKey) {
- this.dispatchEvent(inputEvent);
- }
- }, 0, this);
- }
- };
- goog.events.InputHandler.prototype.cancelTimerIfSet_ = function() {
- if (this.timer_ != null) {
- goog.Timer.clear(this.timer_);
- this.timer_ = null;
- }
- };
- goog.events.InputHandler.prototype.createInputEvent_ = function(be) {
- var e = new goog.events.BrowserEvent(be.getBrowserEvent());
- e.type = goog.events.InputHandler.EventType.INPUT;
- return e;
- };
- goog.events.InputHandler.prototype.disposeInternal = function() {
- goog.events.InputHandler.base(this, 'disposeInternal');
- this.eventHandler_.dispose();
- this.cancelTimerIfSet_();
- delete this.element_;
- };
|