Browse Source
import ExtJS's TabScrollerMenu example (http://tinyurl.com/37mvt9y); add it to the main tab panel to support n900 displays
Natenom/support-murmur-13-1446181288462
import ExtJS's TabScrollerMenu example (http://tinyurl.com/37mvt9y); add it to the main tab panel to support n900 displays
Natenom/support-murmur-13-1446181288462
Michael Ziegler
15 years ago
4 changed files with 261 additions and 0 deletions
-
29pyweb/mumble/media/css/tab-scroller-menu.css
-
BINpyweb/mumble/media/img/tab-scroller-menu.gif
-
223pyweb/mumble/media/js/TabScrollerMenu.js
-
9pyweb/mumble/templates/mumble/mumble.html
@ -0,0 +1,29 @@ |
|||
/*! |
|||
* Ext JS Library 3.2.1 |
|||
* Copyright(c) 2006-2010 Ext JS, Inc. |
|||
* licensing@extjs.com |
|||
* http://www.extjs.com/license |
|||
*/ |
|||
.x-tab-scroller-right-over { |
|||
background-position: -18px 0; |
|||
} |
|||
|
|||
.x-tab-tabmenu-right { |
|||
border-bottom: 1px solid #8db2e3; |
|||
width:18px; |
|||
position:absolute; |
|||
right:0; |
|||
top:0; |
|||
z-index:10; |
|||
cursor:pointer; |
|||
} |
|||
.x-tab-tabmenu-over { |
|||
background-position: -18px 0; |
|||
} |
|||
.x-tab-tabmenu-disabled { |
|||
background-position: 0 0; |
|||
opacity:.5; |
|||
-moz-opacity:.5; |
|||
filter:alpha(opacity=50); |
|||
cursor:default; |
|||
} |
After Width: 36 | Height: 43 | Size: 1.0 KiB |
@ -0,0 +1,223 @@ |
|||
/*! |
|||
* Ext JS Library 3.2.1 |
|||
* Copyright(c) 2006-2010 Ext JS, Inc. |
|||
* licensing@extjs.com |
|||
* http://www.extjs.com/license
|
|||
*/ |
|||
Ext.ns('Ext.ux'); |
|||
/** |
|||
* @class Ext.ux.TabScrollerMenu |
|||
* @extends Object |
|||
* Plugin (ptype = 'tabscrollermenu') for adding a tab scroller menu to tabs. |
|||
* @constructor |
|||
* @param {Object} config Configuration options |
|||
* @ptype tabscrollermenu |
|||
*/ |
|||
Ext.ux.TabScrollerMenu = Ext.extend(Object, { |
|||
/** |
|||
* @cfg {Number} pageSize How many items to allow per submenu. |
|||
*/ |
|||
pageSize : 10, |
|||
/** |
|||
* @cfg {Number} maxText How long should the title of each {@link Ext.menu.Item} be. |
|||
*/ |
|||
maxText : 15, |
|||
/** |
|||
* @cfg {String} menuPrefixText Text to prefix the submenus. |
|||
*/ |
|||
menuPrefixText : 'Items', |
|||
constructor : function(config) { |
|||
config = config || {}; |
|||
Ext.apply(this, config); |
|||
}, |
|||
//private
|
|||
init : function(tabPanel) { |
|||
Ext.apply(tabPanel, this.parentOverrides); |
|||
|
|||
tabPanel.tabScrollerMenu = this; |
|||
var thisRef = this; |
|||
|
|||
tabPanel.on({ |
|||
render : { |
|||
scope : tabPanel, |
|||
single : true, |
|||
fn : function() { |
|||
var newFn = tabPanel.createScrollers.createSequence(thisRef.createPanelsMenu, this); |
|||
tabPanel.createScrollers = newFn; |
|||
} |
|||
} |
|||
}); |
|||
}, |
|||
// private && sequeneced
|
|||
createPanelsMenu : function() { |
|||
var h = this.stripWrap.dom.offsetHeight; |
|||
|
|||
//move the right menu item to the left 18px
|
|||
var rtScrBtn = this.header.dom.firstChild; |
|||
Ext.fly(rtScrBtn).applyStyles({ |
|||
right : '18px' |
|||
}); |
|||
|
|||
var stripWrap = Ext.get(this.strip.dom.parentNode); |
|||
stripWrap.applyStyles({ |
|||
'margin-right' : '36px' |
|||
}); |
|||
|
|||
// Add the new righthand menu
|
|||
var scrollMenu = this.header.insertFirst({ |
|||
cls:'x-tab-tabmenu-right' |
|||
}); |
|||
scrollMenu.setHeight(h); |
|||
scrollMenu.addClassOnOver('x-tab-tabmenu-over'); |
|||
scrollMenu.on('click', this.showTabsMenu, this); |
|||
|
|||
this.scrollLeft.show = this.scrollLeft.show.createSequence(function() { |
|||
scrollMenu.show(); |
|||
}); |
|||
|
|||
this.scrollLeft.hide = this.scrollLeft.hide.createSequence(function() { |
|||
scrollMenu.hide(); |
|||
}); |
|||
|
|||
}, |
|||
/** |
|||
* Returns an the current page size (this.pageSize); |
|||
* @return {Number} this.pageSize The current page size. |
|||
*/ |
|||
getPageSize : function() { |
|||
return this.pageSize; |
|||
}, |
|||
/** |
|||
* Sets the number of menu items per submenu "page size". |
|||
* @param {Number} pageSize The page size |
|||
*/ |
|||
setPageSize : function(pageSize) { |
|||
this.pageSize = pageSize; |
|||
}, |
|||
/** |
|||
* Returns the current maxText length; |
|||
* @return {Number} this.maxText The current max text length. |
|||
*/ |
|||
getMaxText : function() { |
|||
return this.maxText; |
|||
}, |
|||
/** |
|||
* Sets the maximum text size for each menu item. |
|||
* @param {Number} t The max text per each menu item. |
|||
*/ |
|||
setMaxText : function(t) { |
|||
this.maxText = t; |
|||
}, |
|||
/** |
|||
* Returns the current menu prefix text String.; |
|||
* @return {String} this.menuPrefixText The current menu prefix text. |
|||
*/ |
|||
getMenuPrefixText : function() { |
|||
return this.menuPrefixText; |
|||
}, |
|||
/** |
|||
* Sets the menu prefix text String. |
|||
* @param {String} t The menu prefix text. |
|||
*/ |
|||
setMenuPrefixText : function(t) { |
|||
this.menuPrefixText = t; |
|||
}, |
|||
// private && applied to the tab panel itself.
|
|||
parentOverrides : { |
|||
// all execute within the scope of the tab panel
|
|||
// private
|
|||
showTabsMenu : function(e) { |
|||
if (this.tabsMenu) { |
|||
this.tabsMenu.destroy(); |
|||
this.un('destroy', this.tabsMenu.destroy, this.tabsMenu); |
|||
this.tabsMenu = null; |
|||
} |
|||
this.tabsMenu = new Ext.menu.Menu(); |
|||
this.on('destroy', this.tabsMenu.destroy, this.tabsMenu); |
|||
|
|||
this.generateTabMenuItems(); |
|||
|
|||
var target = Ext.get(e.getTarget()); |
|||
var xy = target.getXY(); |
|||
//
|
|||
//Y param + 24 pixels
|
|||
xy[1] += 24; |
|||
|
|||
this.tabsMenu.showAt(xy); |
|||
}, |
|||
// private
|
|||
generateTabMenuItems : function() { |
|||
var curActive = this.getActiveTab(); |
|||
var totalItems = this.items.getCount(); |
|||
var pageSize = this.tabScrollerMenu.getPageSize(); |
|||
|
|||
|
|||
if (totalItems > pageSize) { |
|||
var numSubMenus = Math.floor(totalItems / pageSize); |
|||
var remainder = totalItems % pageSize; |
|||
|
|||
// Loop through all of the items and create submenus in chunks of 10
|
|||
for (var i = 0 ; i < numSubMenus; i++) { |
|||
var curPage = (i + 1) * pageSize; |
|||
var menuItems = []; |
|||
|
|||
|
|||
for (var x = 0; x < pageSize; x++) { |
|||
index = x + curPage - pageSize; |
|||
var item = this.items.get(index); |
|||
menuItems.push(this.autoGenMenuItem(item)); |
|||
} |
|||
|
|||
this.tabsMenu.add({ |
|||
text : this.tabScrollerMenu.getMenuPrefixText() + ' ' + (curPage - pageSize + 1) + ' - ' + curPage, |
|||
menu : menuItems |
|||
}); |
|||
|
|||
} |
|||
// remaining items
|
|||
if (remainder > 0) { |
|||
var start = numSubMenus * pageSize; |
|||
menuItems = []; |
|||
for (var i = start ; i < totalItems; i ++ ) { |
|||
var item = this.items.get(i); |
|||
menuItems.push(this.autoGenMenuItem(item)); |
|||
} |
|||
|
|||
this.tabsMenu.add({ |
|||
text : this.tabScrollerMenu.menuPrefixText + ' ' + (start + 1) + ' - ' + (start + menuItems.length), |
|||
menu : menuItems |
|||
}); |
|||
|
|||
} |
|||
} |
|||
else { |
|||
this.items.each(function(item) { |
|||
if (item.id != curActive.id && !item.hidden) { |
|||
this.tabsMenu.add(this.autoGenMenuItem(item)); |
|||
} |
|||
}, this); |
|||
} |
|||
}, |
|||
// private
|
|||
autoGenMenuItem : function(item) { |
|||
var maxText = this.tabScrollerMenu.getMaxText(); |
|||
var text = Ext.util.Format.ellipsis(item.title, maxText); |
|||
|
|||
return { |
|||
text : text, |
|||
handler : this.showTabFromMenu, |
|||
scope : this, |
|||
disabled : item.disabled, |
|||
tabToShow : item, |
|||
iconCls : item.iconCls |
|||
} |
|||
|
|||
}, |
|||
// private
|
|||
showTabFromMenu : function(menuItem) { |
|||
this.setActiveTab(menuItem.tabToShow); |
|||
} |
|||
} |
|||
}); |
|||
|
|||
Ext.reg('tabscrollermenu', Ext.ux.TabScrollerMenu); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue