| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-menu-KeyNav'>/**</span> * @private */Ext.define('Ext.menu.KeyNav', {    extend: 'Ext.util.KeyNav',    requires: ['Ext.FocusManager'],        constructor: function(menu) {        var me = this;        me.menu = menu;        me.callParent([menu.el, {            down: me.down,            enter: me.enter,            esc: me.escape,            left: me.left,            right: me.right,            space: me.enter,            tab: me.tab,            up: me.up        }]);    },    down: function(e) {        var me = this,            fi = me.menu.focusedItem;        if (fi && e.getKey() == Ext.EventObject.DOWN && me.isWhitelisted(fi)) {            return true;        }        me.focusNextItem(1);    },    enter: function(e) {        var menu = this.menu,            focused = menu.focusedItem;         if (menu.activeItem) {            menu.onClick(e);        } else if (focused && focused.isFormField) {            // prevent stopEvent being called            return true;        }    },    escape: function(e) {        Ext.menu.Manager.hideAll();    },    focusNextItem: function(step) {        var menu = this.menu,            items = menu.items,            focusedItem = menu.focusedItem,            startIdx = focusedItem ? items.indexOf(focusedItem) : -1,            idx = startIdx + step,            item;        while (idx != startIdx) {            if (idx < 0) {                idx = items.length - 1;            } else if (idx >= items.length) {                idx = 0;            }            item = items.getAt(idx);            if (menu.canActivateItem(item)) {                menu.setActiveItem(item);                break;            }            idx += step;        }    },    isWhitelisted: function(item) {        return Ext.FocusManager.isWhitelisted(item);    },    left: function(e) {        var menu = this.menu,            fi = menu.focusedItem,            ai = menu.activeItem;        if (fi && this.isWhitelisted(fi)) {            return true;        }        menu.hide();        if (menu.parentMenu) {            menu.parentMenu.focus();        }    },    right: function(e) {        var menu = this.menu,            fi = menu.focusedItem,            ai = menu.activeItem,            am;        if (fi && this.isWhitelisted(fi)) {            return true;        }        if (ai) {            am = menu.activeItem.menu;            if (am) {                ai.expandMenu(0);                Ext.defer(function() {                    am.setActiveItem(am.items.getAt(0));                }, 25);            }        }    },    tab: function(e) {        var me = this;        if (e.shiftKey) {            me.up(e);        } else {            me.down(e);        }    },    up: function(e) {        var me = this,            fi = me.menu.focusedItem;        if (fi && e.getKey() == Ext.EventObject.UP && me.isWhitelisted(fi)) {            return true;        }        me.focusNextItem(-1);    }});</pre></body></html>
 |