| | 896 | observers: false, |
|---|
| | 897 | |
|---|
| | 898 | _observeAndCache: function(element, name, observer, useCapture) { |
|---|
| | 899 | if (!this.observers) this.observers = []; |
|---|
| | 900 | if (element.addEventListener) { |
|---|
| | 901 | this.observers.push([element, name, observer, useCapture]); |
|---|
| | 902 | element.addEventListener(name, observer, useCapture); |
|---|
| | 903 | } else if (element.attachEvent) { |
|---|
| | 904 | this.observers.push([element, name, observer, useCapture]); |
|---|
| | 905 | element.attachEvent('on' + name, observer); |
|---|
| | 906 | } |
|---|
| | 907 | }, |
|---|
| | 908 | |
|---|
| | 909 | unloadCache: function() { |
|---|
| | 910 | if (!Event.observers) return; |
|---|
| | 911 | for (var i = 0; i < Event.observers.length; i++) { |
|---|
| | 912 | Event.stopObserving.apply(this, Event.observers[i]); |
|---|
| | 913 | Event.observers[i][0] = null; |
|---|
| | 914 | } |
|---|
| | 915 | Event.observers = false; |
|---|
| | 916 | }, |
|---|
| | 917 | |
|---|
| 896 | | if (name == 'keypress') { |
|---|
| 897 | | if (navigator.appVersion.indexOf('AppleWebKit') > 0) { |
|---|
| 898 | | element.addEventListener('keydown', observer, useCapture); |
|---|
| 899 | | return; |
|---|
| 900 | | } |
|---|
| 901 | | if (element.addEventListener) { |
|---|
| 902 | | element.addEventListener('keypress', observer, useCapture); |
|---|
| 903 | | } else if (element.attachEvent) { |
|---|
| 904 | | element.attachEvent('onkeydown', observer); |
|---|
| 905 | | } |
|---|
| 906 | | } else { |
|---|
| 907 | | if (element.addEventListener) { |
|---|
| 908 | | element.addEventListener(name, observer, useCapture); |
|---|
| 909 | | } else if (element.attachEvent) { |
|---|
| 910 | | element.attachEvent('on' + name, observer); |
|---|
| 911 | | } |
|---|
| 912 | | } |
|---|
| | 922 | if (name == 'keypress' && |
|---|
| | 923 | ((navigator.appVersion.indexOf('AppleWebKit') > 0) |
|---|
| | 924 | || element.attachEvent)) |
|---|
| | 925 | name = 'keydown'; |
|---|
| | 926 | |
|---|
| | 927 | this._observeAndCache(element, name, observer, useCapture); |
|---|
| 919 | | if (name == 'keypress') { |
|---|
| 920 | | if (navigator.appVersion.indexOf('AppleWebKit') > 0) { |
|---|
| 921 | | element.removeEventListener('keydown', observer, useCapture); |
|---|
| 922 | | return; |
|---|
| 923 | | } |
|---|
| 924 | | if (element.removeEventListener) { |
|---|
| 925 | | element.removeEventListener('keypress', observer, useCapture); |
|---|
| 926 | | } else if (element.detachEvent) { |
|---|
| 927 | | element.detachEvent('onkeydown', observer); |
|---|
| 928 | | } |
|---|
| 929 | | } else { |
|---|
| 930 | | if (element.removeEventListener) { |
|---|
| 931 | | element.removeEventListener(name, observer, useCapture); |
|---|
| 932 | | } else if (element.detachEvent) { |
|---|
| 933 | | element.detachEvent('on' + name, observer); |
|---|
| 934 | | } |
|---|
| 935 | | } |
|---|
| 936 | | } |
|---|
| 937 | | }); |
|---|
| | 934 | if (name == 'keypress' && |
|---|
| | 935 | ((navigator.appVersion.indexOf('AppleWebKit') > 0) |
|---|
| | 936 | || element.detachEvent)) |
|---|
| | 937 | name = 'keydown'; |
|---|
| | 938 | |
|---|
| | 939 | if (element.removeEventListener) { |
|---|
| | 940 | element.removeEventListener(name, observer, useCapture); |
|---|
| | 941 | } else if (element.detachEvent) { |
|---|
| | 942 | element.detachEvent('on' + name, observer); |
|---|
| | 943 | } |
|---|
| | 944 | } |
|---|
| | 945 | }); |
|---|
| | 946 | |
|---|
| | 947 | /* prevent memory leaks in IE */ |
|---|
| | 948 | Event.observe(window, 'unload', Event.unloadCache, false); |
|---|