Project

General

Profile

Feature #1472 ยป AllProjectsTableListView.patch

Chris Peterson, 2008-06-16 21:14

View differences:

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); }
    (1-1/1)