EventManager-more.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:10k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.0.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ /**
  2.  * @class Ext.EventManager
  3.  */
  4. Ext.apply(Ext.EventManager, function(){
  5. var resizeEvent, 
  6.      resizeTask, 
  7.      textEvent, 
  8.      textSize,
  9.      D = Ext.lib.Dom,
  10.      E = Ext.lib.Event,
  11.      propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/,
  12.         curWidth = 0,
  13.         curHeight = 0,
  14.         // note 1: IE fires ONLY the keydown event on specialkey autorepeat
  15.         // note 2: Safari < 3.1, Gecko (Mac/Linux) & Opera fire only the keypress event on specialkey autorepeat
  16.         // (research done by @Jan Wolter at http://unixpapa.com/js/key.html)
  17.         useKeydown = Ext.isSafari ? 
  18.                     Ext.num(navigator.userAgent.toLowerCase().match(/version/(d+.d)/)[1] || 2) >= 3.1 :
  19.                     !((Ext.isGecko && !Ext.isWindows) || Ext.isOpera);
  20.       
  21. return { 
  22. // private
  23.     doResizeEvent: function(){
  24.             var h = D.getViewHeight(),
  25.                 w = D.getViewWidth();
  26.             
  27.             //whacky problem in IE where the resize event will fire even though the w/h are the same.
  28.             if(curHeight != h || curWidth != w){
  29.                 resizeEvent.fire(curWidth = w, curHeight = h);
  30.             }
  31.     },
  32.     
  33.     /**
  34.      * Fires when the window is resized and provides resize event buffering (50 milliseconds), passes new viewport width and height to handlers.
  35.      * @param {Function} fn        The method the event invokes
  36.      * @param {Object}   scope    An object that becomes the scope of the handler
  37.      * @param {boolean}  options
  38.      */
  39.     onWindowResize : function(fn, scope, options){
  40.         if(!resizeEvent){
  41.             resizeEvent = new Ext.util.Event();
  42.             resizeTask = new Ext.util.DelayedTask(this.doResizeEvent);
  43.             E.on(window, "resize", this.fireWindowResize, this);
  44.         }
  45.         resizeEvent.addListener(fn, scope, options);
  46.     },
  47.     // exposed only to allow manual firing
  48.     fireWindowResize : function(){
  49.         if(resizeEvent){
  50.             if((Ext.isIE||Ext.isAir) && resizeTask){
  51.                 resizeTask.delay(50);
  52.             }else{
  53.                 resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
  54.             }
  55.         }
  56.     },
  57.     /**
  58.      * Fires when the user changes the active text size. Handler gets called with 2 params, the old size and the new size.
  59.      * @param {Function} fn        The method the event invokes
  60.      * @param {Object}   scope    An object that becomes the scope of the handler
  61.      * @param {boolean}  options
  62.      */
  63.     onTextResize : function(fn, scope, options){
  64.         if(!textEvent){
  65.             textEvent = new Ext.util.Event();
  66.             var textEl = new Ext.Element(document.createElement('div'));
  67.             textEl.dom.className = 'x-text-resize';
  68.             textEl.dom.innerHTML = 'X';
  69.             textEl.appendTo(document.body);
  70.             textSize = textEl.dom.offsetHeight;
  71.             setInterval(function(){
  72.                 if(textEl.dom.offsetHeight != textSize){
  73.                     textEvent.fire(textSize, textSize = textEl.dom.offsetHeight);
  74.                 }
  75.             }, this.textResizeInterval);
  76.         }
  77.         textEvent.addListener(fn, scope, options);
  78.     },
  79.     /**
  80.      * Removes the passed window resize listener.
  81.      * @param {Function} fn        The method the event invokes
  82.      * @param {Object}   scope    The scope of handler
  83.      */
  84.     removeResizeListener : function(fn, scope){
  85.         if(resizeEvent){
  86.             resizeEvent.removeListener(fn, scope);
  87.         }
  88.     },
  89.     // private
  90.     fireResize : function(){
  91.         if(resizeEvent){
  92.             resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
  93.         }
  94.     },
  95.     
  96.      /**
  97.      * The frequency, in milliseconds, to check for text resize events (defaults to 50)
  98.      */
  99.     textResizeInterval : 50,
  100.     
  101.     /**
  102.          * Url used for onDocumentReady with using SSL (defaults to Ext.SSL_SECURE_URL)
  103.          */
  104.         ieDeferSrc : false,
  105.         
  106.         // protected for use inside the framework
  107.         // detects whether we should use keydown or keypress based on the browser.
  108.         useKeydown: useKeydown
  109.     };
  110. }());
  111. Ext.EventManager.on = Ext.EventManager.addListener;
  112. Ext.apply(Ext.EventObjectImpl.prototype, {
  113.     /** Key constant @type Number */
  114.     BACKSPACE: 8,
  115.     /** Key constant @type Number */
  116.     TAB: 9,
  117.     /** Key constant @type Number */
  118.     NUM_CENTER: 12,
  119.     /** Key constant @type Number */
  120.     ENTER: 13,
  121.     /** Key constant @type Number */
  122.     RETURN: 13,
  123.     /** Key constant @type Number */
  124.     SHIFT: 16,
  125.     /** Key constant @type Number */
  126.     CTRL: 17,
  127.     CONTROL : 17, // legacy
  128.     /** Key constant @type Number */
  129.     ALT: 18,
  130.     /** Key constant @type Number */
  131.     PAUSE: 19,
  132.     /** Key constant @type Number */
  133.     CAPS_LOCK: 20,
  134.     /** Key constant @type Number */
  135.     ESC: 27,
  136.     /** Key constant @type Number */
  137.     SPACE: 32,
  138.     /** Key constant @type Number */
  139.     PAGE_UP: 33,
  140.     PAGEUP : 33, // legacy
  141.     /** Key constant @type Number */
  142.     PAGE_DOWN: 34,
  143.     PAGEDOWN : 34, // legacy
  144.     /** Key constant @type Number */
  145.     END: 35,
  146.     /** Key constant @type Number */
  147.     HOME: 36,
  148.     /** Key constant @type Number */
  149.     LEFT: 37,
  150.     /** Key constant @type Number */
  151.     UP: 38,
  152.     /** Key constant @type Number */
  153.     RIGHT: 39,
  154.     /** Key constant @type Number */
  155.     DOWN: 40,
  156.     /** Key constant @type Number */
  157.     PRINT_SCREEN: 44,
  158.     /** Key constant @type Number */
  159.     INSERT: 45,
  160.     /** Key constant @type Number */
  161.     DELETE: 46,
  162.     /** Key constant @type Number */
  163.     ZERO: 48,
  164.     /** Key constant @type Number */
  165.     ONE: 49,
  166.     /** Key constant @type Number */
  167.     TWO: 50,
  168.     /** Key constant @type Number */
  169.     THREE: 51,
  170.     /** Key constant @type Number */
  171.     FOUR: 52,
  172.     /** Key constant @type Number */
  173.     FIVE: 53,
  174.     /** Key constant @type Number */
  175.     SIX: 54,
  176.     /** Key constant @type Number */
  177.     SEVEN: 55,
  178.     /** Key constant @type Number */
  179.     EIGHT: 56,
  180.     /** Key constant @type Number */
  181.     NINE: 57,
  182.     /** Key constant @type Number */
  183.     A: 65,
  184.     /** Key constant @type Number */
  185.     B: 66,
  186.     /** Key constant @type Number */
  187.     C: 67,
  188.     /** Key constant @type Number */
  189.     D: 68,
  190.     /** Key constant @type Number */
  191.     E: 69,
  192.     /** Key constant @type Number */
  193.     F: 70,
  194.     /** Key constant @type Number */
  195.     G: 71,
  196.     /** Key constant @type Number */
  197.     H: 72,
  198.     /** Key constant @type Number */
  199.     I: 73,
  200.     /** Key constant @type Number */
  201.     J: 74,
  202.     /** Key constant @type Number */
  203.     K: 75,
  204.     /** Key constant @type Number */
  205.     L: 76,
  206.     /** Key constant @type Number */
  207.     M: 77,
  208.     /** Key constant @type Number */
  209.     N: 78,
  210.     /** Key constant @type Number */
  211.     O: 79,
  212.     /** Key constant @type Number */
  213.     P: 80,
  214.     /** Key constant @type Number */
  215.     Q: 81,
  216.     /** Key constant @type Number */
  217.     R: 82,
  218.     /** Key constant @type Number */
  219.     S: 83,
  220.     /** Key constant @type Number */
  221.     T: 84,
  222.     /** Key constant @type Number */
  223.     U: 85,
  224.     /** Key constant @type Number */
  225.     V: 86,
  226.     /** Key constant @type Number */
  227.     W: 87,
  228.     /** Key constant @type Number */
  229.     X: 88,
  230.     /** Key constant @type Number */
  231.     Y: 89,
  232.     /** Key constant @type Number */
  233.     Z: 90,
  234.     /** Key constant @type Number */
  235.     CONTEXT_MENU: 93,
  236.     /** Key constant @type Number */
  237.     NUM_ZERO: 96,
  238.     /** Key constant @type Number */
  239.     NUM_ONE: 97,
  240.     /** Key constant @type Number */
  241.     NUM_TWO: 98,
  242.     /** Key constant @type Number */
  243.     NUM_THREE: 99,
  244.     /** Key constant @type Number */
  245.     NUM_FOUR: 100,
  246.     /** Key constant @type Number */
  247.     NUM_FIVE: 101,
  248.     /** Key constant @type Number */
  249.     NUM_SIX: 102,
  250.     /** Key constant @type Number */
  251.     NUM_SEVEN: 103,
  252.     /** Key constant @type Number */
  253.     NUM_EIGHT: 104,
  254.     /** Key constant @type Number */
  255.     NUM_NINE: 105,
  256.     /** Key constant @type Number */
  257.     NUM_MULTIPLY: 106,
  258.     /** Key constant @type Number */
  259.     NUM_PLUS: 107,
  260.     /** Key constant @type Number */
  261.     NUM_MINUS: 109,
  262.     /** Key constant @type Number */
  263.     NUM_PERIOD: 110,
  264.     /** Key constant @type Number */
  265.     NUM_DIVISION: 111,
  266.     /** Key constant @type Number */
  267.     F1: 112,
  268.     /** Key constant @type Number */
  269.     F2: 113,
  270.     /** Key constant @type Number */
  271.     F3: 114,
  272.     /** Key constant @type Number */
  273.     F4: 115,
  274.     /** Key constant @type Number */
  275.     F5: 116,
  276.     /** Key constant @type Number */
  277.     F6: 117,
  278.     /** Key constant @type Number */
  279.     F7: 118,
  280.     /** Key constant @type Number */
  281.     F8: 119,
  282.     /** Key constant @type Number */
  283.     F9: 120,
  284.     /** Key constant @type Number */
  285.     F10: 121,
  286.     /** Key constant @type Number */
  287.     F11: 122,
  288.     /** Key constant @type Number */
  289.     F12: 123,
  290.     
  291.     /** @private */
  292.     isNavKeyPress : function(){
  293.         var me = this,
  294.          k = this.normalizeKey(me.keyCode);
  295.         return (k >= 33 && k <= 40) ||  // Page Up/Down, End, Home, Left, Up, Right, Down
  296. k == me.RETURN ||
  297. k == me.TAB ||
  298. k == me.ESC;
  299.     },
  300.     isSpecialKey : function(){
  301.         var k = this.normalizeKey(this.keyCode);
  302.         return (this.type == 'keypress' && this.ctrlKey) ||
  303. this.isNavKeyPress() ||
  304.         (k == this.BACKSPACE) || // Backspace
  305. (k >= 16 && k <= 20) || // Shift, Ctrl, Alt, Pause, Caps Lock
  306. (k >= 44 && k <= 45);   // Print Screen, Insert
  307.     },
  308. getPoint : function(){
  309.     return new Ext.lib.Point(this.xy[0], this.xy[1]);
  310. },
  311.     /**
  312.      * Returns true if the control, meta, shift or alt key was pressed during this event.
  313.      * @return {Boolean}
  314.      */
  315.     hasModifier : function(){
  316.         return ((this.ctrlKey || this.altKey) || this.shiftKey);
  317.     }
  318. });