Skip to content

Commit 62885cd

Browse files
committed
Merge branch 'develop' into art/tag-page-performance
2 parents b5d38e8 + 24a68a4 commit 62885cd

6 files changed

Lines changed: 103 additions & 48 deletions

File tree

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
.js-suggested-edit-reject-dialog.is-hidden {
2-
display: none;
3-
}
2+
display: none;
3+
}
4+
5+
.suggested-edits-list-header {
6+
display: flex;
7+
justify-content: space-between;
8+
}

app/controllers/errors_controller.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
# Provides web actions that represent errors. Rails' standard error pages are static HTML with inline CSS; by using
2-
# a custom error controller we get all the layouts and CSS.
1+
# Provides web actions that represent errors. Rails' standard error pages are static HTML with inline CSS;
2+
# by using a custom error controller we get all the layouts and CSS, as well as error reporting.
3+
# Note that it requires +consider_all_requests_local+ to be +false+ (see environment config files for details)
34
class ErrorsController < ApplicationController
45
protect_from_forgery with: :exception, except: [:error], store: :cookie
56

app/controllers/suggested_edit_controller.rb

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,21 @@ class SuggestedEditController < ApplicationController
22
before_action :set_suggested_edit, only: [:show, :approve, :reject]
33

44
def category_index
5+
@show_decided = params[:show_decided].present? && params[:show_decided] == '1'
6+
7+
sort_orders = { asc: :asc, desc: :desc }
8+
sort_types = { age: :created_at, decided: :decided_at }
9+
10+
@default_sort_order = :desc
11+
@default_sort_type = @show_decided ? :decided : :age
12+
@sort_order = sort_orders[params[:order]&.to_sym] || sort_orders[@default_sort_order]
13+
@sort_type = sort_types[params[:sort]&.to_sym] || sort_types[@default_sort_type]
14+
515
@category = params[:category].present? ? Category.find(params[:category]) : nil
6-
@edits = if params[:show_decided].present? && params[:show_decided] == '1'
7-
SuggestedEdit.where(post: Post.undeleted.in(@category), active: false).newest_first
8-
else
9-
SuggestedEdit.where(post: Post.undeleted.in(@category), active: true).oldest_first
10-
end
16+
17+
@edits = SuggestedEdit.where(post: Post.undeleted.in(@category),
18+
active: !@show_decided)
19+
.order(@sort_type => @sort_order)
1120
end
1221

1322
def show

app/views/shared/_sorting.html.erb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<%#
2+
"Renders a sorting widget
3+
4+
Variables:
5+
types : Array<String> of available sorting types
6+
? default_order : Defualt sorting order, if any
7+
? default_type : Default sorting type, if any
8+
"%>
9+
10+
<%
11+
default_order = defined?(default_order) ? default_order : nil
12+
default_type = defined?(default_type) ? default_type : nil
13+
order = params[:order]&.to_sym || default_order
14+
reverse_order = order == :asc ? :desc : :asc
15+
%>
16+
17+
<div class="button-list is-gutterless">
18+
19+
<% types.each do |type| %>
20+
<% is_active = params[:sort] == type || (params[:sort].nil? && default_type.to_s == type) %>
21+
<%= link_to request.params.merge(sort: type, order: is_active ? reverse_order : nil),
22+
class: "button is-muted is-outlined #{'is-active' if is_active}",
23+
role: 'button',
24+
title: "Sort by #{type.humanize.downcase}",
25+
aria: { label: "Sort by #{type.humanize.downcase}" } do %>
26+
<% if is_active %>
27+
<i class="has-margin-right-1 fa fa-caret-<%= order == :asc ? 'up' : 'down' %>"></i> <%= type.humanize %>
28+
<% else %>
29+
<%= type.humanize %>
30+
<% end %>
31+
<% end %>
32+
<% end %>
33+
</div>

app/views/suggested_edit/category_index.html.erb

Lines changed: 42 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,54 +4,58 @@
44
<% categories = Category.unscoped.where(community: @community).order(sequence: :asc, id: :asc) %>
55
<% current_cat = current_category %>
66

7-
<div class="button-list is-gutterless">
8-
<%= link_to 'Pending', query_url(show_decided: 0),
9-
class: "button is-muted is-outlined #{params[:show_decided] != '1' ? 'is-active' : ''}" %>
10-
<%= link_to 'Decided', query_url(show_decided: 1),
11-
class: "button is-muted is-outlined #{params[:show_decided] == '1' ? 'is-active' : ''}" %>
7+
<div class="suggested-edits-list-header">
8+
<div class="button-list is-gutterless">
9+
<%= link_to 'Pending', query_url(show_decided: 0),
10+
class: "button is-muted is-outlined #{'is-active' unless @show_decided}" %>
11+
<%= link_to 'Decided', query_url(show_decided: 1),
12+
class: "button is-muted is-outlined #{'is-active' if @show_decided}" %>
13+
</div>
14+
15+
<%= render 'shared/sorting', default_order: @default_sort_order,
16+
default_type: @default_sort_type,
17+
types: %w[age decided] %>
1218
</div>
1319

14-
<% if params[:show_decided] != '1' && !current_user&.privilege?('edit_posts') %>
20+
<% unless @show_decided || current_user&.privilege?('edit_posts') %>
1521
<div class="notice is-info has-color-teal-800">
1622
<i class="fas fa-info-circle"></i> You can't approve or reject suggested edits (except on your own posts)
1723
because you haven't yet earned the <%= link_to 'Edit Posts', ability_path('edit_posts') %> ability.
1824
</div>
1925
<% end %>
2026

21-
<% if params[:show_decided] != '1' %>
22-
<h3>All categories</h3>
27+
<details class="has-margin-top-2">
28+
<summary>
29+
Categories
30+
</summary>
2331
<table>
2432
<tr>
2533
<th>category</th>
2634
<th>pending edits</th>
2735
</tr>
28-
<% categories.each do |cat| %>
36+
<% categories.each do |cat| %>
2937
<% next if (cat.min_view_trust_level || -1) > (current_user&.trust_level || 0) %>
30-
<% sug_edits = SuggestedEdit.where(post: Post.undeleted.in(cat), active: true).count %>
31-
<tr>
32-
<td>
33-
<% if cat == current_cat %>
34-
<%= cat.name %>
35-
<% else %>
36-
<%= link_to suggested_edits_queue_url(cat) do %>
37-
<%= cat.name %>
38-
<% end %>
39-
<% end %>
40-
</td>
41-
<td>
42-
<% if cat == current_cat %>
43-
<%= sug_edits %>
44-
<% else %>
45-
<%= link_to suggested_edits_queue_url(cat) do %>
46-
<%= sug_edits %>
47-
<% end %>
48-
<% end %>
49-
</td>
50-
</tr>
38+
<% sug_edits = SuggestedEdit.where(post: Post.undeleted.in(cat), active: !@show_decided).count %>
39+
<% queue_url = suggested_edits_queue_url(cat, params.permit(:sort, :order, :show_decided)) %>
40+
<tr>
41+
<td>
42+
<% if cat == current_cat %>
43+
<%= cat.name %>
44+
<% else %>
45+
<%= link_to cat.name, queue_url %>
46+
<% end %>
47+
</td>
48+
<td>
49+
<% if cat == current_cat %>
50+
<%= sug_edits %>
51+
<% else %>
52+
<%= link_to sug_edits, queue_url %>
53+
<% end %>
54+
</td>
55+
</tr>
5156
<% end %>
5257
</table>
53-
<% end %>
54-
58+
</details>
5559

5660
<% if @edits.any? %>
5761
<div class="widget">
@@ -67,14 +71,15 @@
6771
><%= edit.active ? 'Pending' : (edit.approved? ? 'Approved' : 'Rejected' ) %></strong> suggested edit
6872
by <%= user_link edit.user %>,
6973
<span title="<%= edit.created_at.iso8601 %>"><%= time_ago_in_words(edit.created_at) %> ago</span>
70-
<% unless edit.active %>
71-
<br/>Decided by <%= user_link edit.decided_by %>,
72-
<span title="<%= edit.decided_at.iso8601 %>"><%= time_ago_in_words(edit.decided_at) %> ago</span>
73-
<% end %>
74+
<% unless edit.active %>
75+
<br/>
76+
Decided by <%= user_link edit.decided_by %>,
77+
<span title="<%= edit.decided_at.iso8601 %>"><%= time_ago_in_words(edit.decided_at) %> ago</span>
78+
<% end %>
7479
</div>
7580
</div>
7681
<% end %>
7782
</div>
7883
<% else %>
79-
<p>There are no suggested edits in this category.</p>
84+
<p>There are no suggested edits in this category.</p>
8085
<% end %>

config/environments/development.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212
# Do not eager load code on boot.
1313
config.eager_load = false
1414

15-
# Show full error reports and disable caching.
15+
# Set this to +true+ unless you want to skip exceptions_app:
16+
config.consider_all_requests_local = ActiveRecord::Type::Boolean.new.cast(ENV['ALL_REQUESTS_LOCAL'] || 'true')
17+
18+
# Controller caching (+false+ by default, can be overridden via the env variable):
1619
perform_caching = ActiveRecord::Type::Boolean.new.cast(ENV['PERFORM_CACHING'])
17-
config.consider_all_requests_local = true
1820
config.action_controller.perform_caching = perform_caching || false
1921
Rack::MiniProfiler.config.disable_caching = !perform_caching
2022

0 commit comments

Comments
 (0)