Roo/bootstrap/Navbar.js
[roojs1] / Roo / bootstrap / Navbar.js
1 /*
2  * - LGPL
3  *
4  * navbar
5  * 
6  */
7
8 /**
9  * @class Roo.bootstrap.Navbar
10  * @extends Roo.bootstrap.Component
11  * Bootstrap Navbar class
12  * @cfg {Boolean} sidebar has side bar
13  * @cfg {Boolean} bar is a bar?
14  * @cfg {String} position (fixed-top|fixed-bottom|static-top) position
15  * @cfg {String} brand what is brand
16  * @cfg {Boolean} inverse is inverted color
17  * @cfg {String} type (nav | pills | tabs)
18  * @cfg {Boolean} arrangement stacked | justified
19  * @cfg {String} align (left | right) alignment
20  * @cfg {String} brand_href href of the brand
21  * @cfg {Boolean} main (true|false) main nav bar? default false
22  * @cfg {Boolean} loadMask (true|false) loadMask on the bar
23  *
24  * 
25  * @constructor
26  * Create a new Navbar
27  * @param {Object} config The config object
28  */
29
30
31 Roo.bootstrap.Navbar = function(config){
32     Roo.bootstrap.Navbar.superclass.constructor.call(this, config);
33    
34     
35 };
36
37 Roo.extend(Roo.bootstrap.Navbar, Roo.bootstrap.Component,  {
38     
39     sidebar: false,
40     
41     bar: false,
42     brand: '',
43     inverse: false,
44     position: '',
45     align : false,
46     type: false,
47     arrangement: '',
48     brand_href: false,
49     main : false,
50     loadMask : false,
51     
52     
53     // private
54     navItems : false,
55     
56     getAutoCreate : function(){
57         var cfg = {
58             cls : 'navbar'
59         };
60         
61         if (this.sidebar === true) {
62             cfg = {
63                 tag: 'div',
64                 cls: 'sidebar-nav'
65             };
66             return cfg;
67         }
68         
69         if (this.bar === true) {
70             cfg = {
71                 tag: 'nav',
72                 cls: 'navbar',
73                 role: 'navigation',
74                 cn: [
75                     {
76                         tag: 'div',
77                         cls: 'navbar-header',
78                         cn: [
79                             {
80                             tag: 'button',
81                             type: 'button',
82                             cls: 'navbar-toggle',
83                             'data-toggle': 'collapse',
84                             cn: [
85                                 {
86                                     tag: 'span',
87                                     cls: 'sr-only',
88                                     html: 'Toggle navigation'
89                                 },
90                                 {
91                                     tag: 'span',
92                                     cls: 'icon-bar'
93                                 },
94                                 {
95                                     tag: 'span',
96                                     cls: 'icon-bar'
97                                 },
98                                 {
99                                     tag: 'span',
100                                     cls: 'icon-bar'
101                                 }
102                             ]
103                             }
104                         ]
105                     },
106                     {
107                     tag: 'div',
108                     cls: 'collapse navbar-collapse'
109                     }
110                 ]
111             };
112             
113             cfg.cls += this.inverse ? ' navbar-inverse' : ' navbar-default';
114             
115             if (['fixed-top','fixed-bottom','static-top'].indexOf(this.position)>-1) {
116                 cfg.cls += ' navbar-' + this.position;
117                 cfg.tag = this.position  == 'fixed-bottom' ? 'footer' : 'header';
118             }
119             
120             if (this.brand !== '') {
121                 cfg.cn[0].cn.push({
122                     tag: 'a',
123                     href: this.brand_href ? this.brand_href : '#',
124                     cls: 'navbar-brand',
125                     cn: [
126                     this.brand
127                     ]
128                 });
129             }
130             
131             if(this.main){
132                 cfg.cls += ' main-nav';
133             }
134             
135             
136             return cfg;
137         
138         } else if (this.bar === false) {
139             
140         } else {
141             Roo.log('Property \'bar\' in of Navbar must be either true or false')
142         }
143         
144         cfg.cn = [
145             {
146                 cls: 'nav',
147                 tag : 'ul'
148             }
149         ];
150         this.type = this.type || 'nav';
151         if (['tabs','pills'].indexOf(this.type)!==-1) {
152             cfg.cn[0].cls += ' nav-' + this.type
153         } else {
154             if (this.type!=='nav') {
155                 Roo.log('nav type must be nav/tabs/pills')
156             }
157             cfg.cn[0].cls += ' navbar-nav'
158         }
159         
160         if (['stacked','justified'].indexOf(this.arrangement)!==-1) {
161             cfg.cn[0].cls += ' nav-' + this.arrangement;
162         }
163         
164         if (this.align === 'right') {
165             cfg.cn[0].cls += ' navbar-right';
166         }
167         if (this.inverse) {
168             cfg.cls += ' navbar-inverse';
169             
170         }
171         
172         
173         return cfg;
174     },
175     
176     initEvents :function ()
177     {
178         //Roo.log(this.el.select('.navbar-toggle',true));
179         this.el.select('.navbar-toggle',true).on('click', function() {
180            // Roo.log('click');
181             this.el.select('.navbar-collapse',true).toggleClass('in');                                 
182         }, this);
183         
184         var mark = {
185             tag: "div",
186             cls:"x-dlg-mask"
187         }
188         
189         this.maskEl = Roo.DomHelper.append(this.el, mark, true);
190         
191         var size = this.el.getSize();
192         this.maskEl.setSize(size.width, size.height);
193         this.maskEl.enableDisplayMode("block");
194         this.maskEl.hide();
195         
196         if(this.loadMask){
197             this.maskEl.show();
198         }
199     },
200     
201     
202     getChildContainer : function()
203     {
204         if (this.bar === true) {
205             return this.el.select('.collapse',true).first();
206         }
207         
208         return this.el;
209     },
210     
211     mask : function()
212     {
213         this.maskEl.show();
214     },
215     
216     unmask : function()
217     {
218         this.maskEl.hide();
219     }
220     
221     
222     
223 });
224
225
226
227  
228
229