Roo/bootstrap/NavProgressItem.js
[roojs1] / Roo / bootstrap / NavProgressItem.js
1 /*
2  * - LGPL
3  *
4  * Nav Progress Item
5  * 
6  */
7
8 /**
9  * @class Roo.bootstrap.NavProgressItem
10  * @extends Roo.bootstrap.Component
11  * Bootstrap NavProgressItem class
12  * @cfg {String} rid the reference id
13  * @cfg {Boolean} active (true|false) Is item active default false
14  * @cfg {Boolean} disabled (true|false) Is item active default false
15  * @cfg {String} html
16  * @cfg {String} position (top|bottom) text position default bottom
17  * @cfg {String} icon show icon instead of number
18  * @cfg {Boolean} forceIcon (true|false) true to force show icon..if set to false, Roo.isTouch showing icon, otherwish number
19  * 
20  * @constructor
21  * Create a new NavProgressItem
22  * @param {Object} config The config object
23  */
24 Roo.bootstrap.NavProgressItem = function(config){
25     Roo.bootstrap.NavProgressItem.superclass.constructor.call(this, config);
26     this.addEvents({
27         // raw events
28         /**
29          * @event click
30          * The raw click event for the entire grid.
31          * @param {Roo.bootstrap.NavProgressItem} this
32          * @param {Roo.EventObject} e
33          */
34         "click" : true
35     });
36    
37 };
38
39 Roo.extend(Roo.bootstrap.NavProgressItem, Roo.bootstrap.Component,  {
40     
41     rid : '',
42     active : false,
43     disabled : false,
44     html : '',
45     position : 'bottom',
46     icon : false,
47     forceIcon : false,
48     
49     getAutoCreate : function()
50     {
51         var iconCls = 'roo-navigation-bar-item-icon';
52         
53         if((this.forceIcon && this.icon) || !this.forceIcon && Roo.isTouch){
54             iconCls += ' ' + this.icon;
55         }
56         
57         var cfg = {
58             tag: 'li',
59             cls: 'roo-navigation-bar-item',
60             cn : [
61                 {
62                     tag : 'i',
63                     cls : iconCls
64                 },
65                 {
66                     tag : 'span',
67                     cls : 'roo-navigation-bar-item-text ' + this.position,
68                     html : this.html
69                 }
70             ]
71         }
72         
73         if(this.active){
74             cfg.cls += ' active';
75         }
76         if(this.disabled){
77             cfg.cls += ' disabled';
78         }
79         
80         return cfg;
81     },
82     
83     initEvents: function() 
84     {
85         this.iconEl = this.el.select('.roo-navigation-bar-item-icon', true).first();
86         this.textEl = this.el.select('.roo-navigation-bar-item-text', true).first();
87         
88         if(Roo.isTouch){
89             this.textEl.setVisibilityMode(Roo.Element.DISPLAY).hide();
90         }
91         
92         this.iconEl.on('click', this.onClick, this);
93         
94     },
95     
96     onClick : function(e)
97     {
98         e.preventDefault();
99         
100         if(this.disabled){
101             return;
102         }
103         
104         if(this.fireEvent('click', this, e) === false){
105             return;
106         };
107         
108         this.parent().setActiveItem(this);
109         
110     },
111     
112     isActive: function () 
113     {
114         return this.active;
115     },
116     
117     setActive : function(state)
118     {
119         if(this.active == state){
120             return;
121         }
122         
123         this.active = state;
124         
125         if (this.el.hasClass('active')) {
126             this.el.removeClass('active');
127         }
128         
129         if (state) {
130             this.el.addClass('active');
131         }
132         
133         return;
134     },
135     
136     disable : function()
137     {
138         this.disabled = true;
139         
140         this.el.addClass('disabled');
141         
142     }
143     
144     
145     
146 //    
147 //    onClick : function(e)
148 //    {
149 //        if(
150 //                this.preventDefault || 
151 //                this.href == '#' 
152 //        ){
153 //            
154 //            e.preventDefault();
155 //        }
156 //        
157 //        if (this.disabled) {
158 //            return;
159 //        }
160 //        
161 //        var tg = Roo.bootstrap.TabGroup.get(this.navId);
162 //        if (tg && tg.transition) {
163 //            Roo.log("waiting for the transitionend");
164 //            return;
165 //        }
166 //        
167 //        
168 //        
169 //        //Roo.log("fire event clicked");
170 //        if(this.fireEvent('click', this, e) === false){
171 //            return;
172 //        };
173 //        
174 //        if(this.tagtype == 'span'){
175 //            return;
176 //        }
177 //        
178 //        //Roo.log(this.href);
179 //        var ael = this.el.select('a',true).first();
180 //        //Roo.log(ael);
181 //        
182 //        if(ael && this.animateRef && this.href.indexOf('#') > -1){
183 //            //Roo.log(["test:",ael.dom.href.split("#")[0], document.location.toString().split("#")[0]]);
184 //            if (ael.dom.href.split("#")[0] != document.location.toString().split("#")[0]) {
185 //                return; // ignore... - it's a 'hash' to another page.
186 //            }
187 //            
188 //            e.preventDefault();
189 //            this.scrollToElement(e);
190 //        }
191 //        
192 //        
193 //        var p =  this.parent();
194 //   
195 //        if (['tabs','pills'].indexOf(p.type)!==-1) {
196 //            if (typeof(p.setActiveItem) !== 'undefined') {
197 //                p.setActiveItem(this);
198 //            }
199 //        }
200 //        
201 //        // if parent is a navbarheader....- and link is probably a '#' page ref.. then remove the expanded menu.
202 //        if (p.parentType == 'NavHeaderbar' && !this.menu) {
203 //            // remove the collapsed menu expand...
204 //            p.parent().el.select('.navbar-collapse',true).removeClass('in');  
205 //        }
206 //    },
207 //    
208 //    isActive: function () {
209 //        return this.active
210 //    },
211 //    setActive : function(state, fire, is_was_active)
212 //    {
213 //        if (this.active && !state && this.navId) {
214 //            this.was_active = true;
215 //            var nv = Roo.bootstrap.NavGroup.get(this.navId);
216 //            if (nv) {
217 //                nv.clearWasActive(this);
218 //            }
219 //            
220 //        }
221 //        this.active = state;
222 //        
223 //        if (!state ) {
224 //            this.el.removeClass('active');
225 //        } else if (!this.el.hasClass('active')) {
226 //            this.el.addClass('active');
227 //        }
228 //        if (fire) {
229 //            this.fireEvent('changed', this, state);
230 //        }
231 //        
232 //        // show a panel if it's registered and related..
233 //        
234 //        if (!this.navId || !this.tabId || !state || is_was_active) {
235 //            return;
236 //        }
237 //        
238 //        var tg = Roo.bootstrap.TabGroup.get(this.navId);
239 //        if (!tg) {
240 //            return;
241 //        }
242 //        var pan = tg.getPanelByName(this.tabId);
243 //        if (!pan) {
244 //            return;
245 //        }
246 //        // if we can not flip to new panel - go back to old nav highlight..
247 //        if (false == tg.showPanel(pan)) {
248 //            var nv = Roo.bootstrap.NavGroup.get(this.navId);
249 //            if (nv) {
250 //                var onav = nv.getWasActive();
251 //                if (onav) {
252 //                    onav.setActive(true, false, true);
253 //                }
254 //            }
255 //            
256 //        }
257 //        
258 //        
259 //      
260 //    },
261 //     // this should not be here...
262 //    setDisabled : function(state)
263 //    {
264 //        this.disabled = state;
265 //        if (!state ) {
266 //            this.el.removeClass('disabled');
267 //        } else if (!this.el.hasClass('disabled')) {
268 //            this.el.addClass('disabled');
269 //        }
270 //        
271 //    },
272 //    
273 //    /**
274 //     * Fetch the element to display the tooltip on.
275 //     * @return {Roo.Element} defaults to this.el
276 //     */
277 //    tooltipEl : function()
278 //    {
279 //        return this.el.select('' + this.tagtype + '', true).first();
280 //    },
281 //    
282 //    scrollToElement : function(e)
283 //    {
284 //        var c = document.body;
285 //        
286 //        /*
287 //         * Firefox / IE places the overflow at the html level, unless specifically styled to behave differently.
288 //         */
289 //        if(Roo.isFirefox || Roo.isIE || Roo.isIE11){
290 //            c = document.documentElement;
291 //        }
292 //        
293 //        var target = Roo.get(c).select('a[name=' + this.href.split('#')[1] +']', true).first();
294 //        
295 //        if(!target){
296 //            return;
297 //        }
298 //
299 //        var o = target.calcOffsetsTo(c);
300 //        
301 //        var options = {
302 //            target : target,
303 //            value : o[1]
304 //        }
305 //        
306 //        this.fireEvent('scrollto', this, options, e);
307 //        
308 //        Roo.get(c).scrollTo('top', options.value, true);
309 //        
310 //        return;
311 //    }
312 });
313  
314
315