sync
authorAlan Knowles <alan@roojs.com>
Thu, 29 Jul 2021 07:19:37 +0000 (15:19 +0800)
committerAlan Knowles <alan@roojs.com>
Thu, 29 Jul 2021 07:19:37 +0000 (15:19 +0800)
Roo/bootstrap/menu/Manager.js [new file with mode: 0644]
Roo/bootstrap/menu/namespace.js [new file with mode: 0644]
docs/src/Roo_LayoutDialog.js.html [new file with mode: 0644]
docs/src/Roo_bootstrap_menu_Manager.js.html [new file with mode: 0644]
docs/src/Roo_bootstrap_menu_namespace.js.html [new file with mode: 0644]
docs/symbols/Roo.bootstrap.menu.Manager.json [new file with mode: 0644]

diff --git a/Roo/bootstrap/menu/Manager.js b/Roo/bootstrap/menu/Manager.js
new file mode 100644 (file)
index 0000000..4e1172f
--- /dev/null
@@ -0,0 +1,189 @@
+/**
+ * @class Roo.bootstrap.MenuMgr
+ * @licence LGPL
+ * Provides a common registry of all menu items on a page so that they can be easily accessed by id.
+ * @singleton
+ */
+Roo.bootstrap.menu.Manager = function(){
+   var menus, active, groups = {}, attached = false, lastShow = new Date();
+
+   // private - called when first menu is created
+   function init(){
+       menus = {};
+       active = new Roo.util.MixedCollection();
+       Roo.get(document).addKeyListener(27, function(){
+           if(active.length > 0){
+               hideAll();
+           }
+       });
+   }
+
+   // private
+   function hideAll(){
+       if(active && active.length > 0){
+           var c = active.clone();
+           c.each(function(m){
+               m.hide();
+           });
+       }
+   }
+
+   // private
+   function onHide(m){
+       active.remove(m);
+       if(active.length < 1){
+           Roo.get(document).un("mouseup", onMouseDown);
+            
+           attached = false;
+       }
+   }
+
+   // private
+   function onShow(m){
+       var last = active.last();
+       lastShow = new Date();
+       active.add(m);
+       if(!attached){
+          Roo.get(document).on("mouseup", onMouseDown);
+           
+           attached = true;
+       }
+       if(m.parentMenu){
+          //m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"), 10) + 3);
+          m.parentMenu.activeChild = m;
+       }else if(last && last.isVisible()){
+          //m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"), 10) + 3);
+       }
+   }
+
+   // private
+   function onBeforeHide(m){
+       if(m.activeChild){
+           m.activeChild.hide();
+       }
+       if(m.autoHideTimer){
+           clearTimeout(m.autoHideTimer);
+           delete m.autoHideTimer;
+       }
+   }
+
+   // private
+   function onBeforeShow(m){
+       var pm = m.parentMenu;
+       if(!pm && !m.allowOtherMenus){
+           hideAll();
+       }else if(pm && pm.activeChild && active != m){
+           pm.activeChild.hide();
+       }
+   }
+
+   // private this should really trigger on mouseup..
+   function onMouseDown(e){
+        Roo.log("on Mouse Up");
+        
+        if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".dropdown-menu") && !e.getTarget('.user-menu')){
+            Roo.log("MenuManager hideAll");
+            hideAll();
+            e.stopEvent();
+        }
+        
+        
+   }
+
+   // private
+   function onBeforeCheck(mi, state){
+       if(state){
+           var g = groups[mi.group];
+           for(var i = 0, l = g.length; i < l; i++){
+               if(g[i] != mi){
+                   g[i].setChecked(false);
+               }
+           }
+       }
+   }
+
+   return {
+
+       /**
+        * Hides all menus that are currently visible
+        */
+       hideAll : function(){
+            hideAll();  
+       },
+
+       // private
+       register : function(menu){
+           if(!menus){
+               init();
+           }
+           menus[menu.id] = menu;
+           menu.on("beforehide", onBeforeHide);
+           menu.on("hide", onHide);
+           menu.on("beforeshow", onBeforeShow);
+           menu.on("show", onShow);
+           var g = menu.group;
+           if(g && menu.events["checkchange"]){
+               if(!groups[g]){
+                   groups[g] = [];
+               }
+               groups[g].push(menu);
+               menu.on("checkchange", onCheck);
+           }
+       },
+
+        /**
+         * Returns a {@link Roo.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 instance.
+         */
+       get : function(menu){
+           if(typeof menu == "string"){ // menu id
+               return menus[menu];
+           }else if(menu.events){  // menu instance
+               return menu;
+           }
+           /*else if(typeof menu.length == 'number'){ // array of menu items?
+               return new Roo.bootstrap.Menu({items:menu});
+           }else{ // otherwise, must be a config
+               return new Roo.bootstrap.Menu(menu);
+           }
+           */
+           return false;
+       },
+
+       // private
+       unregister : function(menu){
+           delete menus[menu.id];
+           menu.un("beforehide", onBeforeHide);
+           menu.un("hide", onHide);
+           menu.un("beforeshow", onBeforeShow);
+           menu.un("show", onShow);
+           var g = menu.group;
+           if(g && menu.events["checkchange"]){
+               groups[g].remove(menu);
+               menu.un("checkchange", onCheck);
+           }
+       },
+
+       // private
+       registerCheckable : function(menuItem){
+           var g = menuItem.group;
+           if(g){
+               if(!groups[g]){
+                   groups[g] = [];
+               }
+               groups[g].push(menuItem);
+               menuItem.on("beforecheckchange", onBeforeCheck);
+           }
+       },
+
+       // private
+       unregisterCheckable : function(menuItem){
+           var g = menuItem.group;
+           if(g){
+               groups[g].remove(menuItem);
+               menuItem.un("beforecheckchange", onBeforeCheck);
+           }
+       }
+   };
+}();
\ No newline at end of file
diff --git a/Roo/bootstrap/menu/namespace.js b/Roo/bootstrap/menu/namespace.js
new file mode 100644 (file)
index 0000000..6587307
--- /dev/null
@@ -0,0 +1,6 @@
+Roo.bootstrap.menu = Roo.bootstrap.menu || {};
+// deprciated 
+Roo.bootstrap.Menu = Roo.bootstrap.menu.Menu;
+Roo.bootstrap.MenuItem =  Roo.bootstrap.menu.Item;
+Roo.bootstrap.MenuSeparator = Roo.bootstrap.menu.Separator
+
diff --git a/docs/src/Roo_LayoutDialog.js.html b/docs/src/Roo_LayoutDialog.js.html
new file mode 100644 (file)
index 0000000..254b968
--- /dev/null
@@ -0,0 +1,160 @@
+<html><head><title>Roo/LayoutDialog.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty">
+<span class="jsdoc-comment">/**
+ * @class Roo.LayoutDialog
+ * @extends Roo.BasicDialog
+ * @children Roo.ContentPanel
+ * @builder-top
+ * Dialog which provides adjustments for working with a layout in a Dialog.
+ * Add your necessary layout config options to the dialog's config.&lt;br&gt;
+ * Example usage (including a nested layout):
+ * &lt;pre&gt;&lt;code&gt;
+if(!dialog){
+    dialog = new Roo.LayoutDialog(&quot;download-dlg&quot;, {
+        modal: true,
+        width:600,
+        height:450,
+        shadow:true,
+        minWidth:500,
+        minHeight:350,
+        autoTabs:true,
+        proxyDrag:true,
+        // layout config merges with the dialog config
+        center:{
+            tabPosition: &quot;top&quot;,
+            alwaysShowTabs: true
+        }
+    });
+    dialog.addKeyListener(27, dialog.hide, dialog);
+    dialog.setDefaultButton(dialog.addButton(&quot;Close&quot;, dialog.hide, dialog));
+    dialog.addButton(&quot;Build It!&quot;, this.getDownload, this);
+
+    // we can even add nested layouts
+    var innerLayout = new Roo.BorderLayout(&quot;dl-inner&quot;, {
+        east: {
+            initialSize: 200,
+            autoScroll:true,
+            split:true
+        },
+        center: {
+            autoScroll:true
+        }
+    });
+    innerLayout.beginUpdate();
+    innerLayout.add(&quot;east&quot;, new Roo.ContentPanel(&quot;dl-details&quot;));
+    innerLayout.add(&quot;center&quot;, new Roo.ContentPanel(&quot;selection-panel&quot;));
+    innerLayout.endUpdate(true);
+
+    var layout = dialog.getLayout();
+    layout.beginUpdate();
+    layout.add(&quot;center&quot;, new Roo.ContentPanel(&quot;standard-panel&quot;,
+                        {title: &quot;Download the Source&quot;, fitToFrame:true}));
+    layout.add(&quot;center&quot;, new Roo.NestedLayoutPanel(innerLayout,
+               {title: &quot;Build your own roo.js&quot;}));
+    layout.getRegion(&quot;center&quot;).showPanel(sp);
+    layout.endUpdate();
+}
+&lt;/code&gt;&lt;/pre&gt;
+    * @constructor
+    * @param {String/HTMLElement/Roo.Element} el The id of or container element, or config
+    * @param {Object} config configuration options
+  */
+</span><span class="jsdoc-var">Roo.LayoutDialog </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">){
+
+    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">=  </span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">;
+    </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
+        </span><span class="jsdoc-var">config </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">({}, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
+        </span><span class="jsdoc-comment">// not sure why we use documentElement here.. - it should always be body.
+        // IE7 borks horribly if we use documentElement.
+        // webkit also does not like documentElement - it creates a body element...
+        </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">document.body </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">document.documentElement </span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.createChild</span><span class="jsdoc-syntax">();
+        </span><span class="jsdoc-comment">//config.autoCreate = true;
+    </span><span class="jsdoc-syntax">}
+
+
+    </span><span class="jsdoc-var">config.autoTabs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
+    </span><span class="jsdoc-var">Roo.LayoutDialog.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">);
+    </span><span class="jsdoc-var">this.body.setStyle</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">overflow</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">&quot;hidden&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">position</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">&quot;relative&quot;</span><span class="jsdoc-syntax">});
+    </span><span class="jsdoc-var">this.layout </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.BorderLayout</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.body.dom</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">);
+    </span><span class="jsdoc-var">this.layout.monitorWindowResize </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
+    </span><span class="jsdoc-var">this.el.addClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;x-dlg-auto-layout&quot;</span><span class="jsdoc-syntax">);
+    </span><span class="jsdoc-comment">// fix case when center region overwrites center function
+    </span><span class="jsdoc-var">this.center </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.BasicDialog.prototype.center</span><span class="jsdoc-syntax">;
+    </span><span class="jsdoc-var">this.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;show&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.layout.layout</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.layout</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
+    </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">config.items</span><span class="jsdoc-syntax">) {
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">xitems </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">config.items</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">config.items</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">xitems</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.addxtype</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
+    }
+
+
+};
+</span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.LayoutDialog</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.BasicDialog</span><span class="jsdoc-syntax">, {
+
+
+    </span><span class="jsdoc-comment">/**
+     * @cfg {Roo.LayoutRegion} east  
+     */
+    /**
+     * @cfg {Roo.LayoutRegion} west
+     */
+    /**
+     * @cfg {Roo.LayoutRegion} south
+     */
+    /**
+     * @cfg {Roo.LayoutRegion} north
+     */
+    /**
+     * @cfg {Roo.LayoutRegion} center
+     */
+    /**
+     * @cfg {Roo.Button} buttons[]  Bottom buttons..
+     */
+
+
+    /**
+     * Ends update of the layout &lt;strike&gt;and resets display to none&lt;/strike&gt;. Use standard beginUpdate/endUpdate on the layout.
+     * @deprecated
+     */
+    </span><span class="jsdoc-var">endUpdate </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+        </span><span class="jsdoc-var">this.layout.endUpdate</span><span class="jsdoc-syntax">();
+    },
+
+    </span><span class="jsdoc-comment">/**
+     * Begins an update of the layout &lt;strike&gt;and sets display to block and visibility to hidden&lt;/strike&gt;. Use standard beginUpdate/endUpdate on the layout.
+     *  @deprecated
+     */
+    </span><span class="jsdoc-var">beginUpdate </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+        </span><span class="jsdoc-var">this.layout.beginUpdate</span><span class="jsdoc-syntax">();
+    },
+
+    </span><span class="jsdoc-comment">/**
+     * Get the BorderLayout for this dialog
+     * @return {Roo.BorderLayout}
+     */
+    </span><span class="jsdoc-var">getLayout </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.layout</span><span class="jsdoc-syntax">;
+    },
+
+    </span><span class="jsdoc-var">showEl </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+        </span><span class="jsdoc-var">Roo.LayoutDialog.superclass.showEl.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">);
+        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE7</span><span class="jsdoc-syntax">){
+            </span><span class="jsdoc-var">this.layout.layout</span><span class="jsdoc-syntax">();
+        }
+    },
+
+    </span><span class="jsdoc-comment">// private
+    // Use the syncHeightBeforeShow config option to control this automatically
+    </span><span class="jsdoc-var">syncBodyHeight </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+        </span><span class="jsdoc-var">Roo.LayoutDialog.superclass.syncBodyHeight.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
+        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.layout</span><span class="jsdoc-syntax">){</span><span class="jsdoc-var">this.layout.layout</span><span class="jsdoc-syntax">();}
+    },
+
+      </span><span class="jsdoc-comment">/**
+     * Add an xtype element (actually adds to the layout.)
+     * @return {Object} xdata xtype object data.
+     */
+
+    </span><span class="jsdoc-var">addxtype </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">) {
+        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.layout.addxtype</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">);
+    }
+});</span></code></body></html>
\ No newline at end of file
diff --git a/docs/src/Roo_bootstrap_menu_Manager.js.html b/docs/src/Roo_bootstrap_menu_Manager.js.html
new file mode 100644 (file)
index 0000000..b194799
--- /dev/null
@@ -0,0 +1,189 @@
+<html><head><title>Roo/bootstrap/menu/Manager.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/**
+ * @class Roo.bootstrap.MenuMgr
+ * @licence LGPL
+ * Provides a common registry of all menu items on a page so that they can be easily accessed by id.
+ * @singleton
+ */
+</span><span class="jsdoc-var">Roo.bootstrap.menu.Manager </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+   </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">menus</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">active</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">groups </span><span class="jsdoc-syntax">= {}, </span><span class="jsdoc-var">attached </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">lastShow </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Date</span><span class="jsdoc-syntax">();
+
+   </span><span class="jsdoc-comment">// private - called when first menu is created
+   </span><span class="jsdoc-keyword">function </span><span class="jsdoc-var">init</span><span class="jsdoc-syntax">(){
+       </span><span class="jsdoc-var">menus </span><span class="jsdoc-syntax">= {};
+       </span><span class="jsdoc-var">active </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.util.MixedCollection</span><span class="jsdoc-syntax">();
+       </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">document</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.addKeyListener</span><span class="jsdoc-syntax">(27, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+           </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">active.length </span><span class="jsdoc-syntax">&gt; 0){
+               </span><span class="jsdoc-var">hideAll</span><span class="jsdoc-syntax">();
+           }
+       });
+   }
+
+   </span><span class="jsdoc-comment">// private
+   </span><span class="jsdoc-keyword">function </span><span class="jsdoc-var">hideAll</span><span class="jsdoc-syntax">(){
+       </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">active </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">active.length </span><span class="jsdoc-syntax">&gt; 0){
+           </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">active.clone</span><span class="jsdoc-syntax">();
+           </span><span class="jsdoc-var">c.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">){
+               </span><span class="jsdoc-var">m.hide</span><span class="jsdoc-syntax">();
+           });
+       }
+   }
+
+   </span><span class="jsdoc-comment">// private
+   </span><span class="jsdoc-keyword">function </span><span class="jsdoc-var">onHide</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">){
+       </span><span class="jsdoc-var">active.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">);
+       </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">active.length </span><span class="jsdoc-syntax">&lt; 1){
+           </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">document</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;mouseup&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onMouseDown</span><span class="jsdoc-syntax">);
+
+           </span><span class="jsdoc-var">attached </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
+       }
+   }
+
+   </span><span class="jsdoc-comment">// private
+   </span><span class="jsdoc-keyword">function </span><span class="jsdoc-var">onShow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">){
+       </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">active.last</span><span class="jsdoc-syntax">();
+       </span><span class="jsdoc-var">lastShow </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Date</span><span class="jsdoc-syntax">();
+       </span><span class="jsdoc-var">active.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">);
+       </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">attached</span><span class="jsdoc-syntax">){
+          </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">document</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;mouseup&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onMouseDown</span><span class="jsdoc-syntax">);
+
+           </span><span class="jsdoc-var">attached </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
+       }
+       </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m.parentMenu</span><span class="jsdoc-syntax">){
+          </span><span class="jsdoc-comment">//m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle(&quot;z-index&quot;), 10) + 3);
+          </span><span class="jsdoc-var">m.parentMenu.activeChild </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">;
+       }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">last </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">last.isVisible</span><span class="jsdoc-syntax">()){
+          </span><span class="jsdoc-comment">//m.getEl().setZIndex(parseInt(last.getEl().getStyle(&quot;z-index&quot;), 10) + 3);
+       </span><span class="jsdoc-syntax">}
+   }
+
+   </span><span class="jsdoc-comment">// private
+   </span><span class="jsdoc-keyword">function </span><span class="jsdoc-var">onBeforeHide</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">){
+       </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m.activeChild</span><span class="jsdoc-syntax">){
+           </span><span class="jsdoc-var">m.activeChild.hide</span><span class="jsdoc-syntax">();
+       }
+       </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m.autoHideTimer</span><span class="jsdoc-syntax">){
+           </span><span class="jsdoc-var">clearTimeout</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m.autoHideTimer</span><span class="jsdoc-syntax">);
+           </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">m.autoHideTimer</span><span class="jsdoc-syntax">;
+       }
+   }
+
+   </span><span class="jsdoc-comment">// private
+   </span><span class="jsdoc-keyword">function </span><span class="jsdoc-var">onBeforeShow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">){
+       </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">pm </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">m.parentMenu</span><span class="jsdoc-syntax">;
+       </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">pm </span><span class="jsdoc-syntax">&amp;&amp; !</span><span class="jsdoc-var">m.allowOtherMenus</span><span class="jsdoc-syntax">){
+           </span><span class="jsdoc-var">hideAll</span><span class="jsdoc-syntax">();
+       }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">pm </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">pm.activeChild </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">active </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">){
+           </span><span class="jsdoc-var">pm.activeChild.hide</span><span class="jsdoc-syntax">();
+       }
+   }
+
+   </span><span class="jsdoc-comment">// private this should really trigger on mouseup..
+   </span><span class="jsdoc-keyword">function </span><span class="jsdoc-var">onMouseDown</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
+        </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;on Mouse Up&quot;</span><span class="jsdoc-syntax">);
+
+        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">lastShow.getElapsed</span><span class="jsdoc-syntax">() &gt; 50 &amp;&amp; </span><span class="jsdoc-var">active.length </span><span class="jsdoc-syntax">&gt; 0 &amp;&amp; !</span><span class="jsdoc-var">e.getTarget</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;.dropdown-menu&quot;</span><span class="jsdoc-syntax">) &amp;&amp; !</span><span class="jsdoc-var">e.getTarget</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'.user-menu'</span><span class="jsdoc-syntax">)){
+            </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;MenuManager hideAll&quot;</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-var">hideAll</span><span class="jsdoc-syntax">();
+            </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
+        }
+
+
+   }
+
+   </span><span class="jsdoc-comment">// private
+   </span><span class="jsdoc-keyword">function </span><span class="jsdoc-var">onBeforeCheck</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">mi</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">state</span><span class="jsdoc-syntax">){
+       </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">state</span><span class="jsdoc-syntax">){
+           </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">g </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">groups</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">mi.group</span><span class="jsdoc-syntax">];
+           </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0, </span><span class="jsdoc-var">l </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">g.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">l</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
+               </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">] != </span><span class="jsdoc-var">mi</span><span class="jsdoc-syntax">){
+                   </span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.setChecked</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+               }
+           }
+       }
+   }
+
+   </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{
+
+       </span><span class="jsdoc-comment">/**
+        * Hides all menus that are currently visible
+        */
+       </span><span class="jsdoc-var">hideAll </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+            </span><span class="jsdoc-var">hideAll</span><span class="jsdoc-syntax">();
+       },
+
+       </span><span class="jsdoc-comment">// private
+       </span><span class="jsdoc-var">register </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">menu</span><span class="jsdoc-syntax">){
+           </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">menus</span><span class="jsdoc-syntax">){
+               </span><span class="jsdoc-var">init</span><span class="jsdoc-syntax">();
+           }
+           </span><span class="jsdoc-var">menus</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">menu.id</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">menu</span><span class="jsdoc-syntax">;
+           </span><span class="jsdoc-var">menu.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforehide&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onBeforeHide</span><span class="jsdoc-syntax">);
+           </span><span class="jsdoc-var">menu.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;hide&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onHide</span><span class="jsdoc-syntax">);
+           </span><span class="jsdoc-var">menu.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforeshow&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onBeforeShow</span><span class="jsdoc-syntax">);
+           </span><span class="jsdoc-var">menu.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;show&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onShow</span><span class="jsdoc-syntax">);
+           </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">g </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">menu.group</span><span class="jsdoc-syntax">;
+           </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">g </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">menu.events</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">&quot;checkchange&quot;</span><span class="jsdoc-syntax">]){
+               </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">groups</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">]){
+                   </span><span class="jsdoc-var">groups</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">] = [];
+               }
+               </span><span class="jsdoc-var">groups</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">menu</span><span class="jsdoc-syntax">);
+               </span><span class="jsdoc-var">menu.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;checkchange&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onCheck</span><span class="jsdoc-syntax">);
+           }
+       },
+
+        </span><span class="jsdoc-comment">/**
+         * Returns a {@link Roo.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 instance.
+         */
+       </span><span class="jsdoc-var">get </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">menu</span><span class="jsdoc-syntax">){
+           </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">menu </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;string&quot;</span><span class="jsdoc-syntax">){ </span><span class="jsdoc-comment">// menu id
+               </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">menus</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">menu</span><span class="jsdoc-syntax">];
+           }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">menu.events</span><span class="jsdoc-syntax">){  </span><span class="jsdoc-comment">// menu instance
+               </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">menu</span><span class="jsdoc-syntax">;
+           }
+           </span><span class="jsdoc-comment">/*else if(typeof menu.length == 'number'){ // array of menu items?
+               return new Roo.bootstrap.Menu({items:menu});
+           }else{ // otherwise, must be a config
+               return new Roo.bootstrap.Menu(menu);
+           }
+           */
+           </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+       },
+
+       </span><span class="jsdoc-comment">// private
+       </span><span class="jsdoc-var">unregister </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">menu</span><span class="jsdoc-syntax">){
+           </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">menus</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">menu.id</span><span class="jsdoc-syntax">];
+           </span><span class="jsdoc-var">menu.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforehide&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onBeforeHide</span><span class="jsdoc-syntax">);
+           </span><span class="jsdoc-var">menu.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;hide&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onHide</span><span class="jsdoc-syntax">);
+           </span><span class="jsdoc-var">menu.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforeshow&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onBeforeShow</span><span class="jsdoc-syntax">);
+           </span><span class="jsdoc-var">menu.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;show&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onShow</span><span class="jsdoc-syntax">);
+           </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">g </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">menu.group</span><span class="jsdoc-syntax">;
+           </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">g </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">menu.events</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">&quot;checkchange&quot;</span><span class="jsdoc-syntax">]){
+               </span><span class="jsdoc-var">groups</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">menu</span><span class="jsdoc-syntax">);
+               </span><span class="jsdoc-var">menu.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;checkchange&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onCheck</span><span class="jsdoc-syntax">);
+           }
+       },
+
+       </span><span class="jsdoc-comment">// private
+       </span><span class="jsdoc-var">registerCheckable </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">menuItem</span><span class="jsdoc-syntax">){
+           </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">g </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">menuItem.group</span><span class="jsdoc-syntax">;
+           </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">){
+               </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">groups</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">]){
+                   </span><span class="jsdoc-var">groups</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">] = [];
+               }
+               </span><span class="jsdoc-var">groups</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">menuItem</span><span class="jsdoc-syntax">);
+               </span><span class="jsdoc-var">menuItem.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforecheckchange&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onBeforeCheck</span><span class="jsdoc-syntax">);
+           }
+       },
+
+       </span><span class="jsdoc-comment">// private
+       </span><span class="jsdoc-var">unregisterCheckable </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">menuItem</span><span class="jsdoc-syntax">){
+           </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">g </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">menuItem.group</span><span class="jsdoc-syntax">;
+           </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">){
+               </span><span class="jsdoc-var">groups</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">menuItem</span><span class="jsdoc-syntax">);
+               </span><span class="jsdoc-var">menuItem.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforecheckchange&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onBeforeCheck</span><span class="jsdoc-syntax">);
+           }
+       }
+   };
+}();</span></code></body></html>
\ No newline at end of file
diff --git a/docs/src/Roo_bootstrap_menu_namespace.js.html b/docs/src/Roo_bootstrap_menu_namespace.js.html
new file mode 100644 (file)
index 0000000..fc69cff
--- /dev/null
@@ -0,0 +1,7 @@
+<html><head><title>Roo/bootstrap/menu/namespace.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-var">Roo.bootstrap.menu </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.bootstrap.menu </span><span class="jsdoc-syntax">|| {};
+</span><span class="jsdoc-comment">// deprciated 
+</span><span class="jsdoc-var">Roo.bootstrap.Menu </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.bootstrap.menu.Menu</span><span class="jsdoc-syntax">;
+</span><span class="jsdoc-var">Roo.bootstrap.MenuItem </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-var">Roo.bootstrap.menu.Item</span><span class="jsdoc-syntax">;
+</span><span class="jsdoc-var">Roo.bootstrap.MenuSeparator </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.bootstrap.menu.Separator
+
+</span></code></body></html>
\ No newline at end of file
diff --git a/docs/symbols/Roo.bootstrap.menu.Manager.json b/docs/symbols/Roo.bootstrap.menu.Manager.json
new file mode 100644 (file)
index 0000000..244e226
--- /dev/null
@@ -0,0 +1,66 @@
+{
+  "name" : "Roo.bootstrap.menu.Manager",
+  "augments" : [],
+  "desc" : "Provides a common registry of all menu items on a page so that they can be easily accessed by id.",
+  "isSingleton" : true,
+  "isStatic" : false,
+  "isBuiltin" : false,
+  "memberOf" : "Manager",
+  "example" : "",
+  "deprecated" : "",
+  "since" : "",
+  "see" : "",
+  "params" : [],
+  "returns" : [],
+  "throws" : "",
+  "requires" : "",
+  "config" : [],
+  "methods" : [
+    {
+      "name" : "get",
+      "type" : "function",
+      "desc" : "Returns a {@link Roo.menu.Menu} object",
+      "sig" : "(menu)",
+      "static" : false,
+      "memberOf" : "",
+      "isStatic" : false,
+      "isConstructor" : false,
+      "isPrivate" : false,
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "exceptions" : "",
+      "requires" : "",
+      "params" : [
+        {
+          "name" : "menu",
+          "type" : "String/Object",
+          "desc" : "The string menu id, an existing menu object reference, or a Menu config that will\nbe used to generate and return a new Menu instance.",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
+    {
+      "name" : "hideAll",
+      "type" : "function",
+      "desc" : "Hides all menus that are currently visible",
+      "sig" : "()\n{\n\n}",
+      "static" : false,
+      "memberOf" : "",
+      "isStatic" : false,
+      "isConstructor" : false,
+      "isPrivate" : false,
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "exceptions" : "",
+      "requires" : "",
+      "params" : [],
+      "returns" : []
+    }
+  ],
+  "events" : []
+}
\ No newline at end of file