##// END OF EJS Templates
Makes tickets and timelogs filters collapsible (UI)....
Jean-Philippe Lang -
r2777:3477ded32af3
parent child
Show More
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
@@ -1,55 +1,56
1 <% form_tag({}, :id => 'query_form') do %>
1 <% form_tag({}, :id => 'query_form') do %>
2 <% if @query.new_record? %>
2 <% if @query.new_record? %>
3 <h2><%= l(:label_calendar) %></h2>
3 <h2><%= l(:label_calendar) %></h2>
4 <fieldset id="filters"><legend><%= l(:label_filter_plural) %></legend>
4 <fieldset id="filters" class="collapsible">
5 <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
6 <div>
5 <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
7 <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
6 </fieldset>
8 </div>
9 </fieldset>
7 <% else %>
10 <% else %>
8 <h2><%=h @query.name %></h2>
11 <h2><%=h @query.name %></h2>
9 <% html_title @query.name %>
12 <% html_title @query.name %>
10 <% end %>
13 <% end %>
11
14
12 <fieldset id="date-range"><legend><%= l(:label_date_range) %></legend>
15 <p style="float:right;">
13 <%= select_month(@month, :prefix => "month", :discard_type => true) %>
14 <%= select_year(@year, :prefix => "year", :discard_type => true) %>
15 </fieldset>
16
17 <p style="float:right; margin:0px;">
18 <%= link_to_remote ('&#171; ' + (@month==1 ? "#{month_name(12)} #{@year-1}" : "#{month_name(@month-1)}")),
16 <%= link_to_remote ('&#171; ' + (@month==1 ? "#{month_name(12)} #{@year-1}" : "#{month_name(@month-1)}")),
19 {:update => "content", :url => { :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1) }},
17 {:update => "content", :url => { :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1) }},
20 {:href => url_for(:action => 'calendar', :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1))}
18 {:href => url_for(:action => 'calendar', :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1))}
21 %> |
19 %> |
22 <%= link_to_remote ((@month==12 ? "#{month_name(1)} #{@year+1}" : "#{month_name(@month+1)}") + ' &#187;'),
20 <%= link_to_remote ((@month==12 ? "#{month_name(1)} #{@year+1}" : "#{month_name(@month+1)}") + ' &#187;'),
23 {:update => "content", :url => { :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1) }},
21 {:update => "content", :url => { :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1) }},
24 {:href => url_for(:action => 'calendar', :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1))}
22 {:href => url_for(:action => 'calendar', :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1))}
25 %>
23 %>
26 </p>
24 </p>
27
25
28 <p class="buttons">
26 <p class="buttons">
27 <%= select_month(@month, :prefix => "month", :discard_type => true) %>
28 <%= select_year(@year, :prefix => "year", :discard_type => true) %>
29
29 <%= link_to_remote l(:button_apply),
30 <%= link_to_remote l(:button_apply),
30 { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
31 { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
31 :update => "content",
32 :update => "content",
32 :with => "Form.serialize('query_form')"
33 :with => "Form.serialize('query_form')"
33 }, :class => 'icon icon-checked' %>
34 }, :class => 'icon icon-checked' %>
34
35
35 <%= link_to_remote l(:button_clear),
36 <%= link_to_remote l(:button_clear),
36 { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
37 { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
37 :update => "content",
38 :update => "content",
38 }, :class => 'icon icon-reload' if @query.new_record? %>
39 }, :class => 'icon icon-reload' if @query.new_record? %>
39 </p>
40 </p>
40 <% end %>
41 <% end %>
41
42
42 <%= error_messages_for 'query' %>
43 <%= error_messages_for 'query' %>
43 <% if @query.valid? %>
44 <% if @query.valid? %>
44 <%= render :partial => 'common/calendar', :locals => {:calendar => @calendar} %>
45 <%= render :partial => 'common/calendar', :locals => {:calendar => @calendar} %>
45
46
46 <%= image_tag 'arrow_from.png' %>&nbsp;&nbsp;<%= l(:text_tip_task_begin_day) %><br />
47 <%= image_tag 'arrow_from.png' %>&nbsp;&nbsp;<%= l(:text_tip_task_begin_day) %><br />
47 <%= image_tag 'arrow_to.png' %>&nbsp;&nbsp;<%= l(:text_tip_task_end_day) %><br />
48 <%= image_tag 'arrow_to.png' %>&nbsp;&nbsp;<%= l(:text_tip_task_end_day) %><br />
48 <%= image_tag 'arrow_bw.png' %>&nbsp;&nbsp;<%= l(:text_tip_task_begin_end_day) %><br />
49 <%= image_tag 'arrow_bw.png' %>&nbsp;&nbsp;<%= l(:text_tip_task_begin_end_day) %><br />
49 <% end %>
50 <% end %>
50
51
51 <% content_for :sidebar do %>
52 <% content_for :sidebar do %>
52 <%= render :partial => 'issues/sidebar' %>
53 <%= render :partial => 'issues/sidebar' %>
53 <% end %>
54 <% end %>
54
55
55 <% html_title(l(:label_calendar)) -%>
56 <% html_title(l(:label_calendar)) -%>
@@ -1,254 +1,255
1 <% form_tag(params.merge(:month => nil, :year => nil, :months => nil), :id => 'query_form') do %>
1 <% form_tag(params.merge(:month => nil, :year => nil, :months => nil), :id => 'query_form') do %>
2 <% if @query.new_record? %>
2 <% if @query.new_record? %>
3 <h2><%=l(:label_gantt)%></h2>
3 <h2><%=l(:label_gantt)%></h2>
4 <fieldset id="filters"><legend><%= l(:label_filter_plural) %></legend>
4 <fieldset id="filters" class="collapsible">
5 <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
6 <div>
5 <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
7 <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
6 </fieldset>
8 </div>
9 </fieldset>
7 <% else %>
10 <% else %>
8 <h2><%=h @query.name %></h2>
11 <h2><%=h @query.name %></h2>
9 <% html_title @query.name %>
12 <% html_title @query.name %>
10 <% end %>
13 <% end %>
11
14
12 <fieldset id="date-range"><legend><%= l(:label_date_range) %></legend>
15 <p style="float:right;">
13 <%= text_field_tag 'months', @gantt.months, :size => 2 %>
14 <%= l(:label_months_from) %>
15 <%= select_month(@gantt.month_from, :prefix => "month", :discard_type => true) %>
16 <%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %>
17 <%= hidden_field_tag 'zoom', @gantt.zoom %>
18 </fieldset>
19
20 <p style="float:right; margin:0px;">
21 <%= if @gantt.zoom < 4
16 <%= if @gantt.zoom < 4
22 link_to_remote image_tag('zoom_in.png'), {:url => @gantt.params.merge(:zoom => (@gantt.zoom+1)), :update => 'content'}, {:href => url_for(@gantt.params.merge(:zoom => (@gantt.zoom+1)))}
17 link_to_remote image_tag('zoom_in.png'), {:url => @gantt.params.merge(:zoom => (@gantt.zoom+1)), :update => 'content'}, {:href => url_for(@gantt.params.merge(:zoom => (@gantt.zoom+1)))}
23 else
18 else
24 image_tag 'zoom_in_g.png'
19 image_tag 'zoom_in_g.png'
25 end %>
20 end %>
26 <%= if @gantt.zoom > 1
21 <%= if @gantt.zoom > 1
27 link_to_remote image_tag('zoom_out.png'), {:url => @gantt.params.merge(:zoom => (@gantt.zoom-1)), :update => 'content'}, {:href => url_for(@gantt.params.merge(:zoom => (@gantt.zoom-1)))}
22 link_to_remote image_tag('zoom_out.png'), {:url => @gantt.params.merge(:zoom => (@gantt.zoom-1)), :update => 'content'}, {:href => url_for(@gantt.params.merge(:zoom => (@gantt.zoom-1)))}
28 else
23 else
29 image_tag 'zoom_out_g.png'
24 image_tag 'zoom_out_g.png'
30 end %>
25 end %>
31 </p>
26 </p>
32
27
33 <p class="buttons">
28 <p class="buttons">
29 <%= text_field_tag 'months', @gantt.months, :size => 2 %>
30 <%= l(:label_months_from) %>
31 <%= select_month(@gantt.month_from, :prefix => "month", :discard_type => true) %>
32 <%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %>
33 <%= hidden_field_tag 'zoom', @gantt.zoom %>
34
34 <%= link_to_remote l(:button_apply),
35 <%= link_to_remote l(:button_apply),
35 { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
36 { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
36 :update => "content",
37 :update => "content",
37 :with => "Form.serialize('query_form')"
38 :with => "Form.serialize('query_form')"
38 }, :class => 'icon icon-checked' %>
39 }, :class => 'icon icon-checked' %>
39
40
40 <%= link_to_remote l(:button_clear),
41 <%= link_to_remote l(:button_clear),
41 { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
42 { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
42 :update => "content",
43 :update => "content",
43 }, :class => 'icon icon-reload' if @query.new_record? %>
44 }, :class => 'icon icon-reload' if @query.new_record? %>
44 </p>
45 </p>
45 <% end %>
46 <% end %>
46
47
47 <%= error_messages_for 'query' %>
48 <%= error_messages_for 'query' %>
48 <% if @query.valid? %>
49 <% if @query.valid? %>
49 <% zoom = 1
50 <% zoom = 1
50 @gantt.zoom.times { zoom = zoom * 2 }
51 @gantt.zoom.times { zoom = zoom * 2 }
51
52
52 subject_width = 330
53 subject_width = 330
53 header_heigth = 18
54 header_heigth = 18
54
55
55 headers_height = header_heigth
56 headers_height = header_heigth
56 show_weeks = false
57 show_weeks = false
57 show_days = false
58 show_days = false
58
59
59 if @gantt.zoom >1
60 if @gantt.zoom >1
60 show_weeks = true
61 show_weeks = true
61 headers_height = 2*header_heigth
62 headers_height = 2*header_heigth
62 if @gantt.zoom > 2
63 if @gantt.zoom > 2
63 show_days = true
64 show_days = true
64 headers_height = 3*header_heigth
65 headers_height = 3*header_heigth
65 end
66 end
66 end
67 end
67
68
68 g_width = (@gantt.date_to - @gantt.date_from + 1)*zoom
69 g_width = (@gantt.date_to - @gantt.date_from + 1)*zoom
69 g_height = [(20 * @gantt.events.length + 6)+150, 206].max
70 g_height = [(20 * @gantt.events.length + 6)+150, 206].max
70 t_height = g_height + headers_height
71 t_height = g_height + headers_height
71 %>
72 %>
72
73
73 <table width="100%" style="border:0; border-collapse: collapse;">
74 <table width="100%" style="border:0; border-collapse: collapse;">
74 <tr>
75 <tr>
75 <td style="width:<%= subject_width %>px; padding:0px;">
76 <td style="width:<%= subject_width %>px; padding:0px;">
76
77
77 <div style="position:relative;height:<%= t_height + 24 %>px;width:<%= subject_width + 1 %>px;">
78 <div style="position:relative;height:<%= t_height + 24 %>px;width:<%= subject_width + 1 %>px;">
78 <div style="right:-2px;width:<%= subject_width %>px;height:<%= headers_height %>px;background: #eee;" class="gantt_hdr"></div>
79 <div style="right:-2px;width:<%= subject_width %>px;height:<%= headers_height %>px;background: #eee;" class="gantt_hdr"></div>
79 <div style="right:-2px;width:<%= subject_width %>px;height:<%= t_height %>px;border-left: 1px solid #c0c0c0;overflow:hidden;" class="gantt_hdr"></div>
80 <div style="right:-2px;width:<%= subject_width %>px;height:<%= t_height %>px;border-left: 1px solid #c0c0c0;overflow:hidden;" class="gantt_hdr"></div>
80 <%
81 <%
81 #
82 #
82 # Tasks subjects
83 # Tasks subjects
83 #
84 #
84 top = headers_height + 8
85 top = headers_height + 8
85 @gantt.events.each do |i| %>
86 @gantt.events.each do |i| %>
86 <div style="position: absolute;line-height:1.2em;height:16px;top:<%= top %>px;left:4px;overflow:hidden;"><small>
87 <div style="position: absolute;line-height:1.2em;height:16px;top:<%= top %>px;left:4px;overflow:hidden;"><small>
87 <% if i.is_a? Issue %>
88 <% if i.is_a? Issue %>
88 <%= h("#{i.project} -") unless @project && @project == i.project %>
89 <%= h("#{i.project} -") unless @project && @project == i.project %>
89 <%= link_to_issue i %>: <%=h i.subject %>
90 <%= link_to_issue i %>: <%=h i.subject %>
90 <% else %>
91 <% else %>
91 <span class="icon icon-package">
92 <span class="icon icon-package">
92 <%= h("#{i.project} -") unless @project && @project == i.project %>
93 <%= h("#{i.project} -") unless @project && @project == i.project %>
93 <%= link_to_version i %>
94 <%= link_to_version i %>
94 </span>
95 </span>
95 <% end %>
96 <% end %>
96 </small></div>
97 </small></div>
97 <% top = top + 20
98 <% top = top + 20
98 end %>
99 end %>
99 </div>
100 </div>
100 </td>
101 </td>
101 <td>
102 <td>
102
103
103 <div style="position:relative;height:<%= t_height + 24 %>px;overflow:auto;">
104 <div style="position:relative;height:<%= t_height + 24 %>px;overflow:auto;">
104 <div style="width:<%= g_width-1 %>px;height:<%= headers_height %>px;background: #eee;" class="gantt_hdr">&nbsp;</div>
105 <div style="width:<%= g_width-1 %>px;height:<%= headers_height %>px;background: #eee;" class="gantt_hdr">&nbsp;</div>
105 <%
106 <%
106 #
107 #
107 # Months headers
108 # Months headers
108 #
109 #
109 month_f = @gantt.date_from
110 month_f = @gantt.date_from
110 left = 0
111 left = 0
111 height = (show_weeks ? header_heigth : header_heigth + g_height)
112 height = (show_weeks ? header_heigth : header_heigth + g_height)
112 @gantt.months.times do
113 @gantt.months.times do
113 width = ((month_f >> 1) - month_f) * zoom - 1
114 width = ((month_f >> 1) - month_f) * zoom - 1
114 %>
115 %>
115 <div style="left:<%= left %>px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr">
116 <div style="left:<%= left %>px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr">
116 <%= link_to "#{month_f.year}-#{month_f.month}", @gantt.params.merge(:year => month_f.year, :month => month_f.month), :title => "#{month_name(month_f.month)} #{month_f.year}"%>
117 <%= link_to "#{month_f.year}-#{month_f.month}", @gantt.params.merge(:year => month_f.year, :month => month_f.month), :title => "#{month_name(month_f.month)} #{month_f.year}"%>
117 </div>
118 </div>
118 <%
119 <%
119 left = left + width + 1
120 left = left + width + 1
120 month_f = month_f >> 1
121 month_f = month_f >> 1
121 end %>
122 end %>
122
123
123 <%
124 <%
124 #
125 #
125 # Weeks headers
126 # Weeks headers
126 #
127 #
127 if show_weeks
128 if show_weeks
128 left = 0
129 left = 0
129 height = (show_days ? header_heigth-1 : header_heigth-1 + g_height)
130 height = (show_days ? header_heigth-1 : header_heigth-1 + g_height)
130 if @gantt.date_from.cwday == 1
131 if @gantt.date_from.cwday == 1
131 # @date_from is monday
132 # @date_from is monday
132 week_f = @gantt.date_from
133 week_f = @gantt.date_from
133 else
134 else
134 # find next monday after @date_from
135 # find next monday after @date_from
135 week_f = @gantt.date_from + (7 - @gantt.date_from.cwday + 1)
136 week_f = @gantt.date_from + (7 - @gantt.date_from.cwday + 1)
136 width = (7 - @gantt.date_from.cwday + 1) * zoom-1
137 width = (7 - @gantt.date_from.cwday + 1) * zoom-1
137 %>
138 %>
138 <div style="left:<%= left %>px;top:19px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr">&nbsp;</div>
139 <div style="left:<%= left %>px;top:19px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr">&nbsp;</div>
139 <%
140 <%
140 left = left + width+1
141 left = left + width+1
141 end %>
142 end %>
142 <%
143 <%
143 while week_f <= @gantt.date_to
144 while week_f <= @gantt.date_to
144 width = (week_f + 6 <= @gantt.date_to) ? 7 * zoom -1 : (@gantt.date_to - week_f + 1) * zoom-1
145 width = (week_f + 6 <= @gantt.date_to) ? 7 * zoom -1 : (@gantt.date_to - week_f + 1) * zoom-1
145 %>
146 %>
146 <div style="left:<%= left %>px;top:19px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr">
147 <div style="left:<%= left %>px;top:19px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr">
147 <small><%= week_f.cweek if width >= 16 %></small>
148 <small><%= week_f.cweek if width >= 16 %></small>
148 </div>
149 </div>
149 <%
150 <%
150 left = left + width+1
151 left = left + width+1
151 week_f = week_f+7
152 week_f = week_f+7
152 end
153 end
153 end %>
154 end %>
154
155
155 <%
156 <%
156 #
157 #
157 # Days headers
158 # Days headers
158 #
159 #
159 if show_days
160 if show_days
160 left = 0
161 left = 0
161 height = g_height + header_heigth - 1
162 height = g_height + header_heigth - 1
162 wday = @gantt.date_from.cwday
163 wday = @gantt.date_from.cwday
163 (@gantt.date_to - @gantt.date_from + 1).to_i.times do
164 (@gantt.date_to - @gantt.date_from + 1).to_i.times do
164 width = zoom - 1
165 width = zoom - 1
165 %>
166 %>
166 <div style="left:<%= left %>px;top:37px;width:<%= width %>px;height:<%= height %>px;font-size:0.7em;<%= "background:#f1f1f1;" if wday > 5 %>" class="gantt_hdr">
167 <div style="left:<%= left %>px;top:37px;width:<%= width %>px;height:<%= height %>px;font-size:0.7em;<%= "background:#f1f1f1;" if wday > 5 %>" class="gantt_hdr">
167 <%= day_name(wday).first %>
168 <%= day_name(wday).first %>
168 </div>
169 </div>
169 <%
170 <%
170 left = left + width+1
171 left = left + width+1
171 wday = wday + 1
172 wday = wday + 1
172 wday = 1 if wday > 7
173 wday = 1 if wday > 7
173 end
174 end
174 end %>
175 end %>
175
176
176 <%
177 <%
177 #
178 #
178 # Tasks
179 # Tasks
179 #
180 #
180 top = headers_height + 10
181 top = headers_height + 10
181 @gantt.events.each do |i|
182 @gantt.events.each do |i|
182 if i.is_a? Issue
183 if i.is_a? Issue
183 i_start_date = (i.start_date >= @gantt.date_from ? i.start_date : @gantt.date_from )
184 i_start_date = (i.start_date >= @gantt.date_from ? i.start_date : @gantt.date_from )
184 i_end_date = (i.due_before <= @gantt.date_to ? i.due_before : @gantt.date_to )
185 i_end_date = (i.due_before <= @gantt.date_to ? i.due_before : @gantt.date_to )
185
186
186 i_done_date = i.start_date + ((i.due_before - i.start_date+1)*i.done_ratio/100).floor
187 i_done_date = i.start_date + ((i.due_before - i.start_date+1)*i.done_ratio/100).floor
187 i_done_date = (i_done_date <= @gantt.date_from ? @gantt.date_from : i_done_date )
188 i_done_date = (i_done_date <= @gantt.date_from ? @gantt.date_from : i_done_date )
188 i_done_date = (i_done_date >= @gantt.date_to ? @gantt.date_to : i_done_date )
189 i_done_date = (i_done_date >= @gantt.date_to ? @gantt.date_to : i_done_date )
189
190
190 i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today
191 i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today
191
192
192 i_left = ((i_start_date - @gantt.date_from)*zoom).floor
193 i_left = ((i_start_date - @gantt.date_from)*zoom).floor
193 i_width = ((i_end_date - i_start_date + 1)*zoom).floor - 2 # total width of the issue (- 2 for left and right borders)
194 i_width = ((i_end_date - i_start_date + 1)*zoom).floor - 2 # total width of the issue (- 2 for left and right borders)
194 d_width = ((i_done_date - i_start_date)*zoom).floor - 2 # done width
195 d_width = ((i_done_date - i_start_date)*zoom).floor - 2 # done width
195 l_width = i_late_date ? ((i_late_date - i_start_date+1)*zoom).floor - 2 : 0 # delay width
196 l_width = i_late_date ? ((i_late_date - i_start_date+1)*zoom).floor - 2 : 0 # delay width
196 %>
197 %>
197 <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= i_width %>px;" class="task task_todo">&nbsp;</div>
198 <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= i_width %>px;" class="task task_todo">&nbsp;</div>
198 <% if l_width > 0 %>
199 <% if l_width > 0 %>
199 <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= l_width %>px;" class="task task_late">&nbsp;</div>
200 <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= l_width %>px;" class="task task_late">&nbsp;</div>
200 <% end %>
201 <% end %>
201 <% if d_width > 0 %>
202 <% if d_width > 0 %>
202 <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= d_width %>px;" class="task task_done">&nbsp;</div>
203 <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= d_width %>px;" class="task task_done">&nbsp;</div>
203 <% end %>
204 <% end %>
204 <div style="top:<%= top %>px;left:<%= i_left + i_width + 5 %>px;background:#fff;" class="task">
205 <div style="top:<%= top %>px;left:<%= i_left + i_width + 5 %>px;background:#fff;" class="task">
205 <%= i.status.name %>
206 <%= i.status.name %>
206 <%= (i.done_ratio).to_i %>%
207 <%= (i.done_ratio).to_i %>%
207 </div>
208 </div>
208 <div class="tooltip" style="position: absolute;top:<%= top %>px;left:<%= i_left %>px;width:<%= i_width %>px;height:12px;">
209 <div class="tooltip" style="position: absolute;top:<%= top %>px;left:<%= i_left %>px;width:<%= i_width %>px;height:12px;">
209 <span class="tip">
210 <span class="tip">
210 <%= render_issue_tooltip i %>
211 <%= render_issue_tooltip i %>
211 </span></div>
212 </span></div>
212 <% else
213 <% else
213 i_left = ((i.start_date - @gantt.date_from)*zoom).floor
214 i_left = ((i.start_date - @gantt.date_from)*zoom).floor
214 %>
215 %>
215 <div style="top:<%= top %>px;left:<%= i_left %>px;width:15px;" class="task milestone">&nbsp;</div>
216 <div style="top:<%= top %>px;left:<%= i_left %>px;width:15px;" class="task milestone">&nbsp;</div>
216 <div style="top:<%= top %>px;left:<%= i_left + 12 %>px;background:#fff;" class="task">
217 <div style="top:<%= top %>px;left:<%= i_left + 12 %>px;background:#fff;" class="task">
217 <%= h("#{i.project} -") unless @project && @project == i.project %>
218 <%= h("#{i.project} -") unless @project && @project == i.project %>
218 <strong><%=h i %></strong>
219 <strong><%=h i %></strong>
219 </div>
220 </div>
220 <% end %>
221 <% end %>
221 <% top = top + 20
222 <% top = top + 20
222 end %>
223 end %>
223
224
224 <%
225 <%
225 #
226 #
226 # Today red line (excluded from cache)
227 # Today red line (excluded from cache)
227 #
228 #
228 if Date.today >= @gantt.date_from and Date.today <= @gantt.date_to %>
229 if Date.today >= @gantt.date_from and Date.today <= @gantt.date_to %>
229 <div style="position: absolute;height:<%= g_height %>px;top:<%= headers_height + 1 %>px;left:<%= ((Date.today-@gantt.date_from+1)*zoom).floor()-1 %>px;width:10px;border-left: 1px dashed red;">&nbsp;</div>
230 <div style="position: absolute;height:<%= g_height %>px;top:<%= headers_height + 1 %>px;left:<%= ((Date.today-@gantt.date_from+1)*zoom).floor()-1 %>px;width:10px;border-left: 1px dashed red;">&nbsp;</div>
230 <% end %>
231 <% end %>
231
232
232 </div>
233 </div>
233 </td>
234 </td>
234 </tr>
235 </tr>
235 </table>
236 </table>
236
237
237 <table width="100%">
238 <table width="100%">
238 <tr>
239 <tr>
239 <td align="left"><%= link_to_remote ('&#171; ' + l(:label_previous)), {:url => @gantt.params_previous, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_previous)} %></td>
240 <td align="left"><%= link_to_remote ('&#171; ' + l(:label_previous)), {:url => @gantt.params_previous, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_previous)} %></td>
240 <td align="right"><%= link_to_remote (l(:label_next) + ' &#187;'), {:url => @gantt.params_next, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_next)} %></td>
241 <td align="right"><%= link_to_remote (l(:label_next) + ' &#187;'), {:url => @gantt.params_next, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_next)} %></td>
241 </tr>
242 </tr>
242 </table>
243 </table>
243
244
244 <% other_formats_links do |f| %>
245 <% other_formats_links do |f| %>
245 <%= f.link_to 'PDF', :url => @gantt.params %>
246 <%= f.link_to 'PDF', :url => @gantt.params %>
246 <%= f.link_to('PNG', :url => @gantt.params) if @gantt.respond_to?('to_image') %>
247 <%= f.link_to('PNG', :url => @gantt.params) if @gantt.respond_to?('to_image') %>
247 <% end %>
248 <% end %>
248 <% end # query.valid? %>
249 <% end # query.valid? %>
249
250
250 <% content_for :sidebar do %>
251 <% content_for :sidebar do %>
251 <%= render :partial => 'issues/sidebar' %>
252 <%= render :partial => 'issues/sidebar' %>
252 <% end %>
253 <% end %>
253
254
254 <% html_title(l(:label_gantt)) -%>
255 <% html_title(l(:label_gantt)) -%>
@@ -1,74 +1,82
1 <% if @query.new_record? %>
1 <% if @query.new_record? %>
2 <h2><%=l(:label_issue_plural)%></h2>
2 <h2><%=l(:label_issue_plural)%></h2>
3 <% html_title(l(:label_issue_plural)) %>
3 <% html_title(l(:label_issue_plural)) %>
4
4
5 <% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %>
5 <% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %>
6 <%= hidden_field_tag('project_id', @project.to_param) if @project %>
6 <%= hidden_field_tag('project_id', @project.to_param) if @project %>
7 <div id="query_form_content">
7 <div id="query_form_content">
8 <fieldset id="filters"><legend><%= l(:label_filter_plural) %></legend>
8 <fieldset id="filters" class="collapsible">
9 <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
9 <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
10 <div>
11 <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
12 </div>
10 </fieldset>
13 </fieldset>
11 <p><%= l(:field_group_by) %>
14 <fieldset class="collapsible collapsed">
12 <%= select_tag('group_by', options_for_select([[]] + @query.groupable_columns.collect {|c| [c.caption, c.name.to_s]}, @query.group_by)) %></p>
15 <legend onclick="toggleFieldset(this);">Options</legend>
16 <div style="display: none;">
17 <%= l(:field_group_by) %>
18 <%= select_tag('group_by', options_for_select([[]] + @query.groupable_columns.collect {|c| [c.caption, c.name.to_s]}, @query.group_by)) %></p>
19 </div>
20 </fieldset>
13 </div>
21 </div>
14 <p class="buttons">
22 <p class="buttons">
15
23
16 <%= link_to_remote l(:button_apply),
24 <%= link_to_remote l(:button_apply),
17 { :url => { :set_filter => 1 },
25 { :url => { :set_filter => 1 },
18 :update => "content",
26 :update => "content",
19 :with => "Form.serialize('query_form')"
27 :with => "Form.serialize('query_form')"
20 }, :class => 'icon icon-checked' %>
28 }, :class => 'icon icon-checked' %>
21
29
22 <%= link_to_remote l(:button_clear),
30 <%= link_to_remote l(:button_clear),
23 { :url => { :set_filter => 1, :project_id => @project },
31 { :url => { :set_filter => 1, :project_id => @project },
24 :method => :get,
32 :method => :get,
25 :update => "content",
33 :update => "content",
26 }, :class => 'icon icon-reload' %>
34 }, :class => 'icon icon-reload' %>
27
35
28 <% if User.current.allowed_to?(:save_queries, @project, :global => true) %>
36 <% if User.current.allowed_to?(:save_queries, @project, :global => true) %>
29 <%= link_to l(:button_save), {}, :onclick => "$('query_form').submit(); return false;", :class => 'icon icon-save' %>
37 <%= link_to l(:button_save), {}, :onclick => "$('query_form').submit(); return false;", :class => 'icon icon-save' %>
30 <% end %>
38 <% end %>
31 </p>
39 </p>
32 <% end %>
40 <% end %>
33 <% else %>
41 <% else %>
34 <div class="contextual">
42 <div class="contextual">
35 <% if @query.editable_by?(User.current) %>
43 <% if @query.editable_by?(User.current) %>
36 <%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %>
44 <%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %>
37 <%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
45 <%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
38 <% end %>
46 <% end %>
39 </div>
47 </div>
40 <h2><%=h @query.name %></h2>
48 <h2><%=h @query.name %></h2>
41 <div id="query_form"></div>
49 <div id="query_form"></div>
42 <% html_title @query.name %>
50 <% html_title @query.name %>
43 <% end %>
51 <% end %>
44
52
45 <%= error_messages_for 'query' %>
53 <%= error_messages_for 'query' %>
46 <% if @query.valid? %>
54 <% if @query.valid? %>
47 <% if @issues.empty? %>
55 <% if @issues.empty? %>
48 <p class="nodata"><%= l(:label_no_data) %></p>
56 <p class="nodata"><%= l(:label_no_data) %></p>
49 <% else %>
57 <% else %>
50 <%= render :partial => 'issues/list', :locals => {:issues => @issues, :query => @query} %>
58 <%= render :partial => 'issues/list', :locals => {:issues => @issues, :query => @query} %>
51 <p class="pagination"><%= pagination_links_full @issue_pages, @issue_count %></p>
59 <p class="pagination"><%= pagination_links_full @issue_pages, @issue_count %></p>
52 <% end %>
60 <% end %>
53
61
54 <% other_formats_links do |f| %>
62 <% other_formats_links do |f| %>
55 <%= f.link_to 'Atom', :url => { :project_id => @project, :query_id => (@query.new_record? ? nil : @query), :key => User.current.rss_key } %>
63 <%= f.link_to 'Atom', :url => { :project_id => @project, :query_id => (@query.new_record? ? nil : @query), :key => User.current.rss_key } %>
56 <%= f.link_to 'CSV', :url => { :project_id => @project } %>
64 <%= f.link_to 'CSV', :url => { :project_id => @project } %>
57 <%= f.link_to 'PDF', :url => { :project_id => @project } %>
65 <%= f.link_to 'PDF', :url => { :project_id => @project } %>
58 <% end %>
66 <% end %>
59
67
60 <% end %>
68 <% end %>
61
69
62 <% content_for :sidebar do %>
70 <% content_for :sidebar do %>
63 <%= render :partial => 'issues/sidebar' %>
71 <%= render :partial => 'issues/sidebar' %>
64 <% end %>
72 <% end %>
65
73
66 <% content_for :header_tags do %>
74 <% content_for :header_tags do %>
67 <%= auto_discovery_link_tag(:atom, {:query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_issue_plural)) %>
75 <%= auto_discovery_link_tag(:atom, {:query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_issue_plural)) %>
68 <%= auto_discovery_link_tag(:atom, {:action => 'changes', :query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_changes_details)) %>
76 <%= auto_discovery_link_tag(:atom, {:action => 'changes', :query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_changes_details)) %>
69 <%= javascript_include_tag 'context_menu' %>
77 <%= javascript_include_tag 'context_menu' %>
70 <%= stylesheet_link_tag 'context_menu' %>
78 <%= stylesheet_link_tag 'context_menu' %>
71 <% end %>
79 <% end %>
72
80
73 <div id="context-menu" style="display: none;"></div>
81 <div id="context-menu" style="display: none;"></div>
74 <%= javascript_tag "new ContextMenu('#{url_for(:controller => 'issues', :action => 'context_menu')}')" %>
82 <%= javascript_tag "new ContextMenu('#{url_for(:controller => 'issues', :action => 'context_menu')}')" %>
@@ -1,26 +1,35
1 <fieldset id="filters"><legend><%= l(:label_date_range) %></legend>
1 <fieldset id="date-range" class="collapsible">
2 <legend onclick="toggleFieldset(this);"><%= l(:label_date_range) %></legend>
3 <div>
2 <p>
4 <p>
3 <%= radio_button_tag 'period_type', '1', !@free_period %>
5 <%= radio_button_tag 'period_type', '1', !@free_period %>
4 <%= select_tag 'period', options_for_period_select(params[:period]),
6 <%= select_tag 'period', options_for_period_select(params[:period]),
5 :onchange => 'this.form.onsubmit();',
7 :onchange => 'this.form.onsubmit();',
6 :onfocus => '$("period_type_1").checked = true;' %>
8 :onfocus => '$("period_type_1").checked = true;' %>
7 </p>
9 </p>
8 <p>
10 <p>
9 <%= radio_button_tag 'period_type', '2', @free_period %>
11 <%= radio_button_tag 'period_type', '2', @free_period %>
10 <span onclick="$('period_type_2').checked = true;">
12 <span onclick="$('period_type_2').checked = true;">
11 <%= l(:label_date_from_to, :start => (text_field_tag('from', @from, :size => 10) + calendar_for('from')),
13 <%= l(:label_date_from_to, :start => (text_field_tag('from', @from, :size => 10) + calendar_for('from')),
12 :end => (text_field_tag('to', @to, :size => 10) + calendar_for('to'))) %>
14 :end => (text_field_tag('to', @to, :size => 10) + calendar_for('to'))) %>
13 </span>
15 </span>
14 <%= submit_tag l(:button_apply), :name => nil %>
15 </p>
16 </p>
17 </div>
16 </fieldset>
18 </fieldset>
19 <p class="buttons">
20 <%= link_to_remote l(:button_apply),
21 { :url => { },
22 :update => "content",
23 :with => "Form.serialize('query_form')"
24 }, :class => 'icon icon-checked' %>
25 </p>
17
26
18 <div class="tabs">
27 <div class="tabs">
19 <% url_params = @free_period ? { :from => @from, :to => @to } : { :period => params[:period] } %>
28 <% url_params = @free_period ? { :from => @from, :to => @to } : { :period => params[:period] } %>
20 <ul>
29 <ul>
21 <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'details', :project_id => @project }),
30 <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'details', :project_id => @project }),
22 :class => (@controller.action_name == 'details' ? 'selected' : nil)) %></li>
31 :class => (@controller.action_name == 'details' ? 'selected' : nil)) %></li>
23 <li><%= link_to(l(:label_report), url_params.merge({:controller => 'timelog', :action => 'report', :project_id => @project}),
32 <li><%= link_to(l(:label_report), url_params.merge({:controller => 'timelog', :action => 'report', :project_id => @project}),
24 :class => (@controller.action_name == 'report' ? 'selected' : nil)) %></li>
33 :class => (@controller.action_name == 'report' ? 'selected' : nil)) %></li>
25 </ul>
34 </ul>
26 </div>
35 </div>
@@ -1,35 +1,35
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
2 <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
3 </div>
3 </div>
4
4
5 <%= render_timelog_breadcrumb %>
5 <%= render_timelog_breadcrumb %>
6
6
7 <h2><%= l(:label_spent_time) %></h2>
7 <h2><%= l(:label_spent_time) %></h2>
8
8
9 <% form_remote_tag( :url => {}, :html => {:method => :get}, :method => :get, :update => 'content' ) do %>
9 <% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %>
10 <%# TOOD: remove the project_id and issue_id hidden fields, that information is
10 <%# TOOD: remove the project_id and issue_id hidden fields, that information is
11 already in the URI %>
11 already in the URI %>
12 <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
12 <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
13 <%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %>
13 <%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %>
14 <%= render :partial => 'date_range' %>
14 <%= render :partial => 'date_range' %>
15 <% end %>
15 <% end %>
16
16
17 <div class="total-hours">
17 <div class="total-hours">
18 <p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
18 <p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
19 </div>
19 </div>
20
20
21 <% unless @entries.empty? %>
21 <% unless @entries.empty? %>
22 <%= render :partial => 'list', :locals => { :entries => @entries }%>
22 <%= render :partial => 'list', :locals => { :entries => @entries }%>
23 <p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p>
23 <p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p>
24
24
25 <% other_formats_links do |f| %>
25 <% other_formats_links do |f| %>
26 <%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %>
26 <%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %>
27 <%= f.link_to 'CSV', :url => params %>
27 <%= f.link_to 'CSV', :url => params %>
28 <% end %>
28 <% end %>
29 <% end %>
29 <% end %>
30
30
31 <% html_title l(:label_spent_time), l(:label_details) %>
31 <% html_title l(:label_spent_time), l(:label_details) %>
32
32
33 <% content_for :header_tags do %>
33 <% content_for :header_tags do %>
34 <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %>
34 <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %>
35 <% end %>
35 <% end %>
@@ -1,75 +1,75
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
2 <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
3 </div>
3 </div>
4
4
5 <%= render_timelog_breadcrumb %>
5 <%= render_timelog_breadcrumb %>
6
6
7 <h2><%= l(:label_spent_time) %></h2>
7 <h2><%= l(:label_spent_time) %></h2>
8
8
9 <% form_remote_tag(:url => {}, :html => {:method => :get}, :method => :get, :update => 'content') do %>
9 <% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %>
10 <% @criterias.each do |criteria| %>
10 <% @criterias.each do |criteria| %>
11 <%= hidden_field_tag 'criterias[]', criteria, :id => nil %>
11 <%= hidden_field_tag 'criterias[]', criteria, :id => nil %>
12 <% end %>
12 <% end %>
13 <%# TODO: get rid of the project_id field, that should already be in the URL %>
13 <%# TODO: get rid of the project_id field, that should already be in the URL %>
14 <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
14 <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
15 <%= render :partial => 'date_range' %>
15 <%= render :partial => 'date_range' %>
16
16
17 <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'],
17 <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'],
18 [l(:label_month), 'month'],
18 [l(:label_month), 'month'],
19 [l(:label_week), 'week'],
19 [l(:label_week), 'week'],
20 [l(:label_day_plural).titleize, 'day']], @columns),
20 [l(:label_day_plural).titleize, 'day']], @columns),
21 :onchange => "this.form.onsubmit();" %>
21 :onchange => "this.form.onsubmit();" %>
22
22
23 <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}),
23 <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}),
24 :onchange => "this.form.onsubmit();",
24 :onchange => "this.form.onsubmit();",
25 :style => 'width: 200px',
25 :style => 'width: 200px',
26 :id => nil,
26 :id => nil,
27 :disabled => (@criterias.length >= 3)) %>
27 :disabled => (@criterias.length >= 3)) %>
28 <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns},
28 <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns},
29 :method => :get,
29 :method => :get,
30 :update => 'content'
30 :update => 'content'
31 }, :class => 'icon icon-reload' %></p>
31 }, :class => 'icon icon-reload' %></p>
32 <% end %>
32 <% end %>
33
33
34 <% unless @criterias.empty? %>
34 <% unless @criterias.empty? %>
35 <div class="total-hours">
35 <div class="total-hours">
36 <p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
36 <p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
37 </div>
37 </div>
38
38
39 <% unless @hours.empty? %>
39 <% unless @hours.empty? %>
40 <table class="list" id="time-report">
40 <table class="list" id="time-report">
41 <thead>
41 <thead>
42 <tr>
42 <tr>
43 <% @criterias.each do |criteria| %>
43 <% @criterias.each do |criteria| %>
44 <th><%= l_or_humanize(@available_criterias[criteria][:label]) %></th>
44 <th><%= l_or_humanize(@available_criterias[criteria][:label]) %></th>
45 <% end %>
45 <% end %>
46 <% columns_width = (40 / (@periods.length+1)).to_i %>
46 <% columns_width = (40 / (@periods.length+1)).to_i %>
47 <% @periods.each do |period| %>
47 <% @periods.each do |period| %>
48 <th class="period" width="<%= columns_width %>%"><%= period %></th>
48 <th class="period" width="<%= columns_width %>%"><%= period %></th>
49 <% end %>
49 <% end %>
50 <th class="total" width="<%= columns_width %>%"><%= l(:label_total) %></th>
50 <th class="total" width="<%= columns_width %>%"><%= l(:label_total) %></th>
51 </tr>
51 </tr>
52 </thead>
52 </thead>
53 <tbody>
53 <tbody>
54 <%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %>
54 <%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %>
55 <tr class="total">
55 <tr class="total">
56 <td><%= l(:label_total) %></td>
56 <td><%= l(:label_total) %></td>
57 <%= '<td></td>' * (@criterias.size - 1) %>
57 <%= '<td></td>' * (@criterias.size - 1) %>
58 <% total = 0 -%>
58 <% total = 0 -%>
59 <% @periods.each do |period| -%>
59 <% @periods.each do |period| -%>
60 <% sum = sum_hours(select_hours(@hours, @columns, period.to_s)); total += sum -%>
60 <% sum = sum_hours(select_hours(@hours, @columns, period.to_s)); total += sum -%>
61 <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
61 <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
62 <% end -%>
62 <% end -%>
63 <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
63 <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
64 </tr>
64 </tr>
65 </tbody>
65 </tbody>
66 </table>
66 </table>
67
67
68 <% other_formats_links do |f| %>
68 <% other_formats_links do |f| %>
69 <%= f.link_to 'CSV', :url => params %>
69 <%= f.link_to 'CSV', :url => params %>
70 <% end %>
70 <% end %>
71 <% end %>
71 <% end %>
72 <% end %>
72 <% end %>
73
73
74 <% html_title l(:label_spent_time), l(:label_report) %>
74 <% html_title l(:label_spent_time), l(:label_report) %>
75
75
@@ -1,154 +1,160
1 /* redMine - project management software
1 /* redMine - project management software
2 Copyright (C) 2006-2008 Jean-Philippe Lang */
2 Copyright (C) 2006-2008 Jean-Philippe Lang */
3
3
4 function checkAll (id, checked) {
4 function checkAll (id, checked) {
5 var els = Element.descendants(id);
5 var els = Element.descendants(id);
6 for (var i = 0; i < els.length; i++) {
6 for (var i = 0; i < els.length; i++) {
7 if (els[i].disabled==false) {
7 if (els[i].disabled==false) {
8 els[i].checked = checked;
8 els[i].checked = checked;
9 }
9 }
10 }
10 }
11 }
11 }
12
12
13 function toggleCheckboxesBySelector(selector) {
13 function toggleCheckboxesBySelector(selector) {
14 boxes = $$(selector);
14 boxes = $$(selector);
15 var all_checked = true;
15 var all_checked = true;
16 for (i = 0; i < boxes.length; i++) { if (boxes[i].checked == false) { all_checked = false; } }
16 for (i = 0; i < boxes.length; i++) { if (boxes[i].checked == false) { all_checked = false; } }
17 for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
17 for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
18 }
18 }
19
19
20 function showAndScrollTo(id, focus) {
20 function showAndScrollTo(id, focus) {
21 Element.show(id);
21 Element.show(id);
22 if (focus!=null) { Form.Element.focus(focus); }
22 if (focus!=null) { Form.Element.focus(focus); }
23 Element.scrollTo(id);
23 Element.scrollTo(id);
24 }
24 }
25
25
26 function toggleRowGroup(el) {
26 function toggleRowGroup(el) {
27 var tr = Element.up(el, 'tr');
27 var tr = Element.up(el, 'tr');
28 var n = Element.next(tr);
28 var n = Element.next(tr);
29 tr.toggleClassName('open');
29 tr.toggleClassName('open');
30 while (n != undefined && !n.hasClassName('group')) {
30 while (n != undefined && !n.hasClassName('group')) {
31 Element.toggle(n);
31 Element.toggle(n);
32 n = Element.next(n);
32 n = Element.next(n);
33 }
33 }
34 }
34 }
35
35
36 function toggleFieldset(el) {
37 var fieldset = Element.up(el, 'fieldset');
38 fieldset.toggleClassName('collapsed');
39 Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
40 }
41
36 var fileFieldCount = 1;
42 var fileFieldCount = 1;
37
43
38 function addFileField() {
44 function addFileField() {
39 if (fileFieldCount >= 10) return false
45 if (fileFieldCount >= 10) return false
40 fileFieldCount++;
46 fileFieldCount++;
41 var f = document.createElement("input");
47 var f = document.createElement("input");
42 f.type = "file";
48 f.type = "file";
43 f.name = "attachments[" + fileFieldCount + "][file]";
49 f.name = "attachments[" + fileFieldCount + "][file]";
44 f.size = 30;
50 f.size = 30;
45 var d = document.createElement("input");
51 var d = document.createElement("input");
46 d.type = "text";
52 d.type = "text";
47 d.name = "attachments[" + fileFieldCount + "][description]";
53 d.name = "attachments[" + fileFieldCount + "][description]";
48 d.size = 60;
54 d.size = 60;
49
55
50 p = document.getElementById("attachments_fields");
56 p = document.getElementById("attachments_fields");
51 p.appendChild(document.createElement("br"));
57 p.appendChild(document.createElement("br"));
52 p.appendChild(f);
58 p.appendChild(f);
53 p.appendChild(d);
59 p.appendChild(d);
54 }
60 }
55
61
56 function showTab(name) {
62 function showTab(name) {
57 var f = $$('div#content .tab-content');
63 var f = $$('div#content .tab-content');
58 for(var i=0; i<f.length; i++){
64 for(var i=0; i<f.length; i++){
59 Element.hide(f[i]);
65 Element.hide(f[i]);
60 }
66 }
61 var f = $$('div.tabs a');
67 var f = $$('div.tabs a');
62 for(var i=0; i<f.length; i++){
68 for(var i=0; i<f.length; i++){
63 Element.removeClassName(f[i], "selected");
69 Element.removeClassName(f[i], "selected");
64 }
70 }
65 Element.show('tab-content-' + name);
71 Element.show('tab-content-' + name);
66 Element.addClassName('tab-' + name, "selected");
72 Element.addClassName('tab-' + name, "selected");
67 return false;
73 return false;
68 }
74 }
69
75
70 function setPredecessorFieldsVisibility() {
76 function setPredecessorFieldsVisibility() {
71 relationType = $('relation_relation_type');
77 relationType = $('relation_relation_type');
72 if (relationType && relationType.value == "precedes") {
78 if (relationType && relationType.value == "precedes") {
73 Element.show('predecessor_fields');
79 Element.show('predecessor_fields');
74 } else {
80 } else {
75 Element.hide('predecessor_fields');
81 Element.hide('predecessor_fields');
76 }
82 }
77 }
83 }
78
84
79 function promptToRemote(text, param, url) {
85 function promptToRemote(text, param, url) {
80 value = prompt(text + ':');
86 value = prompt(text + ':');
81 if (value) {
87 if (value) {
82 new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
88 new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
83 return false;
89 return false;
84 }
90 }
85 }
91 }
86
92
87 function collapseScmEntry(id) {
93 function collapseScmEntry(id) {
88 var els = document.getElementsByClassName(id, 'browser');
94 var els = document.getElementsByClassName(id, 'browser');
89 for (var i = 0; i < els.length; i++) {
95 for (var i = 0; i < els.length; i++) {
90 if (els[i].hasClassName('open')) {
96 if (els[i].hasClassName('open')) {
91 collapseScmEntry(els[i].id);
97 collapseScmEntry(els[i].id);
92 }
98 }
93 Element.hide(els[i]);
99 Element.hide(els[i]);
94 }
100 }
95 $(id).removeClassName('open');
101 $(id).removeClassName('open');
96 }
102 }
97
103
98 function expandScmEntry(id) {
104 function expandScmEntry(id) {
99 var els = document.getElementsByClassName(id, 'browser');
105 var els = document.getElementsByClassName(id, 'browser');
100 for (var i = 0; i < els.length; i++) {
106 for (var i = 0; i < els.length; i++) {
101 Element.show(els[i]);
107 Element.show(els[i]);
102 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
108 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
103 expandScmEntry(els[i].id);
109 expandScmEntry(els[i].id);
104 }
110 }
105 }
111 }
106 $(id).addClassName('open');
112 $(id).addClassName('open');
107 }
113 }
108
114
109 function scmEntryClick(id) {
115 function scmEntryClick(id) {
110 el = $(id);
116 el = $(id);
111 if (el.hasClassName('open')) {
117 if (el.hasClassName('open')) {
112 collapseScmEntry(id);
118 collapseScmEntry(id);
113 el.addClassName('collapsed');
119 el.addClassName('collapsed');
114 return false;
120 return false;
115 } else if (el.hasClassName('loaded')) {
121 } else if (el.hasClassName('loaded')) {
116 expandScmEntry(id);
122 expandScmEntry(id);
117 el.removeClassName('collapsed');
123 el.removeClassName('collapsed');
118 return false;
124 return false;
119 }
125 }
120 if (el.hasClassName('loading')) {
126 if (el.hasClassName('loading')) {
121 return false;
127 return false;
122 }
128 }
123 el.addClassName('loading');
129 el.addClassName('loading');
124 return true;
130 return true;
125 }
131 }
126
132
127 function scmEntryLoaded(id) {
133 function scmEntryLoaded(id) {
128 Element.addClassName(id, 'open');
134 Element.addClassName(id, 'open');
129 Element.addClassName(id, 'loaded');
135 Element.addClassName(id, 'loaded');
130 Element.removeClassName(id, 'loading');
136 Element.removeClassName(id, 'loading');
131 }
137 }
132
138
133 function randomKey(size) {
139 function randomKey(size) {
134 var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
140 var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
135 var key = '';
141 var key = '';
136 for (i = 0; i < size; i++) {
142 for (i = 0; i < size; i++) {
137 key += chars[Math.floor(Math.random() * chars.length)];
143 key += chars[Math.floor(Math.random() * chars.length)];
138 }
144 }
139 return key;
145 return key;
140 }
146 }
141
147
142 /* shows and hides ajax indicator */
148 /* shows and hides ajax indicator */
143 Ajax.Responders.register({
149 Ajax.Responders.register({
144 onCreate: function(){
150 onCreate: function(){
145 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
151 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
146 Element.show('ajax-indicator');
152 Element.show('ajax-indicator');
147 }
153 }
148 },
154 },
149 onComplete: function(){
155 onComplete: function(){
150 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
156 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
151 Element.hide('ajax-indicator');
157 Element.hide('ajax-indicator');
152 }
158 }
153 }
159 }
154 });
160 });
@@ -1,798 +1,797
1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
2
2
3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
4 h1 {margin:0; padding:0; font-size: 24px;}
4 h1 {margin:0; padding:0; font-size: 24px;}
5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
7 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
7 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
8
8
9 /***** Layout *****/
9 /***** Layout *****/
10 #wrapper {background: white;}
10 #wrapper {background: white;}
11
11
12 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
12 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
13 #top-menu ul {margin: 0; padding: 0;}
13 #top-menu ul {margin: 0; padding: 0;}
14 #top-menu li {
14 #top-menu li {
15 float:left;
15 float:left;
16 list-style-type:none;
16 list-style-type:none;
17 margin: 0px 0px 0px 0px;
17 margin: 0px 0px 0px 0px;
18 padding: 0px 0px 0px 0px;
18 padding: 0px 0px 0px 0px;
19 white-space:nowrap;
19 white-space:nowrap;
20 }
20 }
21 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
21 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
22 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
22 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
23
23
24 #account {float:right;}
24 #account {float:right;}
25
25
26 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
26 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
27 #header a {color:#f8f8f8;}
27 #header a {color:#f8f8f8;}
28 #header h1 a.ancestor { font-size: 80%; }
28 #header h1 a.ancestor { font-size: 80%; }
29 #quick-search {float:right;}
29 #quick-search {float:right;}
30
30
31 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
31 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
32 #main-menu ul {margin: 0; padding: 0;}
32 #main-menu ul {margin: 0; padding: 0;}
33 #main-menu li {
33 #main-menu li {
34 float:left;
34 float:left;
35 list-style-type:none;
35 list-style-type:none;
36 margin: 0px 2px 0px 0px;
36 margin: 0px 2px 0px 0px;
37 padding: 0px 0px 0px 0px;
37 padding: 0px 0px 0px 0px;
38 white-space:nowrap;
38 white-space:nowrap;
39 }
39 }
40 #main-menu li a {
40 #main-menu li a {
41 display: block;
41 display: block;
42 color: #fff;
42 color: #fff;
43 text-decoration: none;
43 text-decoration: none;
44 font-weight: bold;
44 font-weight: bold;
45 margin: 0;
45 margin: 0;
46 padding: 4px 10px 4px 10px;
46 padding: 4px 10px 4px 10px;
47 }
47 }
48 #main-menu li a:hover {background:#759FCF; color:#fff;}
48 #main-menu li a:hover {background:#759FCF; color:#fff;}
49 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
49 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
50
50
51 #main {background-color:#EEEEEE;}
51 #main {background-color:#EEEEEE;}
52
52
53 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
53 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
54 * html #sidebar{ width: 17%; }
54 * html #sidebar{ width: 17%; }
55 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
55 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
56 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
56 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
57 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
57 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
58
58
59 #content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
59 #content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
60 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
60 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
61 html>body #content { min-height: 600px; }
61 html>body #content { min-height: 600px; }
62 * html body #content { height: 600px; } /* IE */
62 * html body #content { height: 600px; } /* IE */
63
63
64 #main.nosidebar #sidebar{ display: none; }
64 #main.nosidebar #sidebar{ display: none; }
65 #main.nosidebar #content{ width: auto; border-right: 0; }
65 #main.nosidebar #content{ width: auto; border-right: 0; }
66
66
67 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
67 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
68
68
69 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
69 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
70 #login-form table td {padding: 6px;}
70 #login-form table td {padding: 6px;}
71 #login-form label {font-weight: bold;}
71 #login-form label {font-weight: bold;}
72 #login-form input#username, #login-form input#password { width: 300px; }
72 #login-form input#username, #login-form input#password { width: 300px; }
73
73
74 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
74 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
75
75
76 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
76 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
77
77
78 /***** Links *****/
78 /***** Links *****/
79 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
79 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
80 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
80 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
81 a img{ border: 0; }
81 a img{ border: 0; }
82
82
83 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
83 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
84
84
85 /***** Tables *****/
85 /***** Tables *****/
86 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
86 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
87 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
87 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
88 table.list td { vertical-align: top; }
88 table.list td { vertical-align: top; }
89 table.list td.id { width: 2%; text-align: center;}
89 table.list td.id { width: 2%; text-align: center;}
90 table.list td.checkbox { width: 15px; padding: 0px;}
90 table.list td.checkbox { width: 15px; padding: 0px;}
91 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
91 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
92 table.list td.buttons a { padding-right: 0.6em; }
92 table.list td.buttons a { padding-right: 0.6em; }
93
93
94 tr.project td.name a { padding-left: 16px; white-space:nowrap; }
94 tr.project td.name a { padding-left: 16px; white-space:nowrap; }
95 tr.project.parent td.name a { background: url('../images/bullet_toggle_minus.png') no-repeat; }
95 tr.project.parent td.name a { background: url('../images/bullet_toggle_minus.png') no-repeat; }
96
96
97 tr.issue { text-align: center; white-space: nowrap; }
97 tr.issue { text-align: center; white-space: nowrap; }
98 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
98 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
99 tr.issue td.subject { text-align: left; }
99 tr.issue td.subject { text-align: left; }
100 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
100 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
101
101
102 tr.entry { border: 1px solid #f8f8f8; }
102 tr.entry { border: 1px solid #f8f8f8; }
103 tr.entry td { white-space: nowrap; }
103 tr.entry td { white-space: nowrap; }
104 tr.entry td.filename { width: 30%; }
104 tr.entry td.filename { width: 30%; }
105 tr.entry td.size { text-align: right; font-size: 90%; }
105 tr.entry td.size { text-align: right; font-size: 90%; }
106 tr.entry td.revision, tr.entry td.author { text-align: center; }
106 tr.entry td.revision, tr.entry td.author { text-align: center; }
107 tr.entry td.age { text-align: right; }
107 tr.entry td.age { text-align: right; }
108 tr.entry.file td.filename a { margin-left: 16px; }
108 tr.entry.file td.filename a { margin-left: 16px; }
109
109
110 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
110 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
111 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
111 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
112
112
113 tr.changeset td.author { text-align: center; width: 15%; }
113 tr.changeset td.author { text-align: center; width: 15%; }
114 tr.changeset td.committed_on { text-align: center; width: 15%; }
114 tr.changeset td.committed_on { text-align: center; width: 15%; }
115
115
116 table.files tr.file td { text-align: center; }
116 table.files tr.file td { text-align: center; }
117 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
117 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
118 table.files tr.file td.digest { font-size: 80%; }
118 table.files tr.file td.digest { font-size: 80%; }
119
119
120 table.members td.roles, table.memberships td.roles { width: 45%; }
120 table.members td.roles, table.memberships td.roles { width: 45%; }
121
121
122 tr.message { height: 2.6em; }
122 tr.message { height: 2.6em; }
123 tr.message td.last_message { font-size: 80%; }
123 tr.message td.last_message { font-size: 80%; }
124 tr.message.locked td.subject a { background-image: url(../images/locked.png); }
124 tr.message.locked td.subject a { background-image: url(../images/locked.png); }
125 tr.message.sticky td.subject a { background-image: url(../images/sticky.png); font-weight: bold; }
125 tr.message.sticky td.subject a { background-image: url(../images/sticky.png); font-weight: bold; }
126
126
127 tr.user td { width:13%; }
127 tr.user td { width:13%; }
128 tr.user td.email { width:18%; }
128 tr.user td.email { width:18%; }
129 tr.user td { white-space: nowrap; }
129 tr.user td { white-space: nowrap; }
130 tr.user.locked, tr.user.registered { color: #aaa; }
130 tr.user.locked, tr.user.registered { color: #aaa; }
131 tr.user.locked a, tr.user.registered a { color: #aaa; }
131 tr.user.locked a, tr.user.registered a { color: #aaa; }
132
132
133 tr.time-entry { text-align: center; white-space: nowrap; }
133 tr.time-entry { text-align: center; white-space: nowrap; }
134 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
134 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
135 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
135 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
136 td.hours .hours-dec { font-size: 0.9em; }
136 td.hours .hours-dec { font-size: 0.9em; }
137
137
138 table.plugins td { vertical-align: middle; }
138 table.plugins td { vertical-align: middle; }
139 table.plugins td.configure { text-align: right; padding-right: 1em; }
139 table.plugins td.configure { text-align: right; padding-right: 1em; }
140 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
140 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
141 table.plugins span.description { display: block; font-size: 0.9em; }
141 table.plugins span.description { display: block; font-size: 0.9em; }
142 table.plugins span.url { display: block; font-size: 0.9em; }
142 table.plugins span.url { display: block; font-size: 0.9em; }
143
143
144 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
144 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
145 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
145 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
146
146
147 table.list tbody tr:hover { background-color:#ffffdd; }
147 table.list tbody tr:hover { background-color:#ffffdd; }
148 table.list tbody tr.group:hover { background-color:inherit; }
148 table.list tbody tr.group:hover { background-color:inherit; }
149 table td {padding:2px;}
149 table td {padding:2px;}
150 table p {margin:0;}
150 table p {margin:0;}
151 .odd {background-color:#f6f7f8;}
151 .odd {background-color:#f6f7f8;}
152 .even {background-color: #fff;}
152 .even {background-color: #fff;}
153
153
154 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
154 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
155 a.sort.asc { background-image: url(../images/sort_asc.png); }
155 a.sort.asc { background-image: url(../images/sort_asc.png); }
156 a.sort.desc { background-image: url(../images/sort_desc.png); }
156 a.sort.desc { background-image: url(../images/sort_desc.png); }
157
157
158 table.attributes { width: 100% }
158 table.attributes { width: 100% }
159 table.attributes th { vertical-align: top; text-align: left; }
159 table.attributes th { vertical-align: top; text-align: left; }
160 table.attributes td { vertical-align: top; }
160 table.attributes td { vertical-align: top; }
161
161
162 .highlight { background-color: #FCFD8D;}
162 .highlight { background-color: #FCFD8D;}
163 .highlight.token-1 { background-color: #faa;}
163 .highlight.token-1 { background-color: #faa;}
164 .highlight.token-2 { background-color: #afa;}
164 .highlight.token-2 { background-color: #afa;}
165 .highlight.token-3 { background-color: #aaf;}
165 .highlight.token-3 { background-color: #aaf;}
166
166
167 .box{
167 .box{
168 padding:6px;
168 padding:6px;
169 margin-bottom: 10px;
169 margin-bottom: 10px;
170 background-color:#f6f6f6;
170 background-color:#f6f6f6;
171 color:#505050;
171 color:#505050;
172 line-height:1.5em;
172 line-height:1.5em;
173 border: 1px solid #e4e4e4;
173 border: 1px solid #e4e4e4;
174 }
174 }
175
175
176 div.square {
176 div.square {
177 border: 1px solid #999;
177 border: 1px solid #999;
178 float: left;
178 float: left;
179 margin: .3em .4em 0 .4em;
179 margin: .3em .4em 0 .4em;
180 overflow: hidden;
180 overflow: hidden;
181 width: .6em; height: .6em;
181 width: .6em; height: .6em;
182 }
182 }
183 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
183 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
184 .contextual input, .contextual select {font-size:0.9em;}
184 .contextual input, .contextual select {font-size:0.9em;}
185 .message .contextual { margin-top: 0; }
185 .message .contextual { margin-top: 0; }
186
186
187 .splitcontentleft{float:left; width:49%;}
187 .splitcontentleft{float:left; width:49%;}
188 .splitcontentright{float:right; width:49%;}
188 .splitcontentright{float:right; width:49%;}
189 form {display: inline;}
189 form {display: inline;}
190 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
190 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
191 fieldset {border: 1px solid #e4e4e4; margin:0;}
191 fieldset {border: 1px solid #e4e4e4; margin:0;}
192 legend {color: #484848;}
192 legend {color: #484848;}
193 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
193 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
194 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
194 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
195 blockquote blockquote { margin-left: 0;}
195 blockquote blockquote { margin-left: 0;}
196 textarea.wiki-edit { width: 99%; }
196 textarea.wiki-edit { width: 99%; }
197 li p {margin-top: 0;}
197 li p {margin-top: 0;}
198 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
198 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
199 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
199 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
200 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
200 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
201 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
201 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
202
202
203 #query_form_content { font-size: 0.9em; padding: 4px; background: #f6f6f6; border: 1px solid #e4e4e4; }
203 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
204 #query_form_content fieldset#filters { border-left: 0; border-right: 0; }
204 fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
205 #query_form_content p { margin-top: 0.5em; margin-bottom: 0.5em; }
205 fieldset.collapsible.collapsed legend { background-image: url(../images/arrow_collapsed.png); }
206
206
207 fieldset#filters, fieldset#date-range { padding: 0.7em; margin-bottom: 8px; }
207 fieldset#date-range p { margin: 2px 0 2px 0; }
208 fieldset#filters p { margin: 1.2em 0 0.8em 2px; }
209 fieldset#filters table { border-collapse: collapse; }
208 fieldset#filters table { border-collapse: collapse; }
210 fieldset#filters table td { padding: 0; vertical-align: middle; }
209 fieldset#filters table td { padding: 0; vertical-align: middle; }
211 fieldset#filters tr.filter { height: 2em; }
210 fieldset#filters tr.filter { height: 2em; }
212 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
211 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
213 .buttons { font-size: 0.9em; margin-bottom: 1.4em; }
212 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
214
213
215 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
214 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
216 div#issue-changesets .changeset { padding: 4px;}
215 div#issue-changesets .changeset { padding: 4px;}
217 div#issue-changesets .changeset { border-bottom: 1px solid #ddd; }
216 div#issue-changesets .changeset { border-bottom: 1px solid #ddd; }
218 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
217 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
219
218
220 div#activity dl, #search-results { margin-left: 2em; }
219 div#activity dl, #search-results { margin-left: 2em; }
221 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
220 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
222 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
221 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
223 div#activity dt.me .time { border-bottom: 1px solid #999; }
222 div#activity dt.me .time { border-bottom: 1px solid #999; }
224 div#activity dt .time { color: #777; font-size: 80%; }
223 div#activity dt .time { color: #777; font-size: 80%; }
225 div#activity dd .description, #search-results dd .description { font-style: italic; }
224 div#activity dd .description, #search-results dd .description { font-style: italic; }
226 div#activity span.project:after, #search-results span.project:after { content: " -"; }
225 div#activity span.project:after, #search-results span.project:after { content: " -"; }
227 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
226 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
228
227
229 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
228 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
230
229
231 div#search-results-counts {float:right;}
230 div#search-results-counts {float:right;}
232 div#search-results-counts ul { margin-top: 0.5em; }
231 div#search-results-counts ul { margin-top: 0.5em; }
233 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
232 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
234
233
235 dt.issue { background-image: url(../images/ticket.png); }
234 dt.issue { background-image: url(../images/ticket.png); }
236 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
235 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
237 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
236 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
238 dt.issue-note { background-image: url(../images/ticket_note.png); }
237 dt.issue-note { background-image: url(../images/ticket_note.png); }
239 dt.changeset { background-image: url(../images/changeset.png); }
238 dt.changeset { background-image: url(../images/changeset.png); }
240 dt.news { background-image: url(../images/news.png); }
239 dt.news { background-image: url(../images/news.png); }
241 dt.message { background-image: url(../images/message.png); }
240 dt.message { background-image: url(../images/message.png); }
242 dt.reply { background-image: url(../images/comments.png); }
241 dt.reply { background-image: url(../images/comments.png); }
243 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
242 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
244 dt.attachment { background-image: url(../images/attachment.png); }
243 dt.attachment { background-image: url(../images/attachment.png); }
245 dt.document { background-image: url(../images/document.png); }
244 dt.document { background-image: url(../images/document.png); }
246 dt.project { background-image: url(../images/projects.png); }
245 dt.project { background-image: url(../images/projects.png); }
247 dt.time-entry { background-image: url(../images/time.png); }
246 dt.time-entry { background-image: url(../images/time.png); }
248
247
249 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
248 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
250
249
251 div#roadmap fieldset.related-issues { margin-bottom: 1em; }
250 div#roadmap fieldset.related-issues { margin-bottom: 1em; }
252 div#roadmap fieldset.related-issues ul { margin-top: 0.3em; margin-bottom: 0.3em; }
251 div#roadmap fieldset.related-issues ul { margin-top: 0.3em; margin-bottom: 0.3em; }
253 div#roadmap .wiki h1:first-child { display: none; }
252 div#roadmap .wiki h1:first-child { display: none; }
254 div#roadmap .wiki h1 { font-size: 120%; }
253 div#roadmap .wiki h1 { font-size: 120%; }
255 div#roadmap .wiki h2 { font-size: 110%; }
254 div#roadmap .wiki h2 { font-size: 110%; }
256
255
257 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
256 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
258 div#version-summary fieldset { margin-bottom: 1em; }
257 div#version-summary fieldset { margin-bottom: 1em; }
259 div#version-summary .total-hours { text-align: right; }
258 div#version-summary .total-hours { text-align: right; }
260
259
261 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
260 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
262 table#time-report tbody tr { font-style: italic; color: #777; }
261 table#time-report tbody tr { font-style: italic; color: #777; }
263 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
262 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
264 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
263 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
265 table#time-report .hours-dec { font-size: 0.9em; }
264 table#time-report .hours-dec { font-size: 0.9em; }
266
265
267 form#issue-form .attributes { margin-bottom: 8px; }
266 form#issue-form .attributes { margin-bottom: 8px; }
268 form#issue-form .attributes p { padding-top: 1px; padding-bottom: 2px; }
267 form#issue-form .attributes p { padding-top: 1px; padding-bottom: 2px; }
269 form#issue-form .attributes select { min-width: 30%; }
268 form#issue-form .attributes select { min-width: 30%; }
270
269
271 ul.projects { margin: 0; padding-left: 1em; }
270 ul.projects { margin: 0; padding-left: 1em; }
272 ul.projects.root { margin: 0; padding: 0; }
271 ul.projects.root { margin: 0; padding: 0; }
273 ul.projects ul { border-left: 3px solid #e0e0e0; }
272 ul.projects ul { border-left: 3px solid #e0e0e0; }
274 ul.projects li { list-style-type:none; }
273 ul.projects li { list-style-type:none; }
275 ul.projects li.root { margin-bottom: 1em; }
274 ul.projects li.root { margin-bottom: 1em; }
276 ul.projects li.child { margin-top: 1em;}
275 ul.projects li.child { margin-top: 1em;}
277 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
276 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
278 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
277 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
279
278
280 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
279 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
281 #tracker_project_ids li { list-style-type:none; }
280 #tracker_project_ids li { list-style-type:none; }
282
281
283 ul.properties {padding:0; font-size: 0.9em; color: #777;}
282 ul.properties {padding:0; font-size: 0.9em; color: #777;}
284 ul.properties li {list-style-type:none;}
283 ul.properties li {list-style-type:none;}
285 ul.properties li span {font-style:italic;}
284 ul.properties li span {font-style:italic;}
286
285
287 .total-hours { font-size: 110%; font-weight: bold; }
286 .total-hours { font-size: 110%; font-weight: bold; }
288 .total-hours span.hours-int { font-size: 120%; }
287 .total-hours span.hours-int { font-size: 120%; }
289
288
290 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
289 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
291 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
290 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
292
291
293 .pagination {font-size: 90%}
292 .pagination {font-size: 90%}
294 p.pagination {margin-top:8px;}
293 p.pagination {margin-top:8px;}
295
294
296 /***** Tabular forms ******/
295 /***** Tabular forms ******/
297 .tabular p{
296 .tabular p{
298 margin: 0;
297 margin: 0;
299 padding: 5px 0 8px 0;
298 padding: 5px 0 8px 0;
300 padding-left: 180px; /*width of left column containing the label elements*/
299 padding-left: 180px; /*width of left column containing the label elements*/
301 height: 1%;
300 height: 1%;
302 clear:left;
301 clear:left;
303 }
302 }
304
303
305 html>body .tabular p {overflow:hidden;}
304 html>body .tabular p {overflow:hidden;}
306
305
307 .tabular label{
306 .tabular label{
308 font-weight: bold;
307 font-weight: bold;
309 float: left;
308 float: left;
310 text-align: right;
309 text-align: right;
311 margin-left: -180px; /*width of left column*/
310 margin-left: -180px; /*width of left column*/
312 width: 175px; /*width of labels. Should be smaller than left column to create some right
311 width: 175px; /*width of labels. Should be smaller than left column to create some right
313 margin*/
312 margin*/
314 }
313 }
315
314
316 .tabular label.floating{
315 .tabular label.floating{
317 font-weight: normal;
316 font-weight: normal;
318 margin-left: 0px;
317 margin-left: 0px;
319 text-align: left;
318 text-align: left;
320 width: 270px;
319 width: 270px;
321 }
320 }
322
321
323 input#time_entry_comments { width: 90%;}
322 input#time_entry_comments { width: 90%;}
324
323
325 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
324 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
326
325
327 .tabular.settings p{ padding-left: 300px; }
326 .tabular.settings p{ padding-left: 300px; }
328 .tabular.settings label{ margin-left: -300px; width: 295px; }
327 .tabular.settings label{ margin-left: -300px; width: 295px; }
329
328
330 .required {color: #bb0000;}
329 .required {color: #bb0000;}
331 .summary {font-style: italic;}
330 .summary {font-style: italic;}
332
331
333 #attachments_fields input[type=text] {margin-left: 8px; }
332 #attachments_fields input[type=text] {margin-left: 8px; }
334
333
335 div.attachments { margin-top: 12px; }
334 div.attachments { margin-top: 12px; }
336 div.attachments p { margin:4px 0 2px 0; }
335 div.attachments p { margin:4px 0 2px 0; }
337 div.attachments img { vertical-align: middle; }
336 div.attachments img { vertical-align: middle; }
338 div.attachments span.author { font-size: 0.9em; color: #888; }
337 div.attachments span.author { font-size: 0.9em; color: #888; }
339
338
340 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
339 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
341 .other-formats span + span:before { content: "| "; }
340 .other-formats span + span:before { content: "| "; }
342
341
343 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
342 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
344
343
345 /* Project members tab */
344 /* Project members tab */
346 div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% }
345 div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% }
347 div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% }
346 div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% }
348 div#tab-content-members fieldset, div#tab-content-memberships fieldset, div#tab-content-users fieldset { padding:1em; margin-bottom: 1em; }
347 div#tab-content-members fieldset, div#tab-content-memberships fieldset, div#tab-content-users fieldset { padding:1em; margin-bottom: 1em; }
349 div#tab-content-members fieldset legend, div#tab-content-memberships fieldset legend, div#tab-content-users fieldset legend { font-weight: bold; }
348 div#tab-content-members fieldset legend, div#tab-content-memberships fieldset legend, div#tab-content-users fieldset legend { font-weight: bold; }
350 div#tab-content-members fieldset label, div#tab-content-memberships fieldset label, div#tab-content-users fieldset label { display: block; }
349 div#tab-content-members fieldset label, div#tab-content-memberships fieldset label, div#tab-content-users fieldset label { display: block; }
351 div#tab-content-members fieldset div, div#tab-content-users fieldset div { max-height: 400px; overflow:auto; }
350 div#tab-content-members fieldset div, div#tab-content-users fieldset div { max-height: 400px; overflow:auto; }
352
351
353 table.members td.group { padding-left: 20px; background: url(../images/users.png) no-repeat 0% 0%; }
352 table.members td.group { padding-left: 20px; background: url(../images/users.png) no-repeat 0% 0%; }
354
353
355 * html div#tab-content-members fieldset div { height: 450px; }
354 * html div#tab-content-members fieldset div { height: 450px; }
356
355
357 /***** Flash & error messages ****/
356 /***** Flash & error messages ****/
358 #errorExplanation, div.flash, .nodata, .warning {
357 #errorExplanation, div.flash, .nodata, .warning {
359 padding: 4px 4px 4px 30px;
358 padding: 4px 4px 4px 30px;
360 margin-bottom: 12px;
359 margin-bottom: 12px;
361 font-size: 1.1em;
360 font-size: 1.1em;
362 border: 2px solid;
361 border: 2px solid;
363 }
362 }
364
363
365 div.flash {margin-top: 8px;}
364 div.flash {margin-top: 8px;}
366
365
367 div.flash.error, #errorExplanation {
366 div.flash.error, #errorExplanation {
368 background: url(../images/false.png) 8px 5px no-repeat;
367 background: url(../images/false.png) 8px 5px no-repeat;
369 background-color: #ffe3e3;
368 background-color: #ffe3e3;
370 border-color: #dd0000;
369 border-color: #dd0000;
371 color: #550000;
370 color: #550000;
372 }
371 }
373
372
374 div.flash.notice {
373 div.flash.notice {
375 background: url(../images/true.png) 8px 5px no-repeat;
374 background: url(../images/true.png) 8px 5px no-repeat;
376 background-color: #dfffdf;
375 background-color: #dfffdf;
377 border-color: #9fcf9f;
376 border-color: #9fcf9f;
378 color: #005f00;
377 color: #005f00;
379 }
378 }
380
379
381 div.flash.warning {
380 div.flash.warning {
382 background: url(../images/warning.png) 8px 5px no-repeat;
381 background: url(../images/warning.png) 8px 5px no-repeat;
383 background-color: #FFEBC1;
382 background-color: #FFEBC1;
384 border-color: #FDBF3B;
383 border-color: #FDBF3B;
385 color: #A6750C;
384 color: #A6750C;
386 text-align: left;
385 text-align: left;
387 }
386 }
388
387
389 .nodata, .warning {
388 .nodata, .warning {
390 text-align: center;
389 text-align: center;
391 background-color: #FFEBC1;
390 background-color: #FFEBC1;
392 border-color: #FDBF3B;
391 border-color: #FDBF3B;
393 color: #A6750C;
392 color: #A6750C;
394 }
393 }
395
394
396 #errorExplanation ul { font-size: 0.9em;}
395 #errorExplanation ul { font-size: 0.9em;}
397 #errorExplanation h2, #errorExplanation p { display: none; }
396 #errorExplanation h2, #errorExplanation p { display: none; }
398
397
399 /***** Ajax indicator ******/
398 /***** Ajax indicator ******/
400 #ajax-indicator {
399 #ajax-indicator {
401 position: absolute; /* fixed not supported by IE */
400 position: absolute; /* fixed not supported by IE */
402 background-color:#eee;
401 background-color:#eee;
403 border: 1px solid #bbb;
402 border: 1px solid #bbb;
404 top:35%;
403 top:35%;
405 left:40%;
404 left:40%;
406 width:20%;
405 width:20%;
407 font-weight:bold;
406 font-weight:bold;
408 text-align:center;
407 text-align:center;
409 padding:0.6em;
408 padding:0.6em;
410 z-index:100;
409 z-index:100;
411 filter:alpha(opacity=50);
410 filter:alpha(opacity=50);
412 opacity: 0.5;
411 opacity: 0.5;
413 }
412 }
414
413
415 html>body #ajax-indicator { position: fixed; }
414 html>body #ajax-indicator { position: fixed; }
416
415
417 #ajax-indicator span {
416 #ajax-indicator span {
418 background-position: 0% 40%;
417 background-position: 0% 40%;
419 background-repeat: no-repeat;
418 background-repeat: no-repeat;
420 background-image: url(../images/loading.gif);
419 background-image: url(../images/loading.gif);
421 padding-left: 26px;
420 padding-left: 26px;
422 vertical-align: bottom;
421 vertical-align: bottom;
423 }
422 }
424
423
425 /***** Calendar *****/
424 /***** Calendar *****/
426 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
425 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
427 table.cal thead th {width: 14%;}
426 table.cal thead th {width: 14%;}
428 table.cal tbody tr {height: 100px;}
427 table.cal tbody tr {height: 100px;}
429 table.cal th { background-color:#EEEEEE; padding: 4px; }
428 table.cal th { background-color:#EEEEEE; padding: 4px; }
430 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
429 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
431 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
430 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
432 table.cal td.odd p.day-num {color: #bbb;}
431 table.cal td.odd p.day-num {color: #bbb;}
433 table.cal td.today {background:#ffffdd;}
432 table.cal td.today {background:#ffffdd;}
434 table.cal td.today p.day-num {font-weight: bold;}
433 table.cal td.today p.day-num {font-weight: bold;}
435
434
436 /***** Tooltips ******/
435 /***** Tooltips ******/
437 .tooltip{position:relative;z-index:24;}
436 .tooltip{position:relative;z-index:24;}
438 .tooltip:hover{z-index:25;color:#000;}
437 .tooltip:hover{z-index:25;color:#000;}
439 .tooltip span.tip{display: none; text-align:left;}
438 .tooltip span.tip{display: none; text-align:left;}
440
439
441 div.tooltip:hover span.tip{
440 div.tooltip:hover span.tip{
442 display:block;
441 display:block;
443 position:absolute;
442 position:absolute;
444 top:12px; left:24px; width:270px;
443 top:12px; left:24px; width:270px;
445 border:1px solid #555;
444 border:1px solid #555;
446 background-color:#fff;
445 background-color:#fff;
447 padding: 4px;
446 padding: 4px;
448 font-size: 0.8em;
447 font-size: 0.8em;
449 color:#505050;
448 color:#505050;
450 }
449 }
451
450
452 /***** Progress bar *****/
451 /***** Progress bar *****/
453 table.progress {
452 table.progress {
454 border: 1px solid #D7D7D7;
453 border: 1px solid #D7D7D7;
455 border-collapse: collapse;
454 border-collapse: collapse;
456 border-spacing: 0pt;
455 border-spacing: 0pt;
457 empty-cells: show;
456 empty-cells: show;
458 text-align: center;
457 text-align: center;
459 float:left;
458 float:left;
460 margin: 1px 6px 1px 0px;
459 margin: 1px 6px 1px 0px;
461 }
460 }
462
461
463 table.progress td { height: 0.9em; }
462 table.progress td { height: 0.9em; }
464 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
463 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
465 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
464 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
466 table.progress td.open { background: #FFF none repeat scroll 0%; }
465 table.progress td.open { background: #FFF none repeat scroll 0%; }
467 p.pourcent {font-size: 80%;}
466 p.pourcent {font-size: 80%;}
468 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
467 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
469
468
470 /***** Tabs *****/
469 /***** Tabs *****/
471 #content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative;}
470 #content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative;}
472 #content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em;}
471 #content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em;}
473 #content .tabs>ul { bottom:-1px; } /* others */
472 #content .tabs>ul { bottom:-1px; } /* others */
474 #content .tabs ul li {
473 #content .tabs ul li {
475 float:left;
474 float:left;
476 list-style-type:none;
475 list-style-type:none;
477 white-space:nowrap;
476 white-space:nowrap;
478 margin-right:8px;
477 margin-right:8px;
479 background:#fff;
478 background:#fff;
480 }
479 }
481 #content .tabs ul li a{
480 #content .tabs ul li a{
482 display:block;
481 display:block;
483 font-size: 0.9em;
482 font-size: 0.9em;
484 text-decoration:none;
483 text-decoration:none;
485 line-height:1.3em;
484 line-height:1.3em;
486 padding:4px 6px 4px 6px;
485 padding:4px 6px 4px 6px;
487 border: 1px solid #ccc;
486 border: 1px solid #ccc;
488 border-bottom: 1px solid #bbbbbb;
487 border-bottom: 1px solid #bbbbbb;
489 background-color: #eeeeee;
488 background-color: #eeeeee;
490 color:#777;
489 color:#777;
491 font-weight:bold;
490 font-weight:bold;
492 }
491 }
493
492
494 #content .tabs ul li a:hover {
493 #content .tabs ul li a:hover {
495 background-color: #ffffdd;
494 background-color: #ffffdd;
496 text-decoration:none;
495 text-decoration:none;
497 }
496 }
498
497
499 #content .tabs ul li a.selected {
498 #content .tabs ul li a.selected {
500 background-color: #fff;
499 background-color: #fff;
501 border: 1px solid #bbbbbb;
500 border: 1px solid #bbbbbb;
502 border-bottom: 1px solid #fff;
501 border-bottom: 1px solid #fff;
503 }
502 }
504
503
505 #content .tabs ul li a.selected:hover {
504 #content .tabs ul li a.selected:hover {
506 background-color: #fff;
505 background-color: #fff;
507 }
506 }
508
507
509 /***** Auto-complete *****/
508 /***** Auto-complete *****/
510 div.autocomplete {
509 div.autocomplete {
511 position:absolute;
510 position:absolute;
512 width:250px;
511 width:250px;
513 background-color:white;
512 background-color:white;
514 margin:0;
513 margin:0;
515 padding:0;
514 padding:0;
516 }
515 }
517 div.autocomplete ul {
516 div.autocomplete ul {
518 list-style-type:none;
517 list-style-type:none;
519 margin:0;
518 margin:0;
520 padding:0;
519 padding:0;
521 }
520 }
522 div.autocomplete ul li.selected { background-color: #ffb;}
521 div.autocomplete ul li.selected { background-color: #ffb;}
523 div.autocomplete ul li {
522 div.autocomplete ul li {
524 list-style-type:none;
523 list-style-type:none;
525 display:block;
524 display:block;
526 margin:0;
525 margin:0;
527 padding:2px;
526 padding:2px;
528 cursor:pointer;
527 cursor:pointer;
529 font-size: 90%;
528 font-size: 90%;
530 border-bottom: 1px solid #ccc;
529 border-bottom: 1px solid #ccc;
531 border-left: 1px solid #ccc;
530 border-left: 1px solid #ccc;
532 border-right: 1px solid #ccc;
531 border-right: 1px solid #ccc;
533 }
532 }
534 div.autocomplete ul li span.informal {
533 div.autocomplete ul li span.informal {
535 font-size: 80%;
534 font-size: 80%;
536 color: #aaa;
535 color: #aaa;
537 }
536 }
538
537
539 /***** Diff *****/
538 /***** Diff *****/
540 .diff_out { background: #fcc; }
539 .diff_out { background: #fcc; }
541 .diff_in { background: #cfc; }
540 .diff_in { background: #cfc; }
542
541
543 /***** Wiki *****/
542 /***** Wiki *****/
544 div.wiki table {
543 div.wiki table {
545 border: 1px solid #505050;
544 border: 1px solid #505050;
546 border-collapse: collapse;
545 border-collapse: collapse;
547 margin-bottom: 1em;
546 margin-bottom: 1em;
548 }
547 }
549
548
550 div.wiki table, div.wiki td, div.wiki th {
549 div.wiki table, div.wiki td, div.wiki th {
551 border: 1px solid #bbb;
550 border: 1px solid #bbb;
552 padding: 4px;
551 padding: 4px;
553 }
552 }
554
553
555 div.wiki .external {
554 div.wiki .external {
556 background-position: 0% 60%;
555 background-position: 0% 60%;
557 background-repeat: no-repeat;
556 background-repeat: no-repeat;
558 padding-left: 12px;
557 padding-left: 12px;
559 background-image: url(../images/external.png);
558 background-image: url(../images/external.png);
560 }
559 }
561
560
562 div.wiki a.new {
561 div.wiki a.new {
563 color: #b73535;
562 color: #b73535;
564 }
563 }
565
564
566 div.wiki pre {
565 div.wiki pre {
567 margin: 1em 1em 1em 1.6em;
566 margin: 1em 1em 1em 1.6em;
568 padding: 2px;
567 padding: 2px;
569 background-color: #fafafa;
568 background-color: #fafafa;
570 border: 1px solid #dadada;
569 border: 1px solid #dadada;
571 width:95%;
570 width:95%;
572 overflow-x: auto;
571 overflow-x: auto;
573 }
572 }
574
573
575 div.wiki ul.toc {
574 div.wiki ul.toc {
576 background-color: #ffffdd;
575 background-color: #ffffdd;
577 border: 1px solid #e4e4e4;
576 border: 1px solid #e4e4e4;
578 padding: 4px;
577 padding: 4px;
579 line-height: 1.2em;
578 line-height: 1.2em;
580 margin-bottom: 12px;
579 margin-bottom: 12px;
581 margin-right: 12px;
580 margin-right: 12px;
582 margin-left: 0;
581 margin-left: 0;
583 display: table
582 display: table
584 }
583 }
585 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
584 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
586
585
587 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
586 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
588 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
587 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
589 div.wiki ul.toc li { list-style-type:none;}
588 div.wiki ul.toc li { list-style-type:none;}
590 div.wiki ul.toc li.heading2 { margin-left: 6px; }
589 div.wiki ul.toc li.heading2 { margin-left: 6px; }
591 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
590 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
592
591
593 div.wiki ul.toc a {
592 div.wiki ul.toc a {
594 font-size: 0.9em;
593 font-size: 0.9em;
595 font-weight: normal;
594 font-weight: normal;
596 text-decoration: none;
595 text-decoration: none;
597 color: #606060;
596 color: #606060;
598 }
597 }
599 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
598 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
600
599
601 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
600 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
602 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
601 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
603 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
602 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
604
603
605 /***** My page layout *****/
604 /***** My page layout *****/
606 .block-receiver {
605 .block-receiver {
607 border:1px dashed #c0c0c0;
606 border:1px dashed #c0c0c0;
608 margin-bottom: 20px;
607 margin-bottom: 20px;
609 padding: 15px 0 15px 0;
608 padding: 15px 0 15px 0;
610 }
609 }
611
610
612 .mypage-box {
611 .mypage-box {
613 margin:0 0 20px 0;
612 margin:0 0 20px 0;
614 color:#505050;
613 color:#505050;
615 line-height:1.5em;
614 line-height:1.5em;
616 }
615 }
617
616
618 .handle {
617 .handle {
619 cursor: move;
618 cursor: move;
620 }
619 }
621
620
622 a.close-icon {
621 a.close-icon {
623 display:block;
622 display:block;
624 margin-top:3px;
623 margin-top:3px;
625 overflow:hidden;
624 overflow:hidden;
626 width:12px;
625 width:12px;
627 height:12px;
626 height:12px;
628 background-repeat: no-repeat;
627 background-repeat: no-repeat;
629 cursor:pointer;
628 cursor:pointer;
630 background-image:url('../images/close.png');
629 background-image:url('../images/close.png');
631 }
630 }
632
631
633 a.close-icon:hover {
632 a.close-icon:hover {
634 background-image:url('../images/close_hl.png');
633 background-image:url('../images/close_hl.png');
635 }
634 }
636
635
637 /***** Gantt chart *****/
636 /***** Gantt chart *****/
638 .gantt_hdr {
637 .gantt_hdr {
639 position:absolute;
638 position:absolute;
640 top:0;
639 top:0;
641 height:16px;
640 height:16px;
642 border-top: 1px solid #c0c0c0;
641 border-top: 1px solid #c0c0c0;
643 border-bottom: 1px solid #c0c0c0;
642 border-bottom: 1px solid #c0c0c0;
644 border-right: 1px solid #c0c0c0;
643 border-right: 1px solid #c0c0c0;
645 text-align: center;
644 text-align: center;
646 overflow: hidden;
645 overflow: hidden;
647 }
646 }
648
647
649 .task {
648 .task {
650 position: absolute;
649 position: absolute;
651 height:8px;
650 height:8px;
652 font-size:0.8em;
651 font-size:0.8em;
653 color:#888;
652 color:#888;
654 padding:0;
653 padding:0;
655 margin:0;
654 margin:0;
656 line-height:0.8em;
655 line-height:0.8em;
657 }
656 }
658
657
659 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
658 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
660 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
659 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
661 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
660 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
662 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
661 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
663
662
664 /***** Icons *****/
663 /***** Icons *****/
665 .icon {
664 .icon {
666 background-position: 0% 40%;
665 background-position: 0% 40%;
667 background-repeat: no-repeat;
666 background-repeat: no-repeat;
668 padding-left: 20px;
667 padding-left: 20px;
669 padding-top: 2px;
668 padding-top: 2px;
670 padding-bottom: 3px;
669 padding-bottom: 3px;
671 }
670 }
672
671
673 .icon22 {
672 .icon22 {
674 background-position: 0% 40%;
673 background-position: 0% 40%;
675 background-repeat: no-repeat;
674 background-repeat: no-repeat;
676 padding-left: 26px;
675 padding-left: 26px;
677 line-height: 22px;
676 line-height: 22px;
678 vertical-align: middle;
677 vertical-align: middle;
679 }
678 }
680
679
681 .icon-add { background-image: url(../images/add.png); }
680 .icon-add { background-image: url(../images/add.png); }
682 .icon-edit { background-image: url(../images/edit.png); }
681 .icon-edit { background-image: url(../images/edit.png); }
683 .icon-copy { background-image: url(../images/copy.png); }
682 .icon-copy { background-image: url(../images/copy.png); }
684 .icon-del { background-image: url(../images/delete.png); }
683 .icon-del { background-image: url(../images/delete.png); }
685 .icon-move { background-image: url(../images/move.png); }
684 .icon-move { background-image: url(../images/move.png); }
686 .icon-save { background-image: url(../images/save.png); }
685 .icon-save { background-image: url(../images/save.png); }
687 .icon-cancel { background-image: url(../images/cancel.png); }
686 .icon-cancel { background-image: url(../images/cancel.png); }
688 .icon-folder { background-image: url(../images/folder.png); }
687 .icon-folder { background-image: url(../images/folder.png); }
689 .open .icon-folder { background-image: url(../images/folder_open.png); }
688 .open .icon-folder { background-image: url(../images/folder_open.png); }
690 .icon-package { background-image: url(../images/package.png); }
689 .icon-package { background-image: url(../images/package.png); }
691 .icon-home { background-image: url(../images/home.png); }
690 .icon-home { background-image: url(../images/home.png); }
692 .icon-user { background-image: url(../images/user.png); }
691 .icon-user { background-image: url(../images/user.png); }
693 .icon-mypage { background-image: url(../images/user_page.png); }
692 .icon-mypage { background-image: url(../images/user_page.png); }
694 .icon-admin { background-image: url(../images/admin.png); }
693 .icon-admin { background-image: url(../images/admin.png); }
695 .icon-projects { background-image: url(../images/projects.png); }
694 .icon-projects { background-image: url(../images/projects.png); }
696 .icon-help { background-image: url(../images/help.png); }
695 .icon-help { background-image: url(../images/help.png); }
697 .icon-attachment { background-image: url(../images/attachment.png); }
696 .icon-attachment { background-image: url(../images/attachment.png); }
698 .icon-index { background-image: url(../images/index.png); }
697 .icon-index { background-image: url(../images/index.png); }
699 .icon-history { background-image: url(../images/history.png); }
698 .icon-history { background-image: url(../images/history.png); }
700 .icon-time { background-image: url(../images/time.png); }
699 .icon-time { background-image: url(../images/time.png); }
701 .icon-time-add { background-image: url(../images/time_add.png); }
700 .icon-time-add { background-image: url(../images/time_add.png); }
702 .icon-stats { background-image: url(../images/stats.png); }
701 .icon-stats { background-image: url(../images/stats.png); }
703 .icon-warning { background-image: url(../images/warning.png); }
702 .icon-warning { background-image: url(../images/warning.png); }
704 .icon-fav { background-image: url(../images/fav.png); }
703 .icon-fav { background-image: url(../images/fav.png); }
705 .icon-fav-off { background-image: url(../images/fav_off.png); }
704 .icon-fav-off { background-image: url(../images/fav_off.png); }
706 .icon-reload { background-image: url(../images/reload.png); }
705 .icon-reload { background-image: url(../images/reload.png); }
707 .icon-lock { background-image: url(../images/locked.png); }
706 .icon-lock { background-image: url(../images/locked.png); }
708 .icon-unlock { background-image: url(../images/unlock.png); }
707 .icon-unlock { background-image: url(../images/unlock.png); }
709 .icon-checked { background-image: url(../images/true.png); }
708 .icon-checked { background-image: url(../images/true.png); }
710 .icon-details { background-image: url(../images/zoom_in.png); }
709 .icon-details { background-image: url(../images/zoom_in.png); }
711 .icon-report { background-image: url(../images/report.png); }
710 .icon-report { background-image: url(../images/report.png); }
712 .icon-comment { background-image: url(../images/comment.png); }
711 .icon-comment { background-image: url(../images/comment.png); }
713
712
714 .icon-file { background-image: url(../images/files/default.png); }
713 .icon-file { background-image: url(../images/files/default.png); }
715 .icon-file.text-plain { background-image: url(../images/files/text.png); }
714 .icon-file.text-plain { background-image: url(../images/files/text.png); }
716 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
715 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
717 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
716 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
718 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
717 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
719 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
718 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
720 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
719 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
721 .icon-file.image-gif { background-image: url(../images/files/image.png); }
720 .icon-file.image-gif { background-image: url(../images/files/image.png); }
722 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
721 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
723 .icon-file.image-png { background-image: url(../images/files/image.png); }
722 .icon-file.image-png { background-image: url(../images/files/image.png); }
724 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
723 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
725 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
724 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
726 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
725 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
727 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
726 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
728
727
729 .icon22-projects { background-image: url(../images/22x22/projects.png); }
728 .icon22-projects { background-image: url(../images/22x22/projects.png); }
730 .icon22-users { background-image: url(../images/22x22/users.png); }
729 .icon22-users { background-image: url(../images/22x22/users.png); }
731 .icon22-groups { background-image: url(../images/22x22/groups.png); }
730 .icon22-groups { background-image: url(../images/22x22/groups.png); }
732 .icon22-tracker { background-image: url(../images/22x22/tracker.png); }
731 .icon22-tracker { background-image: url(../images/22x22/tracker.png); }
733 .icon22-role { background-image: url(../images/22x22/role.png); }
732 .icon22-role { background-image: url(../images/22x22/role.png); }
734 .icon22-workflow { background-image: url(../images/22x22/workflow.png); }
733 .icon22-workflow { background-image: url(../images/22x22/workflow.png); }
735 .icon22-options { background-image: url(../images/22x22/options.png); }
734 .icon22-options { background-image: url(../images/22x22/options.png); }
736 .icon22-notifications { background-image: url(../images/22x22/notifications.png); }
735 .icon22-notifications { background-image: url(../images/22x22/notifications.png); }
737 .icon22-authent { background-image: url(../images/22x22/authent.png); }
736 .icon22-authent { background-image: url(../images/22x22/authent.png); }
738 .icon22-info { background-image: url(../images/22x22/info.png); }
737 .icon22-info { background-image: url(../images/22x22/info.png); }
739 .icon22-comment { background-image: url(../images/22x22/comment.png); }
738 .icon22-comment { background-image: url(../images/22x22/comment.png); }
740 .icon22-package { background-image: url(../images/22x22/package.png); }
739 .icon22-package { background-image: url(../images/22x22/package.png); }
741 .icon22-settings { background-image: url(../images/22x22/settings.png); }
740 .icon22-settings { background-image: url(../images/22x22/settings.png); }
742 .icon22-plugin { background-image: url(../images/22x22/plugin.png); }
741 .icon22-plugin { background-image: url(../images/22x22/plugin.png); }
743
742
744 img.gravatar {
743 img.gravatar {
745 padding: 2px;
744 padding: 2px;
746 border: solid 1px #d5d5d5;
745 border: solid 1px #d5d5d5;
747 background: #fff;
746 background: #fff;
748 }
747 }
749
748
750 div.issue img.gravatar {
749 div.issue img.gravatar {
751 float: right;
750 float: right;
752 margin: 0 0 0 1em;
751 margin: 0 0 0 1em;
753 padding: 5px;
752 padding: 5px;
754 }
753 }
755
754
756 div.issue table img.gravatar {
755 div.issue table img.gravatar {
757 height: 14px;
756 height: 14px;
758 width: 14px;
757 width: 14px;
759 padding: 2px;
758 padding: 2px;
760 float: left;
759 float: left;
761 margin: 0 0.5em 0 0;
760 margin: 0 0.5em 0 0;
762 }
761 }
763
762
764 #history img.gravatar {
763 #history img.gravatar {
765 padding: 3px;
764 padding: 3px;
766 margin: 0 1.5em 1em 0;
765 margin: 0 1.5em 1em 0;
767 float: left;
766 float: left;
768 }
767 }
769
768
770 td.username img.gravatar {
769 td.username img.gravatar {
771 float: left;
770 float: left;
772 margin: 0 1em 0 0;
771 margin: 0 1em 0 0;
773 }
772 }
774
773
775 #activity dt img.gravatar {
774 #activity dt img.gravatar {
776 float: left;
775 float: left;
777 margin: 0 1em 1em 0;
776 margin: 0 1em 1em 0;
778 }
777 }
779
778
780 #activity dt,
779 #activity dt,
781 .journal {
780 .journal {
782 clear: left;
781 clear: left;
783 }
782 }
784
783
785 .gravatar-margin {
784 .gravatar-margin {
786 margin-left: 40px;
785 margin-left: 40px;
787 }
786 }
788
787
789 h2 img { vertical-align:middle; }
788 h2 img { vertical-align:middle; }
790
789
791
790
792 /***** Media print specific styles *****/
791 /***** Media print specific styles *****/
793 @media print {
792 @media print {
794 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
793 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
795 #main { background: #fff; }
794 #main { background: #fff; }
796 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
795 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
797 #wiki_add_attachment { display:none; }
796 #wiki_add_attachment { display:none; }
798 }
797 }
General Comments 0
You need to be logged in to leave comments. Login now