Roo/bootstrap/TabPanel.js
[roojs1] / Roo / bootstrap / TabPanel.js
1 /*
2  * - LGPL
3  *
4  * TabPanel
5  * 
6  */
7
8 /**
9  * @class Roo.bootstrap.TabPanel
10  * @extends Roo.bootstrap.Component
11  * Bootstrap TabPanel class
12  * @cfg {Boolean} active panel active
13  * @cfg {String} html panel content
14  * @cfg {String} tabId  unique tab ID (will be autogenerated if not set. - used to match TabItem to Panel)
15  * @cfg {String} navId The Roo.bootstrap.NavGroup which triggers show hide ()
16  * @cfg {String} href click to link..
17  * 
18  * 
19  * @constructor
20  * Create a new TabPanel
21  * @param {Object} config The config object
22  */
23
24 Roo.bootstrap.TabPanel = function(config){
25     Roo.bootstrap.TabPanel.superclass.constructor.call(this, config);
26     this.addEvents({
27         /**
28              * @event changed
29              * Fires when the active status changes
30              * @param {Roo.bootstrap.TabPanel} this
31              * @param {Boolean} state the new state
32             
33          */
34         'changed': true,
35         /**
36              * @event beforedeactivate
37              * Fires before a tab is de-activated - can be used to do validation on a form.
38              * @param {Roo.bootstrap.TabPanel} this
39              * @return {Boolean} false if there is an error
40             
41          */
42         'beforedeactivate': true
43      });
44     
45     this.tabId = this.tabId || Roo.id();
46   
47 };
48
49 Roo.extend(Roo.bootstrap.TabPanel, Roo.bootstrap.Component,  {
50     
51     active: false,
52     html: false,
53     tabId: false,
54     navId : false,
55     href : '',
56     
57     getAutoCreate : function(){
58         var cfg = {
59             tag: 'div',
60             // item is needed for carousel - not sure if it has any effect otherwise
61             cls: 'tab-pane item',
62             html: this.html || ''
63         };
64         
65         if(this.active){
66             cfg.cls += ' active';
67         }
68         
69         if(this.tabId){
70             cfg.tabId = this.tabId;
71         }
72         
73         
74         return cfg;
75     },
76     
77     initEvents:  function()
78     {
79         var p = this.parent();
80         this.navId = this.navId || p.navId;
81         
82         if (typeof(this.navId) != 'undefined') {
83             // not really needed.. but just in case.. parent should be a NavGroup.
84             var tg = Roo.bootstrap.TabGroup.get(this.navId);
85             
86             tg.register(this);
87             
88             var i = tg.tabs.length - 1;
89             
90             if(this.active && tg.bullets > 0 && i < tg.bullets){
91                 tg.setActiveBullet(i);
92             }
93         }
94         
95     },
96     
97     
98     onRender : function(ct, position)
99     {
100        // Roo.log("Call onRender: " + this.xtype);
101         
102         Roo.bootstrap.TabPanel.superclass.onRender.call(this, ct, position);
103         
104         
105         
106         
107         
108     },
109     
110     setActive: function(state)
111     {
112         Roo.log("panel - set active " + this.tabId + "=" + state);
113         
114         this.active = state;
115         if (!state) {
116             this.el.removeClass('active');
117             
118         } else  if (!this.el.hasClass('active')) {
119             this.el.addClass('active');
120         }
121         
122         this.fireEvent('changed', this, state);
123     }
124     
125     
126 });
127  
128
129  
130
131