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
pull/351/head
Jean-Philippe Lang 15 years ago
parent 09e47a3b63
commit 1c11d3403e
  1. 9
      app/views/common/_tabs.rhtml
  2. BIN
      public/images/bullet_arrow_left.png
  3. BIN
      public/images/bullet_arrow_right.png
  4. 49
      public/javascripts/application.js
  5. 29
      public/stylesheets/application.css

@ -9,8 +9,17 @@
:onclick => "showTab('#{tab[:name]}'); this.blur(); return false;" %></li>
<% end -%>
</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>
<script>
Event.observe(window, 'load', function() { displayTabsButtons(); });
Event.observe(window, 'resize', function() { displayTabsButtons(); });
</script>
<% tabs.each do |tab| -%>
<%= content_tag('div', render(:partial => tab[:partial], :locals => {:tab => tab} ),
:id => "tab-content-#{tab[:name]}",

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -73,6 +73,55 @@ function showTab(name) {
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() {
relationType = $('relation_relation_type');
if (relationType && relationType.value == "precedes") {

@ -486,8 +486,8 @@ p.pourcent {font-size: 80%;}
p.progress-info {clear: left; font-style: italic; font-size: 80%;}
/***** Tabs *****/
#content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative;}
#content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em;}
#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; width: 2000px;}
#content .tabs>ul { bottom:-1px; } /* others */
#content .tabs ul li {
float:left;
@ -524,6 +524,31 @@ border-bottom: 1px solid #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 *****/
div.autocomplete {
position:absolute;

Loading…
Cancel
Save