##// END OF EJS Templates
Patch #9705 Tracker filtering on Main Calendar (Jeffrey Jones)...
Jean-Philippe Lang -
r392:cb6c8bee4733
parent child
Show More
@@ -420,12 +420,8 class ProjectsController < ApplicationController
420 # Show changelog for @project
420 # Show changelog for @project
421 def changelog
421 def changelog
422 @trackers = Tracker.find(:all, :conditions => ["is_in_chlog=?", true], :order => 'position')
422 @trackers = Tracker.find(:all, :conditions => ["is_in_chlog=?", true], :order => 'position')
423 if request.get?
423 retrieve_selected_tracker_ids(@trackers)
424 @selected_tracker_ids = @trackers.collect {|t| t.id.to_s }
424
425 else
426 @selected_tracker_ids = params[:tracker_ids].collect { |id| id.to_i.to_s } if params[:tracker_ids] and params[:tracker_ids].is_a? Array
427 end
428 @selected_tracker_ids ||= []
429 @fixed_issues = @project.issues.find(:all,
425 @fixed_issues = @project.issues.find(:all,
430 :include => [ :fixed_version, :status, :tracker ],
426 :include => [ :fixed_version, :status, :tracker ],
431 :conditions => [ "#{IssueStatus.table_name}.is_closed=? and #{Issue.table_name}.tracker_id in (#{@selected_tracker_ids.join(',')}) and #{Issue.table_name}.fixed_version_id is not null", true],
427 :conditions => [ "#{IssueStatus.table_name}.is_closed=? and #{Issue.table_name}.tracker_id in (#{@selected_tracker_ids.join(',')}) and #{Issue.table_name}.fixed_version_id is not null", true],
@@ -436,12 +432,8 class ProjectsController < ApplicationController
436
432
437 def roadmap
433 def roadmap
438 @trackers = Tracker.find(:all, :conditions => ["is_in_roadmap=?", true], :order => 'position')
434 @trackers = Tracker.find(:all, :conditions => ["is_in_roadmap=?", true], :order => 'position')
439 if request.get?
435 retrieve_selected_tracker_ids(@trackers)
440 @selected_tracker_ids = @trackers.collect {|t| t.id.to_s }
436
441 else
442 @selected_tracker_ids = params[:tracker_ids].collect { |id| id.to_i.to_s } if params[:tracker_ids] and params[:tracker_ids].is_a? Array
443 end
444 @selected_tracker_ids ||= []
445 @versions = @project.versions.find(:all,
437 @versions = @project.versions.find(:all,
446 :conditions => [ "#{Version.table_name}.effective_date>?", Date.today],
438 :conditions => [ "#{Version.table_name}.effective_date>?", Date.today],
447 :order => "#{Version.table_name}.effective_date ASC"
439 :order => "#{Version.table_name}.effective_date ASC"
@@ -534,6 +526,9 class ProjectsController < ApplicationController
534 end
526 end
535
527
536 def calendar
528 def calendar
529 @trackers = Tracker.find(:all, :order => 'position')
530 retrieve_selected_tracker_ids(@trackers)
531
537 if params[:year] and params[:year].to_i > 1900
532 if params[:year] and params[:year].to_i > 1900
538 @year = params[:year].to_i
533 @year = params[:year].to_i
539 if params[:month] and params[:month].to_i > 0 and params[:month].to_i < 13
534 if params[:month] and params[:month].to_i > 0 and params[:month].to_i < 13
@@ -548,18 +543,24 class ProjectsController < ApplicationController
548 # start on monday
543 # start on monday
549 @date_from = @date_from - (@date_from.cwday-1)
544 @date_from = @date_from - (@date_from.cwday-1)
550 # finish on sunday
545 # finish on sunday
551 @date_to = @date_to + (7-@date_to.cwday)
546 @date_to = @date_to + (7-@date_to.cwday)
552
547
553 @issues = @project.issues.find(:all, :include => [:tracker, :status, :assigned_to, :priority],
548 @issues = @project.issues.find(:all,
554 :conditions => ["((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?))", @date_from, @date_to, @date_from, @date_to])
549 :include => [:tracker, :status, :assigned_to, :priority],
555
550 :conditions => ["((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?)) and #{Issue.table_name}.tracker_id in (#{@selected_tracker_ids.join(',')})", @date_from, @date_to, @date_from, @date_to]
551 ) unless @selected_tracker_ids.empty?
552 @issues ||=[]
553
556 @ending_issues_by_days = @issues.group_by {|issue| issue.due_date}
554 @ending_issues_by_days = @issues.group_by {|issue| issue.due_date}
557 @starting_issues_by_days = @issues.group_by {|issue| issue.start_date}
555 @starting_issues_by_days = @issues.group_by {|issue| issue.start_date}
558
556
559 render :layout => false if request.xhr?
557 render :layout => false if request.xhr?
560 end
558 end
561
559
562 def gantt
560 def gantt
561 @trackers = Tracker.find(:all, :order => 'position')
562 retrieve_selected_tracker_ids(@trackers)
563
563 if params[:year] and params[:year].to_i >0
564 if params[:year] and params[:year].to_i >0
564 @year_from = params[:year].to_i
565 @year_from = params[:year].to_i
565 if params[:month] and params[:month].to_i >=1 and params[:month].to_i <= 12
566 if params[:month] and params[:month].to_i >=1 and params[:month].to_i <= 12
@@ -577,7 +578,13 class ProjectsController < ApplicationController
577
578
578 @date_from = Date.civil(@year_from, @month_from, 1)
579 @date_from = Date.civil(@year_from, @month_from, 1)
579 @date_to = (@date_from >> @months) - 1
580 @date_to = (@date_from >> @months) - 1
580 @issues = @project.issues.find(:all, :order => "start_date, due_date", :include => [:tracker, :status, :assigned_to, :priority], :conditions => ["(((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?) or (start_date<? and due_date>?)) and start_date is not null and due_date is not null)", @date_from, @date_to, @date_from, @date_to, @date_from, @date_to])
581
582 @issues = @project.issues.find(:all,
583 :order => "start_date, due_date",
584 :include => [:tracker, :status, :assigned_to, :priority],
585 :conditions => ["(((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?) or (start_date<? and due_date>?)) and start_date is not null and due_date is not null and #{Issue.table_name}.tracker_id in (#{@selected_tracker_ids.join(',')}))", @date_from, @date_to, @date_from, @date_to, @date_from, @date_to]
586 ) unless @selected_tracker_ids.empty?
587 @issues ||=[]
581
588
582 if params[:output]=='pdf'
589 if params[:output]=='pdf'
583 @options_for_rfpdf ||= {}
590 @options_for_rfpdf ||= {}
@@ -630,6 +637,14 private
630 render_404
637 render_404
631 end
638 end
632
639
640 def retrieve_selected_tracker_ids(selectable_trackers)
641 if ids = params[:tracker_ids]
642 @selected_tracker_ids = (ids.is_a? Array) ? ids.collect { |id| id.to_i.to_s } : ids.split('/').collect { |id| id.to_i.to_s }
643 else
644 @selected_tracker_ids = selectable_trackers.collect {|t| t.id.to_s }
645 end
646 end
647
633 # Retrieve query from session or build a new query
648 # Retrieve query from session or build a new query
634 def retrieve_query
649 def retrieve_query
635 if params[:query_id]
650 if params[:query_id]
@@ -1,29 +1,39
1 <h2><%= l(:label_calendar) %></h2>
1 <h2><%= l(:label_calendar) %></h2>
2
2
3 <% form_tag({:action => 'calendar', :id => @project}) do %>
3 <% form_tag do %>
4 <table width="100%">
4 <table width="100%">
5 <tr>
5 <tr>
6 <td align="left" style="width:150px">
6 <td align="left" style="width:15%">
7 <%= link_to_remote ('&#171; ' + (@month==1 ? "#{month_name(12)} #{@year-1}" : "#{month_name(@month-1)}")),
7 <%= link_to_remote ('&#171; ' + (@month==1 ? "#{month_name(12)} #{@year-1}" : "#{month_name(@month-1)}")),
8 {:update => "content", :url => { :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1) }},
8 {:update => "content", :url => { :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1), :tracker_ids => @selected_tracker_ids }},
9 {:href => url_for(:action => 'calendar', :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1))}
9 {:href => url_for(:action => 'calendar', :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1), :tracker_ids => @selected_tracker_ids)}
10 %>
10 %>
11 </td>
11 </td>
12 <td align="center">
12 <td align="center" style="width:55%">
13 <%= select_month(@month, :prefix => "month", :discard_type => true) %>
13 <%= select_month(@month, :prefix => "month", :discard_type => true) %>
14 <%= select_year(@year, :prefix => "year", :discard_type => true) %>
14 <%= select_year(@year, :prefix => "year", :discard_type => true) %>
15 <%= submit_tag l(:button_submit), :class => "button-small" %>
15 <%= submit_tag l(:button_submit), :class => "button-small" %>
16 </td>
16 </td>
17 <td align="right" style="width:150px">
17 <td align="left" style="width:15%">
18 <a href="#" onclick="Element.toggle('trackerselect')"><%= l(:label_options) %></a>
19 <div id="trackerselect" class="rightbox overlay" style="width:140px; display:none;">
20 <p><strong><%=l(:label_tracker_plural)%></strong></p>
21 <% @trackers.each do |tracker| %>
22 <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %>
23 <%= tracker.name %><br />
24 <% end %>
25 <p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p>
26 </div>
27 </td>
28 <td align="right" style="width:15%">
18 <%= link_to_remote ((@month==12 ? "#{month_name(1)} #{@year+1}" : "#{month_name(@month+1)}") + ' &#187;'),
29 <%= link_to_remote ((@month==12 ? "#{month_name(1)} #{@year+1}" : "#{month_name(@month+1)}") + ' &#187;'),
19 {:update => "content", :url => { :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1) }},
30 {:update => "content", :url => { :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1), :tracker_ids => @selected_tracker_ids }},
20 {:href => url_for(:action => 'calendar', :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1))}
31 {:href => url_for(:action => 'calendar', :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1), :tracker_ids => @selected_tracker_ids)}
21 %>&nbsp;
32 %>&nbsp;
22 </td>
33 </td>
23 </tr>
34 </tr>
24 </table>
35 </table>
25 <% end %>
36 <% end %>
26 <br />
27
37
28 <table class="list with-cells">
38 <table class="list with-cells">
29 <thead>
39 <thead>
@@ -1,39 +1,47
1 <div class="contextual">
1 <div class="contextual">
2 <%= l(:label_export_to) %>
2 <%= l(:label_export_to) %>
3 <%= link_to 'PDF', {:zoom => @zoom, :year => @year_from, :month => @month_from, :months => @months, :output => 'pdf'}, :class => 'icon icon-pdf' %>
3 <%= link_to 'PDF', {:zoom => @zoom, :year => @year_from, :month => @month_from, :months => @months, :tracker_ids => @selected_tracker_ids, :output => 'pdf'}, :class => 'icon icon-pdf' %>
4 </div>
4 </div>
5
5
6 <h2><%= l(:label_gantt) %></h2>
6 <h2><%= l(:label_gantt) %></h2>
7
7
8 <% form_tag do %>
8 <table width="100%">
9 <table width="100%">
9 <tr>
10 <tr>
10 <td align="left">
11 <td align="left">
11 <% form_tag do %>
12 <input type="text" name="months" size="2" value="<%= @months %>" />
12 <p>
13 <%= l(:label_months_from) %>
13 <input type="text" name="months" size="2" value="<%= @months %>" />
14 <%= select_month(@month_from, :prefix => "month", :discard_type => true) %>
14 <%= l(:label_months_from) %>
15 <%= select_year(@year_from, :prefix => "year", :discard_type => true) %>
15 <%= select_month(@month_from, :prefix => "month", :discard_type => true) %>
16 <%= hidden_field_tag 'zoom', @zoom %>
16 <%= select_year(@year_from, :prefix => "year", :discard_type => true) %>
17 <%= submit_tag l(:button_submit), :class => "button-small" %>
17 <%= hidden_field_tag 'zoom', @zoom %>
18 </td>
18 <%= submit_tag l(:button_submit), :class => "button-small" %>
19 <td>
19 </p>
20 <a href="#" onclick="Element.toggle('trackerselect')"><%= l(:label_options) %></a>
20 <% end %>
21 <div id="trackerselect" class="rightbox overlay" style="width:140px; display: none;">
22 <p><strong><%=l(:label_tracker_plural)%></strong></p>
23 <% @trackers.each do |tracker| %>
24 <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %>
25 <%= tracker.name %><br />
26 <% end %>
27 <p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p>
28 </div>
21 </td>
29 </td>
22 <td align="right">
30 <td align="right">
23 <%= if @zoom < 4
31 <%= if @zoom < 4
24 link_to image_tag('zoom_in.png'), {:zoom => (@zoom+1), :year => @year_from, :month => @month_from, :months => @months}
32 link_to image_tag('zoom_in.png'), {:zoom => (@zoom+1), :year => @year_from, :month => @month_from, :months => @months, :tracker_ids => @selected_tracker_ids}
25 else
33 else
26 image_tag 'zoom_in_g.png'
34 image_tag 'zoom_in_g.png'
27 end %>
35 end %>
28 <%= if @zoom > 1
36 <%= if @zoom > 1
29 link_to image_tag('zoom_out.png'), :zoom => (@zoom-1), :year => @year_from, :month => @month_from, :months => @months
37 link_to image_tag('zoom_out.png'),{:zoom => (@zoom-1), :year => @year_from, :month => @month_from, :months => @months, :tracker_ids => @selected_tracker_ids}
30 else
38 else
31 image_tag 'zoom_out_g.png'
39 image_tag 'zoom_out_g.png'
32 end %>
40 end %>
33 </td>
41 </td>
34 </tr>
42 </tr>
35 </table>
43 </table>
36 <br />
44 <% end %>
37
45
38 <% zoom = 1
46 <% zoom = 1
39 @zoom.times { zoom = zoom * 2 }
47 @zoom.times { zoom = zoom * 2 }
@@ -41,22 +49,22
41 subject_width = 260
49 subject_width = 260
42 header_heigth = 18
50 header_heigth = 18
43
51
44 headers_heigth = header_heigth
52 headers_height = header_heigth
45 show_weeks = false
53 show_weeks = false
46 show_days = false
54 show_days = false
47
55
48 if @zoom >1
56 if @zoom >1
49 show_weeks = true
57 show_weeks = true
50 headers_heigth = 2*header_heigth
58 headers_height = 2*header_heigth
51 if @zoom > 2
59 if @zoom > 2
52 show_days = true
60 show_days = true
53 headers_heigth = 3*header_heigth
61 headers_height = 3*header_heigth
54 end
62 end
55 end
63 end
56
64
57 g_width = (@date_to - @date_from + 1)*zoom
65 g_width = (@date_to - @date_from + 1)*zoom
58 g_height = [(20 * @issues.length + 6)+150, 206].max
66 g_height = [(20 * @issues.length + 6)+150, 206].max
59 t_height = g_height + headers_heigth
67 t_height = g_height + headers_height
60 %>
68 %>
61
69
62 <table width="100%" style="border:0; border-collapse: collapse;">
70 <table width="100%" style="border:0; border-collapse: collapse;">
@@ -64,26 +72,26 t_height = g_height + headers_heigth
64 <td style="width:260px;">
72 <td style="width:260px;">
65
73
66 <div style="position:relative;height:<%= t_height + 24 %>px;width:<%= subject_width + 1 %>px;">
74 <div style="position:relative;height:<%= t_height + 24 %>px;width:<%= subject_width + 1 %>px;">
67 <div style="right:-2px;width:<%= subject_width %>px;height:<%= headers_heigth %>px;background: #eee;" class="gantt_hdr"></div>
75 <div style="right:-2px;width:<%= subject_width %>px;height:<%= headers_height %>px;background: #eee;" class="gantt_hdr"></div>
68 <div style="right:-2px;width:<%= subject_width %>px;height:<%= t_height %>px;border-left: 1px solid #c0c0c0;overflow:hidden;" class="gantt_hdr"></div>
76 <div style="right:-2px;width:<%= subject_width %>px;height:<%= t_height %>px;border-left: 1px solid #c0c0c0;overflow:hidden;" class="gantt_hdr"></div>
69 <%
77 <%
70 #
78 #
71 # Tasks subjects
79 # Tasks subjects
72 #
80 #
73 top = headers_heigth + 8
81 top = headers_height + 8
74 @issues.each do |i| %>
82 @issues.each do |i| %>
75 <div style="position: absolute;line-height:1.2em;height:16px;top:<%= top %>px;left:4px;overflow:hidden;">
83 <div style="position: absolute;line-height:1.2em;height:16px;top:<%= top %>px;left:4px;overflow:hidden;">
76 <small><%= link_to "#{i.tracker.name} ##{i.id}", { :controller => 'issues', :action => 'show', :id => i }, :title => "#{i.subject}" %>:
84 <small><%= link_to "#{i.tracker.name} ##{i.id}", { :controller => 'issues', :action => 'show', :id => i }, :title => "#{i.subject}" %>:
77 <%=h i.subject.sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)') %></small>
85 <%=h i.subject.sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)') %></small>
78 </div>
86 </div>
79 <% top = top + 20
87 <% top = top + 20
80 end %>
88 end %>
81 </div>
89 </div>
82 </td>
90 </td>
83 <td>
91 <td>
84
92
85 <div style="position:relative;height:<%= t_height + 24 %>px;overflow:auto;">
93 <div style="position:relative;height:<%= t_height + 24 %>px;overflow:auto;">
86 <div style="width:<%= g_width-1 %>px;height:<%= headers_heigth %>px;background: #eee;" class="gantt_hdr">&nbsp;</div>
94 <div style="width:<%= g_width-1 %>px;height:<%= headers_height %>px;background: #eee;" class="gantt_hdr">&nbsp;</div>
87 <%
95 <%
88 #
96 #
89 # Months headers
97 # Months headers
@@ -160,14 +168,14 end %>
160 # Today red line
168 # Today red line
161 #
169 #
162 if Date.today >= @date_from and Date.today <= @date_to %>
170 if Date.today >= @date_from and Date.today <= @date_to %>
163 <div style="position: absolute;height:<%= g_height %>px;top:<%= headers_heigth + 1 %>px;left:<%= ((Date.today-@date_from+1)*zoom).floor()-1 %>px;width:10px;border-left: 1px dashed red;">&nbsp;</div>
171 <div style="position: absolute;height:<%= g_height %>px;top:<%= headers_height + 1 %>px;left:<%= ((Date.today-@date_from+1)*zoom).floor()-1 %>px;width:10px;border-left: 1px dashed red;">&nbsp;</div>
164 <% end %>
172 <% end %>
165
173
166 <%
174 <%
167 #
175 #
168 # Tasks
176 # Tasks
169 #
177 #
170 top = headers_heigth + 10
178 top = headers_height + 10
171 @issues.each do |i| %>
179 @issues.each do |i| %>
172 <%
180 <%
173 i_start_date = (i.start_date >= @date_from ? i.start_date : @date_from )
181 i_start_date = (i.start_date >= @date_from ? i.start_date : @date_from )
@@ -209,7 +217,7 end %>
209
217
210 <table width="100%">
218 <table width="100%">
211 <tr>
219 <tr>
212 <td align="left"><%= link_to ('&#171; ' + l(:label_previous)), :year => (@date_from << @months).year, :month => (@date_from << @months).month, :zoom => @zoom, :months => @months %></td>
220 <td align="left"><%= link_to ('&#171; ' + l(:label_previous)), :year => (@date_from << @months).year, :month => (@date_from << @months).month, :zoom => @zoom, :months => @months, :tracker_ids => @selected_tracker_ids %></td>
213 <td align="right"><%= link_to (l(:label_next) + ' &#187;'), :year => (@date_from >> @months).year, :month => (@date_from >> @months).month, :zoom => @zoom, :months => @months %></td>
221 <td align="right"><%= link_to (l(:label_next) + ' &#187;'), :year => (@date_from >> @months).year, :month => (@date_from >> @months).month, :zoom => @zoom, :months => @months, :tracker_ids => @selected_tracker_ids %></td>
214 </tr>
222 </tr>
215 </table> No newline at end of file
223 </table>
@@ -351,6 +351,7 label_commits_per_author: Übertragungen pro Autor
351 label_view_diff: View differences
351 label_view_diff: View differences
352 label_diff_inline: inline
352 label_diff_inline: inline
353 label_diff_side_by_side: side by side
353 label_diff_side_by_side: side by side
354 label_options: Options
354
355
355 button_login: Einloggen
356 button_login: Einloggen
356 button_submit: OK
357 button_submit: OK
@@ -351,6 +351,7 label_commits_per_author: Commits per author
351 label_view_diff: View differences
351 label_view_diff: View differences
352 label_diff_inline: inline
352 label_diff_inline: inline
353 label_diff_side_by_side: side by side
353 label_diff_side_by_side: side by side
354 label_options: Options
354
355
355 button_login: Login
356 button_login: Login
356 button_submit: Submit
357 button_submit: Submit
@@ -351,6 +351,7 label_commits_per_author: Commits per author
351 label_view_diff: View differences
351 label_view_diff: View differences
352 label_diff_inline: inline
352 label_diff_inline: inline
353 label_diff_side_by_side: side by side
353 label_diff_side_by_side: side by side
354 label_options: Options
354
355
355 button_login: Conexión
356 button_login: Conexión
356 button_submit: Someter
357 button_submit: Someter
@@ -351,6 +351,7 label_commits_per_author: Commits par auteur
351 label_view_diff: Voir les différences
351 label_view_diff: Voir les différences
352 label_diff_inline: en ligne
352 label_diff_inline: en ligne
353 label_diff_side_by_side: côte à côte
353 label_diff_side_by_side: côte à côte
354 label_options: Options
354
355
355 button_login: Connexion
356 button_login: Connexion
356 button_submit: Soumettre
357 button_submit: Soumettre
@@ -351,6 +351,7 label_commits_per_author: Commits per author
351 label_view_diff: View differences
351 label_view_diff: View differences
352 label_diff_inline: inline
352 label_diff_inline: inline
353 label_diff_side_by_side: side by side
353 label_diff_side_by_side: side by side
354 label_options: Options
354
355
355 button_login: Login
356 button_login: Login
356 button_submit: Invia
357 button_submit: Invia
@@ -352,6 +352,7 label_commits_per_author: 起票者別のコミット
352 label_view_diff: 差分を見る
352 label_view_diff: 差分を見る
353 label_diff_inline: インライン
353 label_diff_inline: インライン
354 label_diff_side_by_side: 横に並べる
354 label_diff_side_by_side: 横に並べる
355 label_options: Options
355
356
356 button_login: ログイン
357 button_login: ログイン
357 button_submit: 変更
358 button_submit: 変更
@@ -354,6 +354,7 label_commits_per_author: Commits per author
354 label_view_diff: View differences
354 label_view_diff: View differences
355 label_diff_inline: inline
355 label_diff_inline: inline
356 label_diff_side_by_side: side by side
356 label_diff_side_by_side: side by side
357 label_options: Options
357
358
358 button_login: 登录
359 button_login: 登录
359 button_submit: 提交
360 button_submit: 提交
@@ -467,6 +467,12 position: relative;
467 margin: 0 5px 5px;
467 margin: 0 5px 5px;
468 }
468 }
469
469
470 .overlay{
471 position: absolute;
472 margin-left:0;
473 z-index: 50;
474 }
475
470 .layout-active {
476 .layout-active {
471 background: #ECF3E1;
477 background: #ECF3E1;
472 }
478 }
General Comments 0
You need to be logged in to leave comments. Login now