9 * @class Roo.bootstrap.NavItem
10 * @extends Roo.bootstrap.Component
11 * Bootstrap Navbar.NavItem class
12 * @cfg {String} href link to
13 * @cfg {String} html content of button
14 * @cfg {String} badge text inside badge
15 * @cfg {String} badgecls (bg-green|bg-red|bg-yellow)the extra classes for the badge
16 * @cfg {String} glyphicon name of glyphicon
17 * @cfg {String} icon name of font awesome icon
18 * @cfg {Boolean} active Is item active
19 * @cfg {Boolean} disabled Is item disabled
21 * @cfg {Boolean} preventDefault (true | false) default false
22 * @cfg {String} tabId the tab that this item activates.
23 * @cfg {String} tagtype (a|span) render as a href or span?
24 * @cfg {Boolean} animateRef (true|false) link to element default false
27 * Create a new Navbar Item
28 * @param {Object} config The config object
30 Roo.bootstrap.NavItem = function(config){
31 Roo.bootstrap.NavItem.superclass.constructor.call(this, config);
36 * The raw click event for the entire grid.
37 * @param {Roo.EventObject} e
42 * Fires when the active item active state changes
43 * @param {Roo.bootstrap.NavItem} this
44 * @param {boolean} state the new state
52 Roo.extend(Roo.bootstrap.NavItem, Roo.bootstrap.Component, {
60 preventDefault : false,
67 getAutoCreate : function(){
75 cfg.cls = typeof(cfg.cls) == 'undefined' ? 'active' : cfg.cls + ' active';
78 cfg.cls += ' disabled';
81 if (this.href || this.html || this.glyphicon || this.icon) {
85 href : this.href || "#",
91 cfg.cn[0].html = '<i class="'+this.icon+'"></i> <span>' + cfg.cn[0].html + '</span>'
95 cfg.cn[0].html = '<span class="glyphicon glyphicon-' + this.glyphicon + '"></span> ' + cfg.cn[0].html;
100 cfg.cn[0].html += " <span class='caret'></span>";
104 if (this.badge !== '') {
106 cfg.cn[0].html += ' <span class="badge">' + this.badge + '</span>';
114 initEvents: function()
116 if (typeof (this.menu) != 'undefined') {
117 this.menu.parentType = this.xtype;
118 this.menu.triggerEl = this.el;
119 this.menu = this.addxtype(Roo.apply({}, this.menu));
122 this.el.select('a',true).on('click', this.onClick, this);
124 if(this.tagtype == 'span'){
125 this.el.select('span',true).on('click', this.onClick, this);
128 // at this point parent should be available..
129 this.parent().register(this);
132 onClick : function(e)
135 this.preventDefault ||
137 (this.animateRef && this.href.charAt(0) == '#')
146 var tg = Roo.bootstrap.TabGroup.get(this.navId);
147 if (tg && tg.transition) {
148 Roo.log("waiting for the transitionend");
152 Roo.log("fire event clicked");
153 if(this.fireEvent('click', this, e) === false){
157 if(this.tagtype == 'span'){
161 if(this.animateRef && this.href.charAt(0) == '#'){
162 this.scrollToElement();
166 var p = this.parent();
167 if (['tabs','pills'].indexOf(p.type)!==-1) {
168 if (typeof(p.setActiveItem) !== 'undefined') {
169 p.setActiveItem(this);
172 // if parent is a navbarheader....- and link is probably a '#' page ref.. then remove the expanded menu.
173 if (p.parentType == 'NavHeaderbar' && !this.menu) {
174 // remove the collapsed menu expand...
175 p.parent().el.select('.navbar-collapse',true).removeClass('in');
180 isActive: function () {
183 setActive : function(state, fire, is_was_active)
185 if (this.active && !state & this.navId) {
186 this.was_active = true;
187 var nv = Roo.bootstrap.NavGroup.get(this.navId);
189 nv.clearWasActive(this);
196 this.el.removeClass('active');
197 } else if (!this.el.hasClass('active')) {
198 this.el.addClass('active');
201 this.fireEvent('changed', this, state);
204 // show a panel if it's registered and related..
206 if (!this.navId || !this.tabId || !state || is_was_active) {
210 var tg = Roo.bootstrap.TabGroup.get(this.navId);
214 var pan = tg.getPanelByName(this.tabId);
218 // if we can not flip to new panel - go back to old nav highlight..
219 if (false == tg.showPanel(pan)) {
220 var nv = Roo.bootstrap.NavGroup.get(this.navId);
222 var onav = nv.getWasActive();
224 onav.setActive(true, false, true);
233 // this should not be here...
234 setDisabled : function(state)
236 this.disabled = state;
238 this.el.removeClass('disabled');
239 } else if (!this.el.hasClass('disabled')) {
240 this.el.addClass('disabled');
246 * Fetch the element to display the tooltip on.
247 * @return {Roo.Element} defaults to this.el
249 tooltipEl : function()
251 return this.el.select('' + this.tagtype + '', true).first();
254 scrollToElement : function()
256 var target = Roo.get(document.body).select('a[name=' + this.href.replace('#', '') +']', true).first();
258 Roo.log('scrollToElement...');