| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 | 
							- <!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-Manager'>/**
 
- </span> * Provides a common registry of all menus on a page.
 
-  * @singleton
 
-  */
 
- Ext.define('Ext.menu.Manager', {
 
-     singleton: true,
 
-     requires: [
 
-         'Ext.util.MixedCollection',
 
-         'Ext.util.KeyMap'
 
-     ],
 
-     alternateClassName: 'Ext.menu.MenuMgr',
 
-     uses: ['Ext.menu.Menu'],
 
-     menus: {},
 
-     groups: {},
 
-     attached: false,
 
-     lastShow: new Date(),
 
-     init: function() {
 
-         var me = this;
 
-         
 
-         me.active = new Ext.util.MixedCollection();
 
-         Ext.getDoc().addKeyListener(27, function() {
 
-             if (me.active.length > 0) {
 
-                 me.hideAll();
 
-             }
 
-         }, me);
 
-     },
 
- <span id='Ext-menu-Manager-method-hideAll'>    /**
 
- </span>     * Hides all menus that are currently visible
 
-      * @return {Boolean} success True if any active menus were hidden.
 
-      */
 
-     hideAll: function() {
 
-         var active = this.active,
 
-         clone, menus, m, mLen;
 
-         if (active && active.length > 0) {
 
-             clone = active.clone();
 
-             menus = clone.items;
 
-             mLen  = menus.length;
 
-             for (m = 0; m < mLen; m++) {
 
-                 menus[m].hide();
 
-             }
 
-             return true;
 
-         }
 
-         return false;
 
-     },
 
-     onHide: function(m) {
 
-         var me = this,
 
-             active = me.active;
 
-         active.remove(m);
 
-         if (active.length < 1) {
 
-             Ext.getDoc().un('mousedown', me.onMouseDown, me);
 
-             me.attached = false;
 
-         }
 
-     },
 
-     onShow: function(m) {
 
-         var me = this,
 
-             active   = me.active,
 
-             last     = active.last(),
 
-             attached = me.attached,
 
-             menuEl   = m.getEl(),
 
-             zIndex;
 
-         me.lastShow = new Date();
 
-         active.add(m);
 
-         if (!attached) {
 
-             Ext.getDoc().on('mousedown', me.onMouseDown, me, {
 
-                 // On IE we have issues with the menu stealing focus at certain points
 
-                 // during the head, so give it a short buffer
 
-                 buffer: Ext.isIE ? 10 : undefined
 
-             });
 
-             me.attached = true;
 
-         }
 
-         m.toFront();
 
-     },
 
-     onBeforeHide: function(m) {
 
-         if (m.activeChild) {
 
-             m.activeChild.hide();
 
-         }
 
-         if (m.autoHideTimer) {
 
-             clearTimeout(m.autoHideTimer);
 
-             delete m.autoHideTimer;
 
-         }
 
-     },
 
-     onBeforeShow: function(m) {
 
-         var active = this.active,
 
-             parentMenu = m.parentMenu;
 
-             
 
-         active.remove(m);
 
-         if (!parentMenu && !m.allowOtherMenus) {
 
-             this.hideAll();
 
-         }
 
-         else if (parentMenu && parentMenu.activeChild && m != parentMenu.activeChild) {
 
-             parentMenu.activeChild.hide();
 
-         }
 
-     },
 
-     // private
 
-     onMouseDown: function(e) {
 
-         var me = this,
 
-             active = me.active,
 
-             lastShow = me.lastShow;
 
-         if (Ext.Date.getElapsed(lastShow) > 50 && active.length > 0 && !e.getTarget('.' + Ext.baseCSSPrefix + 'menu')) {
 
-             me.hideAll();
 
-         }
 
-     },
 
-     // private
 
-     register: function(menu) {
 
-         var me = this;
 
-         if (!me.active) {
 
-             me.init();
 
-         }
 
-         if (menu.floating) {
 
-             me.menus[menu.id] = menu;
 
-             menu.on({
 
-                 beforehide: me.onBeforeHide,
 
-                 hide: me.onHide,
 
-                 beforeshow: me.onBeforeShow,
 
-                 show: me.onShow,
 
-                 scope: me
 
-             });
 
-         }
 
-     },
 
- <span id='Ext-menu-Manager-method-get'>    /**
 
- </span>     * Returns a {@link Ext.menu.Menu} object
 
-      * @param {String/Object} menu The string menu id, an existing menu object reference, or a Menu config that will
 
-      * be used to generate and return a new Menu this.
 
-      * @return {Ext.menu.Menu} The specified menu, or null if none are found
 
-      */
 
-     get: function(menu) {
 
-         var menus = this.menus;
 
-         
 
-         if (typeof menu == 'string') { // menu id
 
-             if (!menus) {  // not initialized, no menus to return
 
-                 return null;
 
-             }
 
-             return menus[menu];
 
-         } else if (menu.isMenu) {  // menu instance
 
-             return menu;
 
-         } else if (Ext.isArray(menu)) { // array of menu items
 
-             return new Ext.menu.Menu({items:menu});
 
-         } else { // otherwise, must be a config
 
-             return Ext.ComponentManager.create(menu, 'menu');
 
-         }
 
-     },
 
-     // private
 
-     unregister: function(menu) {
 
-         var me = this,
 
-             menus = me.menus,
 
-             active = me.active;
 
-         delete menus[menu.id];
 
-         active.remove(menu);
 
-         menu.un({
 
-             beforehide: me.onBeforeHide,
 
-             hide: me.onHide,
 
-             beforeshow: me.onBeforeShow,
 
-             show: me.onShow,
 
-             scope: me
 
-         });
 
-     },
 
-     // private
 
-     registerCheckable: function(menuItem) {
 
-         var groups  = this.groups,
 
-             groupId = menuItem.group;
 
-         if (groupId) {
 
-             if (!groups[groupId]) {
 
-                 groups[groupId] = [];
 
-             }
 
-             groups[groupId].push(menuItem);
 
-         }
 
-     },
 
-     // private
 
-     unregisterCheckable: function(menuItem) {
 
-         var groups  = this.groups,
 
-             groupId = menuItem.group;
 
-         if (groupId) {
 
-             Ext.Array.remove(groups[groupId], menuItem);
 
-         }
 
-     },
 
-     onCheckChange: function(menuItem, state) {
 
-         var groups  = this.groups,
 
-             groupId = menuItem.group,
 
-             i       = 0,
 
-             group, ln, curr;
 
-         if (groupId && state) {
 
-             group = groups[groupId];
 
-             ln = group.length;
 
-             for (; i < ln; i++) {
 
-                 curr = group[i];
 
-                 if (curr != menuItem) {
 
-                     curr.setChecked(false);
 
-                 }
 
-             }
 
-         }
 
-     }
 
- });</pre>
 
- </body>
 
- </html>
 
 
  |