Hybrid View
-
18 Oct 2009 6:27 AM #1
Add new tab button in tab strip
Add new tab button in tab strip
Usage:
Obviously it just creates a new defaultType (whatever you configure that to for your TabPanel - defaults to Ext.Panel). It's up to you to access the newly added item and manipulate it.Code:plugins: [ Ext.ux.AddTabButton ], createTab: function() { // Optional function which the plugin uses to create new tabs return { title: 'New Tab', closable: true }; },
Code:Ext.ux.AddTabButton = (function() { function onTabPanelRender() { this.addTab = this.itemTpl.insertBefore(this.edge, { id: this.id + 'addTabButton', cls: 'add-tab', text: this.addTabText || ' ', iconCls: '' }, true); this.addTab.child('em.x-tab-left').setStyle('padding-right', '6px'); this.addTab.child('a.x-tab-right').setStyle('padding-left', '6px'); new Ext.ToolTip({ target: this.addTab, bodyCfg: { html: 'Add new tab' } }); this.addTab.on({ mousedown: stopEvent, click: onAddTabClick, scope: this }); } function createScrollers() { this.scrollerWidth = (this.scrollRightWidth = this.scrollRight.getWidth()) + this.scrollLeft.getWidth(); } function autoScrollTabs() { var scrollersVisible = (this.scrollLeft && this.scrollLeft.isVisible()), pos = this.tabPosition == 'top' ? 'header' : 'footer'; if (scrollersVisible) { if (this.addTab.dom.parentNode === this.strip.dom) { if (this.addTabWrap) { this.addTabWrap.show(); } else { this.addTabWrap = this[pos].createChild({ cls: 'x-tab-strip-wrap', style: { position: 'absolute', right: (this.scrollRightWidth + 1) + 'px', top: 0, width: '30px', margin: 0 }, cn: { tag: 'ul', cls: 'x-tab-strip x-tab-strip-' + this.tabPosition, style: { width: 'auto' } } }); this.addTabWrap.setVisibilityMode(Ext.Element.DISPLAY); this.addTabUl = this.addTabWrap.child('ul'); } this.addTabUl.dom.appendChild(this.addTab.dom); this.addTab.setStyle('float', 'none'); } this.stripWrap.setWidth(this[pos].getWidth(true) - (this.scrollerWidth + 31)); this.stripWrap.setStyle('margin-right', (this.scrollRightWidth + 31) + 'px'); } else { // if ((this.addTab.dom.parentNode !== this.strip.dom)) { var notEnoughSpace = (((this[pos].getWidth(true) - this.edge.getOffsetsTo(this.stripWrap)[0])) < 33) this.addTabWrap.hide(); this.addTab.setStyle('float', ''); this.strip.dom.insertBefore(this.addTab.dom, this.edge.dom); this.stripWrap.setWidth(this.stripWrap.getWidth() + 31); if (notEnoughSpace) { this.autoScrollTabs(); } } } } function autoSizeTabs() { this.addTab.child('.x-tab-strip-inner').setStyle('width', '14px'); } function stopEvent(e) { e.stopEvent(); } function onAddTabClick() { this.setActiveTab(this.add(this.createTab? this.createTab() : { title: 'New Tab' })); } return { init: function(tp) { if (tp instanceof Ext.TabPanel) { tp.onRender = tp.onRender.createSequence(onTabPanelRender); tp.createScrollers = tp.createScrollers.createSequence(createScrollers); tp.autoScrollTabs = tp.autoScrollTabs.createSequence(autoScrollTabs); tp.autoSizeTabs = tp.autoSizeTabs.createSequence(autoSizeTabs); } } }; })();Search the forum: http://www.google.com/coop/cse?cx=01...%3Az7of1ufqccu
Read the docs too: http://extjs.com/deploy/dev/docs/
Scope: http://extjs.com/forum/showthread.ph...642#post257642
-
18 Oct 2009 9:12 AM #2Sencha - Community Support Team
- Join Date
- Mar 2007
- Location
- Frederick MD, NYC, DC
- Posts
- 16,170
- Vote Rating
- 33
excellent dude.


Jay Garcia @ModusJesus || Modus Create co-founder
Ext JS in Action author
Sencha Touch in Action author
Get in touch for Ext JS & Sencha Touch Touch Training
We are also working on Video-based Sencha Touch training: Check it out here.
-
5 Nov 2009 1:12 AM #3
thank you, thats sooo cool, but how can i use iconCls: 'add' ?
-
6 Nov 2009 1:26 AM #4
OK, now you can configure your TabPabel with
To use text in the add tab button.Code:addTabText: '+'
Or, use the class to give it an icon eg
To giveCode:div.x-tab-strip-wrap .add-tab a span.x-tab-strip-inner { background: url(../../resources/images/default/dd/drop-add.gif) no-repeat center center; }
Search the forum: http://www.google.com/coop/cse?cx=01...%3Az7of1ufqccu
Read the docs too: http://extjs.com/deploy/dev/docs/
Scope: http://extjs.com/forum/showthread.ph...642#post257642
-
20 Nov 2009 12:46 PM #5
Hi Animal,
There is a way to add buttons with right aligment, independent of the aligment of the tabs. I mean, all the tabs would be with left aligment and the new tab buttons with right aligment??
-
4 Mar 2010 6:30 AM #6
Animal, very nice
The tab was very narrow so I changed the css to:
Thanks, MartyHTML Code:div.x-tab-strip-wrap .add-tab a span.x-tab-strip-inner { width:26px; background: url(../../resources/images/default/dd/drop-add.gif) no-repeat center center; }
-
7 Feb 2011 8:25 PM #7
Hi Animal,
First of all i would like to thank you for providing this plugin.
I am getting an error in Firebug when i click on the Add button
item is undefined
anonymous(Object browserEvent=Event mouseout button=0 type=mouseout)ext-all-debug.js (line 30044)
anonymous(Object browserEvent=Event mouseout button=0 type=mouseout)ext-all-debug.js (line 30065)
h()ext-all-debug.js (line 4615)
[Break on this error] if(item.disabled){\n
This is the code in Ext-all-debug.js where the error points
30044 if(item.disabled){
30045 return {
30046 close : null,
30047 item : null,
30048 el : null
30049 };
30050 }
30051 }
What is this, and how can i solve it?
-
7 Feb 2011 8:51 PM #8
Got it fixed. I hadmissed the implementation of stopEvent function on mouseDown
-
8 Feb 2011 6:40 AM #9
-
6 May 2011 2:24 AM #10
This plugin is great. Has anyone got it working in Ext4?


Reply With Quote