decidim-sortitions 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE-AGPLv3.txt +661 -0
- data/README.md +31 -0
- data/Rakefile +3 -0
- data/app/assets/config/decidim_sortitions_manifest.css +1 -0
- data/app/assets/config/decidim_sortitions_manifest.js +1 -0
- data/app/assets/images/decidim/sortitions/icon.svg +4 -0
- data/app/assets/javascripts/decidim/sortitions/admin/sortitions.js +2 -0
- data/app/assets/javascripts/decidim/sortitions/social_share.js +2 -0
- data/app/assets/stylesheets/decidim/sortitions/_sortitions.scss +45 -0
- data/app/assets/stylesheets/decidim/sortitions/social_share.css.scss +18 -0
- data/app/commands/decidim/sortitions/admin/create_sortition.rb +81 -0
- data/app/commands/decidim/sortitions/admin/destroy_sortition.rb +45 -0
- data/app/commands/decidim/sortitions/admin/update_sortition.rb +45 -0
- data/app/controllers/concerns/decidim/sortitions/orderable.rb +50 -0
- data/app/controllers/decidim/sortitions/admin/application_controller.rb +28 -0
- data/app/controllers/decidim/sortitions/admin/sortitions_controller.rb +104 -0
- data/app/controllers/decidim/sortitions/application_controller.rb +13 -0
- data/app/controllers/decidim/sortitions/sortition_widgets_controller.rb +20 -0
- data/app/controllers/decidim/sortitions/sortitions_controller.rb +45 -0
- data/app/events/decidim/sortitions/create_sortition_event.rb +8 -0
- data/app/forms/decidim/sortitions/admin/destroy_sortition_form.rb +20 -0
- data/app/forms/decidim/sortitions/admin/edit_sortition_form.rb +22 -0
- data/app/forms/decidim/sortitions/admin/sortition_form.rb +44 -0
- data/app/helpers/decidim/sortitions/admin/sortitions_helper.rb +24 -0
- data/app/helpers/decidim/sortitions/sortitions_helper.rb +38 -0
- data/app/models/decidim/sortitions/abilities/admin/admin_ability.rb +23 -0
- data/app/models/decidim/sortitions/abilities/admin/process_admin_ability.rb +46 -0
- data/app/models/decidim/sortitions/application_record.rb +9 -0
- data/app/models/decidim/sortitions/sortition.rb +81 -0
- data/app/queries/decidim/sortitions/admin/participatory_space_proposal_features.rb +29 -0
- data/app/queries/decidim/sortitions/admin/participatory_space_proposals.rb +49 -0
- data/app/queries/decidim/sortitions/filtered_sortitions.rb +37 -0
- data/app/services/decidim/sortitions/admin/draw.rb +31 -0
- data/app/services/decidim/sortitions/sortition_search.rb +47 -0
- data/app/views/decidim/sortitions/admin/sortitions/_form.html.erb +41 -0
- data/app/views/decidim/sortitions/admin/sortitions/confirm_destroy.html.erb +21 -0
- data/app/views/decidim/sortitions/admin/sortitions/edit.html.erb +27 -0
- data/app/views/decidim/sortitions/admin/sortitions/index.html.erb +57 -0
- data/app/views/decidim/sortitions/admin/sortitions/new.html.erb +11 -0
- data/app/views/decidim/sortitions/admin/sortitions/show.html.erb +55 -0
- data/app/views/decidim/sortitions/sortition_widgets/show.html.erb +4 -0
- data/app/views/decidim/sortitions/sortitions/_count.html.erb +1 -0
- data/app/views/decidim/sortitions/sortitions/_filters.html.erb +31 -0
- data/app/views/decidim/sortitions/sortitions/_filters_small_view.html.erb +18 -0
- data/app/views/decidim/sortitions/sortitions/_filters_small_view0.html.erb +18 -0
- data/app/views/decidim/sortitions/sortitions/_linked_sortitions.html.erb +29 -0
- data/app/views/decidim/sortitions/sortitions/_proposal.html.erb +24 -0
- data/app/views/decidim/sortitions/sortitions/_proposal_badge.html.erb +3 -0
- data/app/views/decidim/sortitions/sortitions/_results_count.html.erb +8 -0
- data/app/views/decidim/sortitions/sortitions/_sortition.html.erb +25 -0
- data/app/views/decidim/sortitions/sortitions/_sortition_author.html.erb +17 -0
- data/app/views/decidim/sortitions/sortitions/_sortition_cancel_author.html.erb +17 -0
- data/app/views/decidim/sortitions/sortitions/_sortitions.html.erb +14 -0
- data/app/views/decidim/sortitions/sortitions/_sortitions_count.html.erb +1 -0
- data/app/views/decidim/sortitions/sortitions/_tags.html.erb +16 -0
- data/app/views/decidim/sortitions/sortitions/index.html.erb +21 -0
- data/app/views/decidim/sortitions/sortitions/index.js.erb +10 -0
- data/app/views/decidim/sortitions/sortitions/show.html.erb +134 -0
- data/config/initializers/social_share_button.rb +5 -0
- data/config/locales/ca.yml +155 -0
- data/config/locales/en.yml +154 -0
- data/config/locales/es.yml +155 -0
- data/db/migrate/20171215161358_create_decidim_module_sortitions_sortitions.rb +23 -0
- data/db/migrate/20171220164658_add_witnesses_to_sortitions.rb +7 -0
- data/db/migrate/20171220164744_add_additional_info_to_sortitions.rb +7 -0
- data/db/migrate/20180102100101_add_author_to_sortitions.rb +7 -0
- data/db/migrate/20180102101128_add_reference_to_sortitions.rb +8 -0
- data/db/migrate/20180103082645_add_title_to_sortition.rb +7 -0
- data/db/migrate/20180103123055_drop_decidim_category_id_from_sortitions.rb +13 -0
- data/db/migrate/20180103160301_add_cancel_data_to_sortition.rb +9 -0
- data/db/migrate/20180104143054_make_sortition_reference_nullable.rb +7 -0
- data/db/migrate/20180104145344_add_candidate_proposals_to_sortitions.rb +7 -0
- data/db/migrate/20180108132729_rename_sortitions_table.rb +7 -0
- data/lib/decidim/sortitions.rb +24 -0
- data/lib/decidim/sortitions/admin.rb +10 -0
- data/lib/decidim/sortitions/admin_engine.rb +35 -0
- data/lib/decidim/sortitions/engine.rb +26 -0
- data/lib/decidim/sortitions/feature.rb +43 -0
- data/lib/decidim/sortitions/test/factories.rb +37 -0
- data/lib/decidim/sortitions/version.rb +7 -0
- metadata +208 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Sortitions
|
5
|
+
module Admin
|
6
|
+
class ParticipatorySpaceProposals < Rectify::Query
|
7
|
+
# Sugar syntax. Retrieve all proposals for the given sortition.
|
8
|
+
def self.for(sortition)
|
9
|
+
new(sortition).query
|
10
|
+
end
|
11
|
+
|
12
|
+
# Initializes the class.
|
13
|
+
#
|
14
|
+
# sortition - a sortition to select proposals
|
15
|
+
def initialize(sortition)
|
16
|
+
@sortition = sortition
|
17
|
+
@category = sortition.category
|
18
|
+
@request_timestamp = sortition.request_timestamp
|
19
|
+
end
|
20
|
+
|
21
|
+
# Given a particpiatory process retrieves its proposals
|
22
|
+
#
|
23
|
+
# Returns an ActiveRecord::Relation.
|
24
|
+
def query
|
25
|
+
if category.nil?
|
26
|
+
return Decidim::Proposals::Proposal
|
27
|
+
.except_withdrawn
|
28
|
+
.where("created_at < ?", request_timestamp)
|
29
|
+
.where(feature: sortition.decidim_proposals_feature)
|
30
|
+
.order(id: :asc)
|
31
|
+
end
|
32
|
+
|
33
|
+
# categorization -> category
|
34
|
+
Decidim::Proposals::Proposal
|
35
|
+
.joins(:categorization)
|
36
|
+
.except_withdrawn
|
37
|
+
.where(feature: sortition.decidim_proposals_feature)
|
38
|
+
.where("decidim_proposals_proposals.created_at < ?", request_timestamp)
|
39
|
+
.where("decidim_categorizations.decidim_category_id = ?", category.id)
|
40
|
+
.order(id: :asc)
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
attr_reader :sortition, :category, :request_timestamp
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Sortitions
|
5
|
+
# A class used to find sortitions filtered by features and a date range
|
6
|
+
class FilteredSortitions < Rectify::Query
|
7
|
+
# Syntactic sugar to initialize the class and return the queried objects.
|
8
|
+
#
|
9
|
+
# features - An array of Decidim::Feature
|
10
|
+
# start_at - A date to filter resources created after it
|
11
|
+
# end_at - A date to filter resources created before it.
|
12
|
+
def self.for(features, start_at = nil, end_at = nil)
|
13
|
+
new(features, start_at, end_at).query
|
14
|
+
end
|
15
|
+
|
16
|
+
# Initializes the class.
|
17
|
+
#
|
18
|
+
# features - An array of Decidim::Feature
|
19
|
+
# start_at - A date to filter resources created after it
|
20
|
+
# end_at - A date to filter resources created before it.
|
21
|
+
def initialize(features, start_at = nil, end_at = nil)
|
22
|
+
@features = features
|
23
|
+
@start_at = start_at
|
24
|
+
@end_at = end_at
|
25
|
+
end
|
26
|
+
|
27
|
+
# Finds the Proposals scoped to an array of features and filtered
|
28
|
+
# by a range of dates.
|
29
|
+
def query
|
30
|
+
sortitions = Decidim::Sortitions::Sortition.where(feature: @features)
|
31
|
+
sortitions = sortitions.where("created_at >= ?", @start_at) if @start_at.present?
|
32
|
+
sortitions = sortitions.where("created_at <= ?", @end_at) if @end_at.present?
|
33
|
+
sortitions
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Sortitions
|
5
|
+
module Admin
|
6
|
+
# This class represents a draw for selecting proposals.
|
7
|
+
class Draw
|
8
|
+
attr_reader :sortition
|
9
|
+
|
10
|
+
# Sugar syntax. Retrieves the list of selected proposals.
|
11
|
+
def self.for(sortition)
|
12
|
+
new(sortition).results
|
13
|
+
end
|
14
|
+
|
15
|
+
# Initializes the draw class. Receives a sortition.
|
16
|
+
def initialize(sortition)
|
17
|
+
@sortition = sortition
|
18
|
+
end
|
19
|
+
|
20
|
+
# Executes the draw and return the selected proposal ids.
|
21
|
+
def results
|
22
|
+
proposals.sample(sortition.target_items, random: Random.new(sortition.seed)).pluck(:id)
|
23
|
+
end
|
24
|
+
|
25
|
+
def proposals
|
26
|
+
@proposals ||= ParticipatorySpaceProposals.for(sortition).to_a
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Sortitions
|
5
|
+
# A service to encapsualte all the logic when searching and filtering
|
6
|
+
# sortitions in a participatory process.
|
7
|
+
class SortitionSearch < ResourceSearch
|
8
|
+
# Public: Initializes the service.
|
9
|
+
# feature - A Decidim::Feature to get the proposals from.
|
10
|
+
# page - The page number to paginate the results.
|
11
|
+
# per_page - The number of proposals to return per page.
|
12
|
+
def initialize(options = {})
|
13
|
+
super(Sortition.all, options)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Handle the search_text filter
|
17
|
+
def search_search_text
|
18
|
+
query
|
19
|
+
.where("title->>'#{current_locale}' ILIKE ?", "%#{search_text}%")
|
20
|
+
.or(
|
21
|
+
query.where("additional_info->>'#{current_locale}' ILIKE ?", "%#{search_text}%")
|
22
|
+
)
|
23
|
+
.or(
|
24
|
+
query.where("witnesses->>'#{current_locale}' ILIKE ?", "%#{search_text}%")
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Handle the state filter
|
29
|
+
def search_state
|
30
|
+
case state
|
31
|
+
when "active"
|
32
|
+
query.active
|
33
|
+
when "cancelled"
|
34
|
+
query.cancelled
|
35
|
+
else # Assume 'all'
|
36
|
+
query
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def current_locale
|
43
|
+
I18n.locale.to_s
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<div class="card">
|
2
|
+
<div class="card-divider">
|
3
|
+
<h2 class="card-title"><%= t ".title" %></h2>
|
4
|
+
</div>
|
5
|
+
|
6
|
+
<div class="card-section">
|
7
|
+
<div class="row">
|
8
|
+
<div class="columns xlarge-12">
|
9
|
+
<%= form.translated :text_field, :title, autofocus: true %>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<div class="columns xlarge-4">
|
13
|
+
<%= form.select :decidim_proposals_feature_id,
|
14
|
+
features_options(proposal_features),
|
15
|
+
prompt: t(".select_proposal_feature") %>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div class="columns xlarge-4">
|
19
|
+
<%= form.categories_select :decidim_category_id,
|
20
|
+
@form.categories,
|
21
|
+
prompt: t(".all_categories") %>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div class="columns xlarge-4">
|
25
|
+
<%= form.number_field :target_items, min: 1, step: 1 %>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<div class="columns xlarge-12">
|
29
|
+
<%= form.translated :editor, :witnesses, toolbar: :full, lines: 10 %>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<div class="columns xlarge-12">
|
33
|
+
<%= form.translated :editor, :additional_info, toolbar: :full, lines: 10 %>
|
34
|
+
</div>
|
35
|
+
|
36
|
+
<div class="columns xlarge-2">
|
37
|
+
<%= form.number_field :dice, min: 1, max: 6, step: 1 %>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
</div>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<h2 class="process-title-summary"><%= t ".title" %></h2>
|
2
|
+
|
3
|
+
<%= decidim_form_for(@form, html: { class: "form confirm_destroy_sortition" }, method: :delete) do |form| %>
|
4
|
+
<div class="card">
|
5
|
+
<div class="card-divider">
|
6
|
+
<h2 class="card-title"><%= translated_attribute sortition.title %></h2>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div class="card-section">
|
10
|
+
<div class="row">
|
11
|
+
<div class="columns xlarge-12">
|
12
|
+
<%= form.translated :editor, :cancel_reason, toolbar: :full, lines: 10 %>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div class="button--double form-general-submit">
|
19
|
+
<%= form.submit t(".destroy"), data: { confirm: t(".confirm_destroy") } %>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<h2 class="process-title-summary">
|
2
|
+
<%= translated_attribute(sortition.title) %>
|
3
|
+
</h2>
|
4
|
+
|
5
|
+
<%= decidim_form_for(@form, html: { class: "form edit_sortition" }) do |form| %>
|
6
|
+
<div class="card">
|
7
|
+
<div class="card-divider">
|
8
|
+
<h2 class="card-title"><%= t ".title" %></h2>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<div class="card-section">
|
12
|
+
<div class="row">
|
13
|
+
<div class="columns xlarge-12">
|
14
|
+
<%= form.translated :text_field, :title, autofocus: true %>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div class="columns xlarge-12">
|
18
|
+
<%= form.translated :editor, :additional_info, toolbar: :full, lines: 10 %>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div class="button--double form-general-submit">
|
25
|
+
<%= form.submit t(".update") %>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
@@ -0,0 +1,57 @@
|
|
1
|
+
<div class="card">
|
2
|
+
<div class="card-divider">
|
3
|
+
<h2 class="card-title">
|
4
|
+
<%= t(".title") %>
|
5
|
+
<div class="button--title">
|
6
|
+
<% if can? :create, Decidim::Sortitions::Sortition %>
|
7
|
+
<%= link_to t("actions.new", scope: "decidim.sortitions.admin", name: t("models.sortition.name", scope: "decidim.sortitions.admin")), new_sortition_path, class: 'button tiny button--simple' if can? :manage, current_feature %>
|
8
|
+
<% end %>
|
9
|
+
</div>
|
10
|
+
</h2>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div class="card-section">
|
14
|
+
<div class="table-scroll">
|
15
|
+
<table class="table-list">
|
16
|
+
<thead>
|
17
|
+
<tr>
|
18
|
+
<th><%= t("models.sortition.fields.reference", scope: "decidim.sortitions.admin") %></th>
|
19
|
+
<th><%= t("models.sortition.fields.title", scope: "decidim.sortitions.admin") %></th>
|
20
|
+
<th><%= t("models.sortition.fields.created_at", scope: "decidim.sortitions.admin") %></th>
|
21
|
+
<th class="actions"></th>
|
22
|
+
</tr>
|
23
|
+
</thead>
|
24
|
+
<tbody>
|
25
|
+
<% sortitions.each do |sortition| %>
|
26
|
+
<tr>
|
27
|
+
<td><%= sortition.reference %></td>
|
28
|
+
<td><%= translated_attribute sortition.title %></td>
|
29
|
+
<td><%=l sortition.created_at, format: :short %></td>
|
30
|
+
<td class="table-list__actions">
|
31
|
+
<%= icon_link_to "eye",
|
32
|
+
sortition_path(sortition),
|
33
|
+
t("actions.show", scope: "decidim.sortitions.admin"),
|
34
|
+
class: "action-icon--preview" %>
|
35
|
+
|
36
|
+
<% if can? :destroy, sortition %>
|
37
|
+
<%= icon_link_to "pencil",
|
38
|
+
edit_sortition_path(sortition),
|
39
|
+
t("actions.edit", scope: "decidim.sortitions.admin"),
|
40
|
+
class: "action-icon--edit" %>
|
41
|
+
<% end %>
|
42
|
+
|
43
|
+
<% if can? :destroy, sortition %>
|
44
|
+
<%= icon_link_to "circle-x",
|
45
|
+
confirm_destroy_sortition_path(sortition),
|
46
|
+
t("actions.destroy", scope: "decidim.sortitions.admin"),
|
47
|
+
class: "action-icon--remove" %>
|
48
|
+
<% end %>
|
49
|
+
</td>
|
50
|
+
</tr>
|
51
|
+
<% end %>
|
52
|
+
</tbody>
|
53
|
+
</table>
|
54
|
+
<%= paginate sortitions, theme: "decidim" %>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
</div>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<h2 class="process-title-summary">
|
2
|
+
<%=t ".title" %>
|
3
|
+
</h2>
|
4
|
+
|
5
|
+
<%= decidim_form_for(@form, html: { class: "form new_sortition" }) do |f| %>
|
6
|
+
<%= render partial: "form", object: f %>
|
7
|
+
|
8
|
+
<div class="button--double form-general-submit">
|
9
|
+
<%= f.submit t(".create"), data: { confirm: t(".confirm") } %>
|
10
|
+
</div>
|
11
|
+
<% end %>
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<div class="card" id="sortition">
|
2
|
+
<div class="card-divider">
|
3
|
+
<h2 class="card-title">
|
4
|
+
<%= translated_attribute(sortition.title) %>
|
5
|
+
</h2>
|
6
|
+
</div>
|
7
|
+
<div class="card-section">
|
8
|
+
<div class="table-scroll">
|
9
|
+
<table class="table-list sortition">
|
10
|
+
<thead>
|
11
|
+
<tr>
|
12
|
+
<th><%= t("models.sortition.fields.request_timestamp", scope: "decidim.sortitions.admin") %></th>
|
13
|
+
<th><%= t("models.sortition.fields.dice", scope: "decidim.sortitions.admin") %></th>
|
14
|
+
<th><%= t("models.sortition.fields.target_items", scope: "decidim.sortitions.admin") %></th>
|
15
|
+
<th><%= t("models.sortition.fields.category", scope: "decidim.sortitions.admin") %></th>
|
16
|
+
<th><%= t("models.sortition.fields.decidim_proposals_feature", scope: "decidim.sortitions.admin") %></th>
|
17
|
+
<th><%= t("models.sortition.fields.seed", scope: "decidim.sortitions.admin") %></th>
|
18
|
+
<th></th>
|
19
|
+
</tr>
|
20
|
+
</thead>
|
21
|
+
<tbody>
|
22
|
+
<tr>
|
23
|
+
<td><%=l sortition.request_timestamp, format: :long %></td>
|
24
|
+
<td><%= sortition.dice %></td>
|
25
|
+
<td><%= sortition.target_items %></td>
|
26
|
+
<td><%= sortition_category sortition %></td>
|
27
|
+
<td><%= translated_attribute sortition.decidim_proposals_feature.name %></td>
|
28
|
+
<td><%= sortition.seed %></td>
|
29
|
+
<td></td>
|
30
|
+
</tr>
|
31
|
+
</tbody>
|
32
|
+
</table>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
<div class="card-section">
|
36
|
+
<div class="table-scroll">
|
37
|
+
<table class="table-list proposals">
|
38
|
+
<thead>
|
39
|
+
<tr>
|
40
|
+
<th><%=t ".selected_proposals" %></th>
|
41
|
+
<th></th>
|
42
|
+
</tr>
|
43
|
+
</thead>
|
44
|
+
<tbody>
|
45
|
+
<% sortition.proposals.each do |proposal| %>
|
46
|
+
<tr>
|
47
|
+
<td><%= proposal.title %></td>
|
48
|
+
<td></td>
|
49
|
+
</tr>
|
50
|
+
<% end %>
|
51
|
+
</tbody>
|
52
|
+
</table>
|
53
|
+
</div>
|
54
|
+
</div>
|
55
|
+
</div>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= t(".proposals_count", count: proposals.count) %>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<%= filter_form_for filter do |form| %>
|
2
|
+
<div class="filters__section">
|
3
|
+
<div class="filters__search">
|
4
|
+
<div class="input-group">
|
5
|
+
<%= form.search_field :search_text, label: false, class: "input-group-field", placeholder: t('.search') %>
|
6
|
+
<div class="input-group-button">
|
7
|
+
<button type="submit" class="button button--muted">
|
8
|
+
<%= icon "magnifying-glass", aria_label: t('.search') %>
|
9
|
+
</button>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<% if current_participatory_space.categories.any? %>
|
16
|
+
<%= form.categories_select :category_id,
|
17
|
+
current_participatory_space.categories,
|
18
|
+
legend_title: t('.category'),
|
19
|
+
disable_parents: false,
|
20
|
+
label: false,
|
21
|
+
prompt: t('.category_prompt') %>
|
22
|
+
<% end %>
|
23
|
+
|
24
|
+
<%= form.collection_radio_buttons :state,
|
25
|
+
[["all", t('.all')], ["active", t('.active')], ["cancelled", t(".cancelled")]],
|
26
|
+
:first,
|
27
|
+
:last,
|
28
|
+
legend_title: t('.state') %>
|
29
|
+
|
30
|
+
<%= hidden_field_tag :order, order, id: nil, class: "order_filter" %>
|
31
|
+
<% end %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<div class="filters-controls hide-for-mediumlarge">
|
2
|
+
<button data-open="filter-box" class="filters-controls__trigger">
|
3
|
+
<%= t ".filter" %>
|
4
|
+
<%= icon "caret-bottom", class: "icon--small float-right", aria_label: t('.unfold'), role: "img" %>
|
5
|
+
</button>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
<div class="reveal" id="filter-box" data-reveal>
|
9
|
+
<div class="reveal__header">
|
10
|
+
<h3 class="reveal__title"><%= t ".filter_by" %>:</h3>
|
11
|
+
<button class="close-button" data-close aria-label="<%= t(".close_modal") %>" type="button">
|
12
|
+
<span aria-hidden="true">×</span>
|
13
|
+
</button>
|
14
|
+
</div>
|
15
|
+
<div class="filters">
|
16
|
+
<%= render partial: "filters" %>
|
17
|
+
</div>
|
18
|
+
</div>
|