Adds buttons to scroll the tabs when they overflow.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3174 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2009-12-14 20:13:29 +00:00
parent 09e47a3b63
commit 1c11d3403e
5 changed files with 85 additions and 2 deletions

View File

@ -9,7 +9,16 @@
:onclick => "showTab('#{tab[:name]}'); this.blur(); return false;" %></li> :onclick => "showTab('#{tab[:name]}'); this.blur(); return false;" %></li>
<% end -%> <% end -%>
</ul> </ul>
<div class="tabs-buttons" style="display:none;">
<button class="tab-left" onclick="moveTabLeft(this);"></button>
<button class="tab-right" onclick="moveTabRight(this);"></button>
</div> </div>
</div>
<script>
Event.observe(window, 'load', function() { displayTabsButtons(); });
Event.observe(window, 'resize', function() { displayTabsButtons(); });
</script>
<% tabs.each do |tab| -%> <% tabs.each do |tab| -%>
<%= content_tag('div', render(:partial => tab[:partial], :locals => {:tab => tab} ), <%= content_tag('div', render(:partial => tab[:partial], :locals => {:tab => tab} ),

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -73,6 +73,55 @@ function showTab(name) {
return false; return false;
} }
function moveTabRight(el) {
var lis = Element.up(el, 'div.tabs').down('ul').childElements();
var tabsWidth = 0;
var i;
for (i=0; i<lis.length; i++) {
if (lis[i].visible()) {
tabsWidth += lis[i].getWidth() + 6;
}
}
if (tabsWidth < Element.up(el, 'div.tabs').getWidth() - 60) {
return;
}
i=0;
while (i<lis.length && !lis[i].visible()) {
i++;
}
lis[i].hide();
}
function moveTabLeft(el) {
var lis = Element.up(el, 'div.tabs').down('ul').childElements();
var i = 0;
while (i<lis.length && !lis[i].visible()) {
i++;
}
if (i>0) {
lis[i-1].show();
}
}
function displayTabsButtons() {
var lis;
var tabsWidth = 0;
var i;
$$('div.tabs').each(function(el) {
lis = el.down('ul').childElements();
for (i=0; i<lis.length; i++) {
if (lis[i].visible()) {
tabsWidth += lis[i].getWidth() + 6;
}
}
if (tabsWidth < el.getWidth() - 60) {
el.down('div.tabs-buttons').hide();
} else {
el.down('div.tabs-buttons').show();
}
});
}
function setPredecessorFieldsVisibility() { function setPredecessorFieldsVisibility() {
relationType = $('relation_relation_type'); relationType = $('relation_relation_type');
if (relationType && relationType.value == "precedes") { if (relationType && relationType.value == "precedes") {

View File

@ -486,8 +486,8 @@ p.pourcent {font-size: 80%;}
p.progress-info {clear: left; font-style: italic; font-size: 80%;} p.progress-info {clear: left; font-style: italic; font-size: 80%;}
/***** Tabs *****/ /***** Tabs *****/
#content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative;} #content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative; overflow:hidden;}
#content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em;} #content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em; width: 2000px;}
#content .tabs>ul { bottom:-1px; } /* others */ #content .tabs>ul { bottom:-1px; } /* others */
#content .tabs ul li { #content .tabs ul li {
float:left; float:left;
@ -524,6 +524,31 @@ border-bottom: 1px solid #fff;
background-color: #fff; background-color: #fff;
} }
div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: -1px; }
button.tab-left, button.tab-right {
font-size: 0.9em;
cursor: pointer;
height:24px;
border: 1px solid #ccc;
border-bottom: 1px solid #bbbbbb;
position:absolute;
padding:4px;
width: 20px;
}
button.tab-left {
right: 20px;
bottom: 0;
background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
}
button.tab-right {
right: 0;
bottom: 0;
background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;}
}
/***** Auto-complete *****/ /***** Auto-complete *****/
div.autocomplete { div.autocomplete {
position:absolute; position:absolute;