| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- Ext.EventManager = function(){
- var docReadyEvent, docReadyProcId, docReadyState = false;
- var resizeEvent, resizeTask, textEvent, textSize;
- var E = Ext.lib.Event;
- var D = Ext.lib.Dom;
- // fix parser confusion
- var xname = 'Ex' + 't';
- var elHash = {};
- var addListener = function(el, ename, fn, wrap, scope){
- var id = Ext.id(el);
- if(!elHash[id]){
- elHash[id] = {};
- }
- var es = elHash[id];
- if(!es[ename]){
- es[ename] = [];
- }
- var ls = es[ename];
- ls.push({
- id: id,
- ename: ename,
- fn: fn,
- wrap: wrap,
- scope: scope
- });
- E.on(el, ename, wrap);
- if(ename == "mousewheel" && el.addEventListener){ // workaround for jQuery
- el.addEventListener("DOMMouseScroll", wrap, false);
- E.on(window, 'unload', function(){
- el.removeEventListener("DOMMouseScroll", wrap, false);
- });
- }
- if(ename == "mousedown" && el == document){ // fix stopped mousedowns on the document
- Ext.EventManager.stoppedMouseDownEvent.addListener(wrap);
- }
- };
- var removeListener = function(el, ename, fn, scope){
- el = Ext.getDom(el);
- var id = Ext.id(el), es = elHash[id], wrap;
- if(es){
- var ls = es[ename], l;
- if(ls){
- for(var i = 0, len = ls.length; i < len; i++){
- l = ls[i];
- if(l.fn == fn && (!scope || l.scope == scope)){
- wrap = l.wrap;
- E.un(el, ename, wrap);
- ls.splice(i, 1);
- break;
- }
- }
- }
- }
- if(ename == "mousewheel" && el.addEventListener && wrap){
- el.removeEventListener("DOMMouseScroll", wrap, false);
- }
- if(ename == "mousedown" && el == document && wrap){ // fix stopped mousedowns on the document
- Ext.EventManager.stoppedMouseDownEvent.removeListener(wrap);
- }
- };
- var removeAll = function(el){
- el = Ext.getDom(el);
- var id = Ext.id(el), es = elHash[id], ls;
- if(es){
- for(var ename in es){
- if(es.hasOwnProperty(ename)){
- ls = es[ename];
- for(var i = 0, len = ls.length; i < len; i++){
- E.un(el, ename, ls[i].wrap);
- ls[i] = null;
- }
- }
- es[ename] = null;
- }
- delete elHash[id];
- }
- };
- var fireDocReady = function(){
- if(!docReadyState){
- docReadyState = true;
- Ext.isReady = true;
- if(docReadyProcId){
- clearInterval(docReadyProcId);
- }
- if(Ext.isGecko || Ext.isOpera) {
- document.removeEventListener("DOMContentLoaded", fireDocReady, false);
- }
- if(Ext.isIE){
- var defer = document.getElementById("ie-deferred-loader");
- if(defer){
- defer.onreadystatechange = null;
- defer.parentNode.removeChild(defer);
- }
- }
- if(docReadyEvent){
- docReadyEvent.fire();
- docReadyEvent.clearListeners();
- }
- }
- };
- var initDocReady = function(){
- docReadyEvent = new Ext.util.Event();
- if(Ext.isGecko || Ext.isOpera) {
- document.addEventListener("DOMContentLoaded", fireDocReady, false);
- }else if(Ext.isIE){
- document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");
- var defer = document.getElementById("ie-deferred-loader");
- defer.onreadystatechange = function(){
- if(this.readyState == "complete"){
- fireDocReady();
- }
- };
- }else if(Ext.isSafari){
- docReadyProcId = setInterval(function(){
- var rs = document.readyState;
- if(rs == "complete") {
- fireDocReady();
- }
- }, 10);
- }
-
- E.on(window, "load", fireDocReady);
- };
- var createBuffered = function(h, o){
- var task = new Ext.util.DelayedTask(h);
- return function(e){
-
- e = new Ext.EventObjectImpl(e);
- task.delay(o.buffer, h, null, [e]);
- };
- };
- var createSingle = function(h, el, ename, fn){
- return function(e){
- Ext.EventManager.removeListener(el, ename, fn);
- h(e);
- };
- };
- var createDelayed = function(h, o){
- return function(e){
-
- e = new Ext.EventObjectImpl(e);
- setTimeout(function(){
- h(e);
- }, o.delay || 10);
- };
- };
- var listen = function(element, ename, opt, fn, scope){
- var o = (!opt || typeof opt == "boolean") ? {} : opt;
- fn = fn || o.fn; scope = scope || o.scope;
- var el = Ext.getDom(element);
- if(!el){
- throw "Error listening for \"" + ename + '\". Element "' + element + '" doesn\'t exist.';
- }
- var h = function(e){
- e = Ext.EventObject.setEvent(e);
- var t;
- if(o.delegate){
- t = e.getTarget(o.delegate, el);
- if(!t){
- return;
- }
- }else{
- t = e.target;
- }
- if(o.stopEvent === true){
- e.stopEvent();
- }
- if(o.preventDefault === true){
- e.preventDefault();
- }
- if(o.stopPropagation === true){
- e.stopPropagation();
- }
- if(o.normalized === false){
- e = e.browserEvent;
- }
- fn.call(scope || el, e, t, o);
- };
- if(o.delay){
- h = createDelayed(h, o);
- }
- if(o.single){
- h = createSingle(h, el, ename, fn);
- }
- if(o.buffer){
- h = createBuffered(h, o);
- }
- fn._handlers = fn._handlers || [];
- fn._handlers.push([Ext.id(el), ename, h]);
- E.on(el, ename, h);
- if(ename == "mousewheel" && el.addEventListener){
- el.addEventListener("DOMMouseScroll", h, false);
- E.on(window, 'unload', function(){
- el.removeEventListener("DOMMouseScroll", h, false);
- });
- }
- if(ename == "mousedown" && el == document){
- Ext.EventManager.stoppedMouseDownEvent.addListener(h);
- }
- return h;
- };
- var stopListening = function(el, ename, fn){
- var id = Ext.id(el), hds = fn._handlers, hd = fn;
- if(hds){
- for(var i = 0, len = hds.length; i < len; i++){
- var h = hds[i];
- if(h[0] == id && h[1] == ename){
- hd = h[2];
- hds.splice(i, 1);
- break;
- }
- }
- }
- E.un(el, ename, hd);
- el = Ext.getDom(el);
- if(ename == "mousewheel" && el.addEventListener){
- el.removeEventListener("DOMMouseScroll", hd, false);
- }
- if(ename == "mousedown" && el == document){
- Ext.EventManager.stoppedMouseDownEvent.removeListener(hd);
- }
- };
- var propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;
- var pub = {
-
- addListener : function(element, eventName, fn, scope, options){
- if(typeof eventName == "object"){
- var o = eventName;
- for(var e in o){
- if(propRe.test(e)){
- continue;
- }
- if(typeof o[e] == "function"){
-
- listen(element, e, o, o[e], o.scope);
- }else{
-
- listen(element, e, o[e]);
- }
- }
- return;
- }
- return listen(element, eventName, options, fn, scope);
- },
-
- removeListener : function(element, eventName, fn){
- return stopListening(element, eventName, fn);
- },
- removeAll : function(element){
- return removeAll(element);
- },
-
- onDocumentReady : function(fn, scope, options){
- if(docReadyState){
- docReadyEvent.addListener(fn, scope, options);
- docReadyEvent.fire();
- docReadyEvent.clearListeners();
- return;
- }
- if(!docReadyEvent){
- initDocReady();
- }
- options = options || {};
- if(!options.delay) {
- options.delay = 1;
- }
- docReadyEvent.addListener(fn, scope, options);
- },
-
- onWindowResize : function(fn, scope, options){
- if(!resizeEvent){
- resizeEvent = new Ext.util.Event();
- resizeTask = new Ext.util.DelayedTask(function(){
- resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
- });
- E.on(window, "resize", this.fireWindowResize, this);
- }
- resizeEvent.addListener(fn, scope, options);
- },
-
- fireWindowResize : function(){
- if(resizeEvent){
- if((Ext.isIE||Ext.isAir) && resizeTask){
- resizeTask.delay(50);
- }else{
- resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
- }
- }
- },
-
- onTextResize : function(fn, scope, options){
- if(!textEvent){
- textEvent = new Ext.util.Event();
- var textEl = new Ext.Element(document.createElement('div'));
- textEl.dom.className = 'x-text-resize';
- textEl.dom.innerHTML = 'X';
- textEl.appendTo(document.body);
- textSize = textEl.dom.offsetHeight;
- setInterval(function(){
- if(textEl.dom.offsetHeight != textSize){
- textEvent.fire(textSize, textSize = textEl.dom.offsetHeight);
- }
- }, this.textResizeInterval);
- }
- textEvent.addListener(fn, scope, options);
- },
-
- removeResizeListener : function(fn, scope){
- if(resizeEvent){
- resizeEvent.removeListener(fn, scope);
- }
- },
-
- fireResize : function(){
- if(resizeEvent){
- resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
- }
- },
-
- ieDeferSrc : false,
-
- textResizeInterval : 50
- };
-
- pub.on = pub.addListener;
-
- pub.un = pub.removeListener;
- pub.stoppedMouseDownEvent = new Ext.util.Event();
- return pub;
- }();
- Ext.onReady = Ext.EventManager.onDocumentReady;
- Ext.onReady(function(){
- var bd = Ext.getBody();
- if(!bd){ return; }
- var cls = [
- Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : 'ext-ie7')
- : Ext.isGecko ? "ext-gecko"
- : Ext.isOpera ? "ext-opera"
- : Ext.isSafari ? "ext-safari" : ""];
- if(Ext.isMac){
- cls.push("ext-mac");
- }
- if(Ext.isLinux){
- cls.push("ext-linux");
- }
- if(Ext.isBorderBox){
- cls.push('ext-border-box');
- }
- if(Ext.isStrict){
- var p = bd.dom.parentNode;
- if(p){
- p.className += ' ext-strict';
- }
- }
- bd.addClass(cls.join(' '));
- });
|