Roo/bootstrap/NavGroup.js
[roojs1] / Roo / bootstrap / NavGroup.js
1 /*
2  * - LGPL
3  *
4  * nav group
5  * 
6  */
7
8 /**
9  * @class Roo.bootstrap.NavGroup
10  * @extends Roo.bootstrap.Component
11  * Bootstrap NavGroup class
12  * @cfg {String} align left | right
13  * @cfg {Boolean} inverse false | true
14  * @cfg {String} type (nav|pills|tab) default nav
15  * @cfg {String} navId - reference Id for navbar.
16
17  * 
18  * @constructor
19  * Create a new nav group
20  * @param {Object} config The config object
21  */
22
23 Roo.bootstrap.NavGroup = function(config){
24     Roo.bootstrap.NavGroup.superclass.constructor.call(this, config);
25     this.navItems = [];
26     Roo.bootstrap.NavGroup.register(this);
27      this.addEvents({
28         /**
29              * @event changed
30              * Fires when the active item changes
31              * @param {Roo.bootstrap.NavGroup} this
32              * @param {Roo.bootstrap.Navbar.Item} item The item selected
33              * @param {Roo.bootstrap.Navbar.Item} item The previously selected item 
34          */
35         'changed': true
36      });
37     
38 };
39
40 Roo.extend(Roo.bootstrap.NavGroup, Roo.bootstrap.Component,  {
41     
42     align: '',
43     inverse: false,
44     form: false,
45     type: 'nav',
46     navId : '',
47     // private
48     
49     navItems : false,
50     
51     getAutoCreate : function()
52     {
53         var cfg = Roo.apply({}, Roo.bootstrap.NavGroup.superclass.getAutoCreate.call(this));
54         
55         cfg = {
56             tag : 'ul',
57             cls: 'nav' 
58         }
59         
60         if (['tabs','pills'].indexOf(this.type)!==-1) {
61             cfg.cls += ' nav-' + this.type
62         } else {
63             if (this.type!=='nav') {
64                 Roo.log('nav type must be nav/tabs/pills')
65             }
66             cfg.cls += ' navbar-nav'
67         }
68         
69         if (this.parent().sidebar) {
70             cfg = {
71                 tag: 'ul',
72                 cls: 'dashboard-menu sidebar-menu'
73             }
74             
75             return cfg;
76         }
77         
78         if (this.form === true) {
79             cfg = {
80                 tag: 'form',
81                 cls: 'navbar-form'
82             }
83             
84             if (this.align === 'right') {
85                 cfg.cls += ' navbar-right';
86             } else {
87                 cfg.cls += ' navbar-left';
88             }
89         }
90         
91         if (this.align === 'right') {
92             cfg.cls += ' navbar-right';
93         }
94         
95         if (this.inverse) {
96             cfg.cls += ' navbar-inverse';
97             
98         }
99         
100         
101         return cfg;
102     },
103     
104     setActiveItem : function(item)
105     {
106         var prev = false;
107         Roo.each(this.navItems, function(v){
108             if (v == item) {
109                 return ;
110             }
111             if (v.isActive()) {
112                 v.setActive(false, true);
113                 prev = v;
114                 
115             }
116             
117         });
118
119         item.setActive(true, true);
120         this.fireEvent('changed', this, item, prev);
121         
122         
123     },
124     
125     getActive : function()
126     {
127         
128         var prev = false;
129         Roo.each(this.navItems, function(v){
130             
131             if (v.isActive()) {
132                 prev = v;
133                 
134             }
135             
136         });
137         return prev;
138     },
139     
140     
141     addItem : function(cfg)
142     {
143         var cn = new Roo.bootstrap.NavItem(cfg);
144         this.register(cn);
145         cn.parentId = this.id;
146         cn.onRender(this.el, null);
147         return cn;
148     },
149     
150     register : function(item)
151     {
152         this.navItems.push( item);
153         item.navId = this.navId;
154     
155     },
156     registerTab : function(item)
157     {
158         this.tabs.push(item);
159     }
160     
161     
162     getNavItem: function(tabId)
163     {
164         var ret = false;
165         Roo.each(this.navItems, function(e) {
166             if (e.tabId == tabId) {
167                ret =  e;
168                return false;
169             }
170             return true;
171             
172         });
173         return ret;
174     }
175     
176     
177     
178     
179 });
180
181  
182 Roo.apply(Roo.bootstrap.NavGroup, {
183     
184     groups: {},
185     
186     register : function(navgrp)
187     {
188         this.groups[navgrp.navId] = navgrp;
189         
190     },
191     get: function(navId) {
192         if (typeof(this.groups[navId]) == 'undefined') {
193             this.register(new Roo.bootstrap.NavGroup({ navId : navId }));
194         }
195         return this.groups[navId] ;
196     },
197     
198     
199     
200 });
201
202