EventManager-more.js
上传用户:dawnssy
上传日期:2022-08-06
资源大小:9345k
文件大小:10k
源码类别:

JavaScript

开发平台:

JavaScript

  1. /*!
  2.  * Ext JS Library 3.1.0
  3.  * Copyright(c) 2006-2009 Ext JS, LLC
  4.  * licensing@extjs.com
  5.  * http://www.extjs.com/license
  6.  */
  7. /**
  8. * @class Ext.EventManager
  9. */
  10. Ext.apply(Ext.EventManager, function(){
  11.    var resizeEvent,
  12.        resizeTask,
  13.        textEvent,
  14.        textSize,
  15.        D = Ext.lib.Dom,
  16.        propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/,
  17.        curWidth = 0,
  18.        curHeight = 0,
  19.        // note 1: IE fires ONLY the keydown event on specialkey autorepeat
  20.        // note 2: Safari < 3.1, Gecko (Mac/Linux) & Opera fire only the keypress event on specialkey autorepeat
  21.        // (research done by @Jan Wolter at http://unixpapa.com/js/key.html)
  22.        useKeydown = Ext.isWebKit ?
  23.                    Ext.num(navigator.userAgent.match(/AppleWebKit/(d+)/)[1]) >= 525 :
  24.                    !((Ext.isGecko && !Ext.isWindows) || Ext.isOpera);
  25.    return {
  26.        // private
  27.        doResizeEvent: function(){
  28.            var h = D.getViewHeight(),
  29.                w = D.getViewWidth();
  30.            //whacky problem in IE where the resize event will fire even though the w/h are the same.
  31.            if(curHeight != h || curWidth != w){
  32.                resizeEvent.fire(curWidth = w, curHeight = h);
  33.            }
  34.        },
  35.        /**
  36.         * Adds a listener to be notified when the browser window is resized and provides resize event buffering (50 milliseconds),
  37.         * passes new viewport width and height to handlers.
  38.         * @param {Function} fn      The handler function the window resize event invokes.
  39.         * @param {Object}   scope   The scope (<code>this</code> reference) in which the handler function executes. Defaults to the browser window.
  40.         * @param {boolean}  options Options object as passed to {@link Ext.Element#addListener}
  41.         */
  42.        onWindowResize : function(fn, scope, options){
  43.            if(!resizeEvent){
  44.                resizeEvent = new Ext.util.Event();
  45.                resizeTask = new Ext.util.DelayedTask(this.doResizeEvent);
  46.                Ext.EventManager.on(window, "resize", this.fireWindowResize, this);
  47.            }
  48.            resizeEvent.addListener(fn, scope, options);
  49.        },
  50.        // exposed only to allow manual firing
  51.        fireWindowResize : function(){
  52.            if(resizeEvent){
  53.                if((Ext.isIE||Ext.isAir) && resizeTask){
  54.                    resizeTask.delay(50);
  55.                }else{
  56.                    resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
  57.                }
  58.            }
  59.        },
  60.        /**
  61.         * Adds a listener to be notified when the user changes the active text size. Handler gets called with 2 params, the old size and the new size.
  62.         * @param {Function} fn      The function the event invokes.
  63.         * @param {Object}   scope   The scope (<code>this</code> reference) in which the handler function executes. Defaults to the browser window.
  64.         * @param {boolean}  options Options object as passed to {@link Ext.Element#addListener}
  65.         */
  66.        onTextResize : function(fn, scope, options){
  67.            if(!textEvent){
  68.                textEvent = new Ext.util.Event();
  69.                var textEl = new Ext.Element(document.createElement('div'));
  70.                textEl.dom.className = 'x-text-resize';
  71.                textEl.dom.innerHTML = 'X';
  72.                textEl.appendTo(document.body);
  73.                textSize = textEl.dom.offsetHeight;
  74.                setInterval(function(){
  75.                    if(textEl.dom.offsetHeight != textSize){
  76.                        textEvent.fire(textSize, textSize = textEl.dom.offsetHeight);
  77.                    }
  78.                }, this.textResizeInterval);
  79.            }
  80.            textEvent.addListener(fn, scope, options);
  81.        },
  82.        /**
  83.         * Removes the passed window resize listener.
  84.         * @param {Function} fn        The method the event invokes
  85.         * @param {Object}   scope    The scope of handler
  86.         */
  87.        removeResizeListener : function(fn, scope){
  88.            if(resizeEvent){
  89.                resizeEvent.removeListener(fn, scope);
  90.            }
  91.        },
  92.        // private
  93.        fireResize : function(){
  94.            if(resizeEvent){
  95.                resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
  96.            }
  97.        },
  98.         /**
  99.         * The frequency, in milliseconds, to check for text resize events (defaults to 50)
  100.         */
  101.        textResizeInterval : 50,
  102.        /**
  103.         * Url used for onDocumentReady with using SSL (defaults to Ext.SSL_SECURE_URL)
  104.         */
  105.        ieDeferSrc : false,
  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.    /** @private */
  291.    isNavKeyPress : function(){
  292.        var me = this,
  293.            k = this.normalizeKey(me.keyCode);
  294.        return (k >= 33 && k <= 40) ||  // Page Up/Down, End, Home, Left, Up, Right, Down
  295.        k == me.RETURN ||
  296.        k == me.TAB ||
  297.        k == me.ESC;
  298.    },
  299.    isSpecialKey : function(){
  300.        var k = this.normalizeKey(this.keyCode);
  301.        return (this.type == 'keypress' && this.ctrlKey) ||
  302.        this.isNavKeyPress() ||
  303.        (k == this.BACKSPACE) || // Backspace
  304.        (k >= 16 && k <= 20) || // Shift, Ctrl, Alt, Pause, Caps Lock
  305.        (k >= 44 && k <= 45);   // Print Screen, Insert
  306.    },
  307.    getPoint : function(){
  308.        return new Ext.lib.Point(this.xy[0], this.xy[1]);
  309.    },
  310.    /**
  311.     * Returns true if the control, meta, shift or alt key was pressed during this event.
  312.     * @return {Boolean}
  313.     */
  314.    hasModifier : function(){
  315.        return ((this.ctrlKey || this.altKey) || this.shiftKey);
  316.    }
  317. });