Feature #1472 ยป AllProjectsTableListView.patch
| app/views/projects/index.rhtml (working copy) | ||
|---|---|---|
| 1 | 1 |
<div class="contextual"> |
| 2 |
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'add'}, :class => 'icon icon-add') + ' |' if User.current.admin? %>
|
|
| 3 | 2 |
<%= link_to l(:label_issue_view_all), { :controller => 'issues' } %> |
|
| 4 | 3 |
<%= link_to l(:label_overall_activity), { :controller => 'projects', :action => 'activity' }%>
|
| 5 | 4 |
</div> |
| 6 | 5 | |
| 7 | 6 |
<h2><%=l(:label_project_plural)%></h2> |
| 8 | 7 | |
| 8 |
<TABLE cellspacing="0" width="100%"> |
|
| 9 |
<TR><TD colspan="8"><HR/></TD></TR> |
|
| 9 | 10 |
<% @project_tree.keys.sort.each do |project| %> |
| 10 |
<h3><%= link_to h(project.name), {:action => 'show', :id => project}, :class => (User.current.member_of?(project) ? "icon icon-fav" : "") %></h3>
|
|
| 11 |
<%= textilizable(project.short_description, :project => project) %> |
|
| 12 | ||
| 11 |
<TR><TD width="10px" align="right" class=<%= (User.current.member_of?(project) ? "\"icon0 icon-fav\"" : "") %> > |
|
| 12 |
<TD align="left" valign="middle" NOWRAP colspan="3"> |
|
| 13 |
<h3><%= link_to(h(project.name), {:action => 'show', :id => project}) %></h3>
|
|
| 14 |
</TD></TR> |
|
| 15 |
<TR><TD></TD><TD colspan="7"> |
|
| 16 |
<%= textilizable(project.description, :project => project) %> |
|
| 17 |
</TD></TR> |
|
| 13 | 18 |
<% if @project_tree[project].any? %> |
| 14 |
<p><%= l(:label_subproject_plural) %>: |
|
| 15 |
<%= @project_tree[project].sort.collect {|subproject|
|
|
| 16 |
link_to(h(subproject.name), {:action => 'show', :id => subproject}, :class => (User.current.member_of?(subproject) ? "icon icon-fav" : ""))}.join(', ') %></p>
|
|
| 19 |
<TR><TD colspan="8"><BR/></TD></TR> |
|
| 20 |
<TR><TD></TD><TD valign="top"><%= l(:label_subproject_plural) %>:</TD> |
|
| 21 |
<% index = 0 %> |
|
| 22 |
<% @project_tree[project].sort.each do |subproject| %> |
|
| 23 |
<TD width="10px" align="right" class=<%= (User.current.member_of?(subproject) ? "\"icon0 icon-fav\"" : "") %> ></TD> |
|
| 24 |
<TD align="left" valign="middle"> |
|
| 25 |
<%= link_to(h(subproject.name), {:action => 'show', :id => subproject}) %>
|
|
| 26 |
</TD> |
|
| 27 |
<% index = index + 1 %> |
|
| 28 |
<% if index.modulo(3) == 0 %> |
|
| 29 |
</TR><TR><TD></TD><TD></TD> |
|
| 30 |
<% end %> |
|
| 31 |
<% end %> |
|
| 17 | 32 |
<% end %> |
| 33 |
<TR><TD colspan="8"><HR/></TD></TR> |
|
| 18 | 34 |
<% end %> |
| 35 |
</TABLE> |
|
| 19 | 36 | |
| 37 | ||
| 20 | 38 |
<% if User.current.logged? %> |
| 21 |
<p style="text-align:right;">
|
|
| 39 |
<div class="contextual">
|
|
| 22 | 40 |
<span class="icon icon-fav"><%= l(:label_my_projects) %></span> |
| 23 |
</p>
|
|
| 41 |
</div>
|
|
| 24 | 42 |
<% end %> |
| 25 | 43 | |
| 26 |
<p class="other-formats"> |
|
| 27 |
<%= l(:label_export_to) %> |
|
| 28 |
<span><%= link_to 'Atom', {:format => 'atom', :key => User.current.rss_key}, :class => 'feed' %></span>
|
|
| 29 |
</p> |
|
| 30 | 44 | |
| 31 | 45 |
<% html_title(l(:label_project_plural)) -%> |
| app/views/projects/show.rhtml (working copy) | ||
|---|---|---|
| 1 |
<h2><%=l(:label_overview)%></h2>
|
|
| 2 |
|
|
| 1 |
<h2><%=l(:label_overview)%></h2> |
|
| 2 | ||
| 3 | 3 |
<div class="splitcontentleft"> |
| 4 |
<%= textilizable @project.description %> |
|
| 5 |
<ul>
|
|
| 6 |
<% unless @project.homepage.blank? %><li><%=l(:field_homepage)%>: <%= auto_link @project.homepage %></li><% end %>
|
|
| 4 |
<%= textilizable @project.description %> |
|
| 5 |
<ul>
|
|
| 6 |
<% unless @project.homepage.blank? %><li><%=l(:field_homepage)%>: <%= auto_link @project.homepage %></li><% end %>
|
|
| 7 | 7 |
<% if @subprojects.any? %> |
| 8 |
<li><%=l(:label_subproject_plural)%>: <%= @subprojects.collect{|p| link_to(h(p.name), :action => 'show', :id => p)}.join(", ") %></li>
|
|
| 8 |
<TABLE cellspacing="0"> |
|
| 9 |
<TR><TD colspan="2"><%=l(:label_subproject_plural)%>:</TD></TR> |
|
| 10 |
<% @subprojects.collect do |subproject| %> |
|
| 11 |
<TR><TD width="10px" align="right" class=<%=(User.current.member_of?(subproject) ? "\"icon0 icon-fav\"" : "")%></TD> |
|
| 12 |
<TD align="left" valign="middle" NOWRAP> |
|
| 13 |
<%= link_to(h(subproject.name), {:action => 'show', :id => subproject}) %>
|
|
| 14 |
</TD></TR> |
|
| 9 | 15 |
<% end %> |
| 10 |
<% if @project.parent %> |
|
| 11 |
<li><%=l(:field_parent)%>: <%= link_to h(@project.parent.name), :controller => 'projects', :action => 'show', :id => @project.parent %></li> |
|
| 12 |
<% end %> |
|
| 13 |
<% for custom_value in @custom_values %> |
|
| 14 |
<% if !custom_value.value.empty? %> |
|
| 15 |
<li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li> |
|
| 16 |
<% end %> |
|
| 17 |
<% end %> |
|
| 18 |
</ul> |
|
| 16 |
</TABLE> |
|
| 17 |
<% end %> |
|
| 18 |
<% if @project.parent %> |
|
| 19 | 19 | |
| 20 |
<TABLE cellspacing="0"> |
|
| 21 |
<TR><TD colspan="2"><%=l(:field_parent)%>:</TD></TR> |
|
| 22 |
<TR><TD width="10px" align="right" class=<%=(User.current.member_of?(@project.parent) ? "\"icon0 icon-fav\"" : "")%></TD> |
|
| 23 |
<TD><%= link_to h(@project.parent.name), :controller => 'projects', :action => 'show', :id => @project.parent %></TD> |
|
| 24 |
</TR> |
|
| 25 |
</TABLE> |
|
| 26 |
<% end %> |
|
| 27 |
<% for custom_value in @custom_values %> |
|
| 28 |
<% if !custom_value.value.empty? %> |
|
| 29 |
<li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li> |
|
| 30 |
<% end %> |
|
| 31 |
<% end %> |
|
| 32 |
</ul> |
|
| 33 |
</div> |
|
| 34 | ||
| 35 |
<div class="splitcontentright"> |
|
| 36 |
<% if @news.any? && authorize_for('news', 'index') %>
|
|
| 37 |
<div class="box"> |
|
| 38 |
<h3><%=l(:label_news_latest)%></h3> |
|
| 39 |
<%= render :partial => 'news/news', :collection => @news %> |
|
| 40 |
<p><%= link_to l(:label_news_view_all), :controller => 'news', :action => 'index', :project_id => @project %></p> |
|
| 41 |
</div> |
|
| 42 |
<% end %> |
|
| 43 | ||
| 20 | 44 |
<% if User.current.allowed_to?(:view_issues, @project) %> |
| 21 |
<div class="box">
|
|
| 45 |
<div class="box"> |
|
| 22 | 46 |
<h3 class="icon22 icon22-tracker"><%=l(:label_issue_tracking)%></h3> |
| 23 | 47 |
<ul> |
| 24 |
<% for tracker in @trackers %>
|
|
| 25 |
<li><%= link_to tracker.name, :controller => 'issues', :action => 'index', :project_id => @project,
|
|
| 26 |
:set_filter => 1,
|
|
| 48 |
<% for tracker in @trackers %> |
|
| 49 |
<li><%= link_to tracker.name, :controller => 'issues', :action => 'index', :project_id => @project, |
|
| 50 |
:set_filter => 1, |
|
| 27 | 51 |
"tracker_id" => tracker.id %>: |
| 28 | 52 |
<%= @open_issues_by_tracker[tracker] || 0 %> <%= lwr(:label_open_issues, @open_issues_by_tracker[tracker] || 0) %> |
| 29 | 53 |
<%= l(:label_on) %> <%= @total_issues_by_tracker[tracker] || 0 %></li> |
| ... | ... | |
| 32 | 56 |
<p><%= link_to l(:label_issue_view_all), :controller => 'issues', :action => 'index', :project_id => @project, :set_filter => 1 %></p> |
| 33 | 57 |
</div> |
| 34 | 58 |
<% end %> |
| 35 |
</div> |
|
| 36 | 59 | |
| 37 |
<div class="splitcontentright"> |
|
| 38 | 60 |
<% if @members_by_role.any? %> |
| 39 |
<div class="box"> |
|
| 40 |
<h3 class="icon22 icon22-users"><%=l(:label_member_plural)%></h3> |
|
| 41 |
<p><% @members_by_role.keys.sort.each do |role| %> |
|
| 42 |
<%= role.name %>: |
|
| 43 |
<%= @members_by_role[role].collect(&:user).sort.collect{|u| link_to_user u}.join(", ") %>
|
|
| 44 |
<br /> |
|
| 45 |
<% end %></p> |
|
| 46 |
</div> |
|
| 47 |
<% end %> |
|
| 48 |
|
|
| 49 |
<% if @news.any? && authorize_for('news', 'index') %>
|
|
| 50 |
<div class="box"> |
|
| 51 |
<h3><%=l(:label_news_latest)%></h3> |
|
| 52 |
<%= render :partial => 'news/news', :collection => @news %> |
|
| 53 |
<p><%= link_to l(:label_news_view_all), :controller => 'news', :action => 'index', :project_id => @project %></p> |
|
| 54 |
</div> |
|
| 55 |
<% end %> |
|
| 61 |
<div class="box"> |
|
| 62 |
<h3 class="icon22 icon22-users"><%=l(:label_member_plural)%></h3> |
|
| 63 |
<p><% @members_by_role.keys.sort.each do |role| %> |
|
| 64 |
<%= role.name %>: |
|
| 65 |
<%= @members_by_role[role].collect(&:user).sort.collect{|u| link_to_user u}.join(", ") %>
|
|
| 66 |
<br /> |
|
| 67 |
<% end %></p> |
|
| 68 |
</div> |
|
| 69 |
<% end %> |
|
| 70 | ||
| 56 | 71 |
</div> |
| 57 | 72 | |
| 58 | 73 |
<% content_for :sidebar do %> |
| ... | ... | |
| 64 | 79 |
<h3><%= l(:label_planning) %></h3> |
| 65 | 80 |
<p><%= planning_links.join(' | ') %></p>
|
| 66 | 81 |
<% end %> |
| 67 |
|
|
| 82 | ||
| 68 | 83 |
<% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %> |
| 69 | 84 |
<h3><%= l(:label_spent_time) %></h3> |
| 70 | 85 |
<p><span class="icon icon-time"><%= lwr(:label_f_hour, @total_hours) %></span></p> |
| public/stylesheets/application.css (working copy) | ||
|---|---|---|
| 57 | 57 | |
| 58 | 58 |
#content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; height:600px; min-height: 600px;}
|
| 59 | 59 |
* html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
|
| 60 |
html>body #content { height: auto; min-height: 600px; overflow: auto; }
|
|
| 60 |
html>body #content { height: auto; min-height: 600px; overflow: auto; }
|
|
| 61 | 61 | |
| 62 | 62 |
#main.nosidebar #sidebar{ display: none; }
|
| 63 | 63 |
#main.nosidebar #content{ width: auto; border-right: 0; }
|
| ... | ... | |
| 78 | 78 |
a.issue.closed, .issue.closed a { text-decoration: line-through; }
|
| 79 | 79 | |
| 80 | 80 |
/***** Tables *****/ |
| 81 |
table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
|
|
| 81 |
table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px;}
|
|
| 82 | 82 |
table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
|
| 83 | 83 |
table.list td { vertical-align: top; }
|
| 84 | 84 |
table.list td.id { width: 2%; text-align: center;}
|
| 85 | 85 |
table.list td.checkbox { width: 15px; padding: 0px;}
|
| 86 |
table.list.issues { margin-top: 10px; }
|
|
| 87 |
table.projects { margin-top: 10px; }
|
|
| 86 | 88 | |
| 87 |
table.list.issues { margin-top: 10px; }
|
|
| 88 | 89 |
tr.issue { text-align: center; white-space: nowrap; }
|
| 89 |
tr.issue td.subject, tr.issue td.category { white-space: normal; }
|
|
| 90 |
tr.issue td.subject { text-align: left; }
|
|
| 90 |
tr.issue td.subject, tr.issue td.category, tr.issue td.last_comment { white-space: normal; }
|
|
| 91 |
tr.issue td.subject, tr.issue td.last_comment { text-align: left; width: 25%}
|
|
| 91 | 92 |
tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
|
| 92 | 93 | |
| 93 | 94 |
tr.entry { border: 1px solid #f8f8f8; }
|
| ... | ... | |
| 159 | 160 |
li p {margin-top: 0;}
|
| 160 | 161 |
div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
|
| 161 | 162 |
p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
|
| 162 |
p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
|
|
| 163 |
p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
|
|
| 163 | 164 | |
| 164 | 165 |
fieldset#filters { padding: 0.7em; }
|
| 165 | 166 |
fieldset#filters p { margin: 1.2em 0 0.8em 2px; }
|
| ... | ... | |
| 236 | 237 |
float: left; |
| 237 | 238 |
text-align: right; |
| 238 | 239 |
margin-left: -180px; /*width of left column*/ |
| 239 |
width: 175px; /*width of labels. Should be smaller than left column to create some right
|
|
| 240 |
width: 175px; /*width of labels. Should be smaller than left column to create some right |
|
| 240 | 241 |
margin*/ |
| 241 | 242 |
} |
| 242 | 243 | |
| ... | ... | |
| 272 | 273 |
#errorExplanation, div.flash, .nodata, .warning {
|
| 273 | 274 |
padding: 4px 4px 4px 30px; |
| 274 | 275 |
margin-bottom: 12px; |
| 275 |
font-size: 1.1em;
|
|
| 276 |
border: 2px solid;
|
|
| 276 |
font-size: 1.1em;
|
|
| 277 |
border: 2px solid;
|
|
| 277 | 278 |
} |
| 278 | 279 | |
| 279 | 280 |
div.flash {margin-top: 8px;}
|
| 280 | 281 | |
| 281 | 282 |
div.flash.error, #errorExplanation {
|
| 282 | 283 |
background: url(../images/false.png) 8px 5px no-repeat; |
| 283 |
background-color: #ffe3e3;
|
|
| 284 |
border-color: #dd0000;
|
|
| 285 |
color: #550000;
|
|
| 284 |
background-color: #ffe3e3;
|
|
| 285 |
border-color: #dd0000;
|
|
| 286 |
color: #550000;
|
|
| 286 | 287 |
} |
| 287 | 288 | |
| 288 | 289 |
div.flash.notice {
|
| 289 | 290 |
background: url(../images/true.png) 8px 5px no-repeat; |
| 290 |
background-color: #dfffdf;
|
|
| 291 |
border-color: #9fcf9f;
|
|
| 292 |
color: #005f00;
|
|
| 291 |
background-color: #dfffdf;
|
|
| 292 |
border-color: #9fcf9f;
|
|
| 293 |
color: #005f00;
|
|
| 293 | 294 |
} |
| 294 | 295 | |
| 295 | 296 |
.nodata, .warning {
|
| 296 | 297 |
text-align: center; |
| 297 |
background-color: #FFEBC1;
|
|
| 298 |
border-color: #FDBF3B;
|
|
| 299 |
color: #A6750C;
|
|
| 298 |
background-color: #FFEBC1;
|
|
| 299 |
border-color: #FDBF3B;
|
|
| 300 |
color: #A6750C;
|
|
| 300 | 301 |
} |
| 301 | 302 | |
| 302 | 303 |
#errorExplanation ul { font-size: 0.9em;}
|
| ... | ... | |
| 528 | 529 |
} |
| 529 | 530 | |
| 530 | 531 |
.task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
|
| 531 |
.task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
|
|
| 532 |
.task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
|
|
| 532 | 533 |
.task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
|
| 533 | 534 |
.milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
|
| 534 | 535 | |
| ... | ... | |
| 549 | 550 |
vertical-align: middle; |
| 550 | 551 |
} |
| 551 | 552 | |
| 553 |
.icon0 {
|
|
| 554 |
background-position: 0% 30%; |
|
| 555 |
background-repeat: no-repeat; |
|
| 556 |
padding-left: 0px; |
|
| 557 |
padding-right: 0px; |
|
| 558 |
padding-top: 0px; |
|
| 559 |
padding-bottom: 0px; |
|
| 560 |
} |
|
| 561 | ||
| 552 | 562 |
.icon-add { background-image: url(../images/add.png); }
|
| 553 | 563 |
.icon-edit { background-image: url(../images/edit.png); }
|
| 554 | 564 |
.icon-copy { background-image: url(../images/copy.png); }
|