decidim-budgets 0.19.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/images/decidim/budgets/icon.svg +1 -11
- data/app/assets/javascripts/decidim/budgets/projects.js.es6 +26 -4
- data/app/assets/stylesheets/decidim/budgets/budget/_budget-list.scss +147 -24
- data/app/cells/decidim/budgets/project_list_item/project_data.erb +5 -0
- data/app/cells/decidim/budgets/project_list_item/project_data_number.erb +3 -0
- data/app/cells/decidim/budgets/project_list_item/project_data_vote_button.erb +15 -0
- data/app/cells/decidim/budgets/project_list_item/project_data_votes.erb +7 -0
- data/app/cells/decidim/budgets/project_list_item/project_image.erb +5 -0
- data/app/cells/decidim/budgets/project_list_item/project_text.erb +17 -0
- data/app/cells/decidim/budgets/project_list_item/show.erb +5 -0
- data/app/cells/decidim/budgets/project_list_item_cell.rb +86 -0
- data/app/cells/decidim/budgets/project_m/data.erb +2 -2
- data/app/cells/decidim/budgets/project_m/footer.erb +1 -1
- data/app/commands/decidim/budgets/admin/create_project.rb +19 -9
- data/app/commands/decidim/budgets/admin/update_project.rb +12 -1
- data/app/commands/decidim/budgets/checkout.rb +2 -1
- data/app/controllers/concerns/decidim/budgets/needs_current_order.rb +5 -1
- data/app/controllers/concerns/decidim/budgets/orderable.rb +61 -0
- data/app/controllers/decidim/budgets/admin/projects_controller.rb +8 -5
- data/app/controllers/decidim/budgets/line_items_controller.rb +1 -1
- data/app/controllers/decidim/budgets/projects_controller.rb +23 -3
- data/app/forms/decidim/budgets/admin/component_form.rb +44 -0
- data/app/forms/decidim/budgets/admin/project_form.rb +14 -2
- data/app/helpers/decidim/budgets/application_helper.rb +1 -0
- data/app/helpers/decidim/budgets/projects_helper.rb +17 -0
- data/app/jobs/decidim/budgets/send_order_summary_job.rb +15 -0
- data/app/mailers/decidim/budgets/order_summary_mailer.rb +34 -0
- data/app/models/decidim/budgets/order.rb +28 -1
- data/app/models/decidim/budgets/project.rb +13 -0
- data/app/services/decidim/budgets/project_search.rb +8 -0
- data/app/types/decidim/budgets/budgets_type.rb +32 -0
- data/app/types/decidim/budgets/project_type.rb +25 -0
- data/app/views/decidim/budgets/admin/projects/_form.html.erb +3 -6
- data/app/views/decidim/budgets/admin/projects/proposals_picker.html.erb +1 -0
- data/app/views/decidim/budgets/order_summary_mailer/order_summary.html.erb +21 -0
- data/app/views/decidim/budgets/projects/_budget_confirm.html.erb +1 -1
- data/app/views/decidim/budgets/projects/_budget_summary.html.erb +8 -2
- data/app/views/decidim/budgets/projects/_filters.html.erb +10 -6
- data/app/views/decidim/budgets/projects/_linked_projects.html.erb +1 -1
- data/app/views/decidim/budgets/projects/_order_progress.html.erb +8 -16
- data/app/views/decidim/budgets/projects/_project.html.erb +1 -57
- data/app/views/decidim/budgets/projects/_project_budget_button.html.erb +3 -3
- data/app/views/decidim/budgets/projects/_projects.html.erb +8 -1
- data/app/views/decidim/budgets/projects/index.html.erb +3 -3
- data/app/views/decidim/budgets/projects/index.js.erb +8 -0
- data/app/views/decidim/budgets/projects/show.html.erb +1 -1
- data/config/locales/ar.yml +1 -6
- data/config/locales/bg-BG.yml +7 -0
- data/config/locales/ca.yml +27 -5
- data/config/locales/cs.yml +44 -22
- data/config/locales/da-DK.yml +1 -0
- data/config/locales/de.yml +27 -5
- data/config/locales/el-GR.yml +1 -0
- data/config/locales/el.yml +175 -0
- data/config/locales/en.yml +27 -5
- data/config/locales/es-MX.yml +27 -5
- data/config/locales/es-PY.yml +27 -5
- data/config/locales/es.yml +27 -5
- data/config/locales/et-EE.yml +1 -0
- data/config/locales/eu.yml +1 -6
- data/config/locales/fi-plain.yml +27 -5
- data/config/locales/fi.yml +40 -18
- data/config/locales/fr-CA.yml +175 -0
- data/config/locales/fr.yml +27 -5
- data/config/locales/ga-IE.yml +1 -0
- data/config/locales/gl.yml +1 -6
- data/config/locales/hr-HR.yml +1 -0
- data/config/locales/hu.yml +17 -6
- data/config/locales/id-ID.yml +1 -6
- data/config/locales/is-IS.yml +114 -0
- data/config/locales/it.yml +28 -6
- data/config/locales/ja-JP.yml +171 -0
- data/config/locales/lt-LT.yml +1 -0
- data/config/locales/lv-LV.yml +172 -0
- data/config/locales/mt-MT.yml +1 -0
- data/config/locales/nl.yml +32 -10
- data/config/locales/no.yml +160 -0
- data/config/locales/pl.yml +74 -52
- data/config/locales/pt-BR.yml +2 -7
- data/config/locales/pt.yml +64 -42
- data/config/locales/ro-RO.yml +179 -0
- data/config/locales/ru.yml +1 -6
- data/config/locales/sk-SK.yml +180 -0
- data/config/locales/sk.yml +175 -0
- data/config/locales/sl.yml +5 -0
- data/config/locales/sr-CS.yml +29 -0
- data/config/locales/sv.yml +27 -5
- data/config/locales/tr-TR.yml +1 -6
- data/config/locales/uk.yml +1 -6
- data/lib/decidim/budgets/admin_engine.rb +2 -0
- data/lib/decidim/budgets/component.rb +12 -0
- data/lib/decidim/budgets/seeds/city.jpeg +0 -0
- data/lib/decidim/budgets/test/factories.rb +33 -0
- data/lib/decidim/budgets/version.rb +1 -1
- metadata +55 -15
|
@@ -17,11 +17,24 @@ module Decidim
|
|
|
17
17
|
include Decidim::Traceable
|
|
18
18
|
include Decidim::Loggable
|
|
19
19
|
include Decidim::Randomable
|
|
20
|
+
include Decidim::Searchable
|
|
20
21
|
|
|
21
22
|
component_manifest_name "budgets"
|
|
22
23
|
has_many :line_items, class_name: "Decidim::Budgets::LineItem", foreign_key: "decidim_project_id", dependent: :destroy
|
|
23
24
|
has_many :orders, through: :line_items, foreign_key: "decidim_project_id", class_name: "Decidim::Budgets::Order"
|
|
24
25
|
|
|
26
|
+
searchable_fields(
|
|
27
|
+
scope_id: :decidim_scope_id,
|
|
28
|
+
participatory_space: { component: :participatory_space },
|
|
29
|
+
A: :title,
|
|
30
|
+
D: :description,
|
|
31
|
+
datetime: :created_at
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
def self.ordered_ids(ids)
|
|
35
|
+
order(Arel.sql("position(id::text in '#{ids.join(",")}')"))
|
|
36
|
+
end
|
|
37
|
+
|
|
25
38
|
def self.log_presenter_class_for(_log)
|
|
26
39
|
Decidim::Budgets::AdminLog::ProjectPresenter
|
|
27
40
|
end
|
|
@@ -19,6 +19,14 @@ module Decidim
|
|
|
19
19
|
.or(query.where(localized_search_text_in(:description), text: "%#{search_text}%"))
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
def search_category_id
|
|
23
|
+
super
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def search_scope_id
|
|
27
|
+
super
|
|
28
|
+
end
|
|
29
|
+
|
|
22
30
|
# Returns the random projects for the current page.
|
|
23
31
|
def results
|
|
24
32
|
Project.where(id: super.pluck(:id))
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module Budgets
|
|
5
|
+
BudgetsType = GraphQL::ObjectType.define do
|
|
6
|
+
interfaces [-> { Decidim::Core::ComponentInterface }]
|
|
7
|
+
|
|
8
|
+
name "Budgets"
|
|
9
|
+
description "A budget component of a participatory space."
|
|
10
|
+
|
|
11
|
+
connection :projects, ProjectType.connection_type do
|
|
12
|
+
resolve ->(component, _args, _ctx) {
|
|
13
|
+
ProjectTypeHelper.base_scope(component).includes(:component)
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
field(:project, ProjectType) do
|
|
18
|
+
argument :id, !types.ID
|
|
19
|
+
|
|
20
|
+
resolve ->(component, args, _ctx) {
|
|
21
|
+
ProjectTypeHelper.base_scope(component).find_by(id: args[:id])
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
module ProjectTypeHelper
|
|
27
|
+
def self.base_scope(component)
|
|
28
|
+
Project.where(component: component)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module Budgets
|
|
5
|
+
ProjectType = GraphQL::ObjectType.define do
|
|
6
|
+
interfaces [
|
|
7
|
+
-> { Decidim::Core::ScopableInterface },
|
|
8
|
+
-> { Decidim::Core::AttachableInterface },
|
|
9
|
+
-> { Decidim::Comments::CommentableInterface },
|
|
10
|
+
-> { Decidim::Core::CategorizableInterface }
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
name "Project"
|
|
14
|
+
description "A project"
|
|
15
|
+
|
|
16
|
+
field :id, !types.ID, "The internal ID for this project"
|
|
17
|
+
field :title, Decidim::Core::TranslatedFieldType, "The title for this project"
|
|
18
|
+
field :description, Decidim::Core::TranslatedFieldType, "The description for this project"
|
|
19
|
+
field :budget, types.Int, "The budget for this project"
|
|
20
|
+
field :createdAt, Decidim::Core::DateTimeType, "When this project was created", property: :created_at
|
|
21
|
+
field :updatedAt, Decidim::Core::DateTimeType, "When this project was updated", property: :updated_at
|
|
22
|
+
field :reference, types.String, "The reference for this project"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -27,12 +27,9 @@
|
|
|
27
27
|
</div>
|
|
28
28
|
|
|
29
29
|
<div class="row column">
|
|
30
|
-
|
|
31
|
-
<%= form.select :proposal_ids,
|
|
32
|
-
@form.proposals,
|
|
33
|
-
{},
|
|
34
|
-
{ multiple: true, class: "chosen-select" } %>
|
|
35
|
-
<% end %>
|
|
30
|
+
<%= proposals_picker(form, :proposals, proposals_picker_projects_path) %>
|
|
36
31
|
</div>
|
|
32
|
+
|
|
33
|
+
<%= render partial: "decidim/admin/shared/gallery", locals: { form: form } %>
|
|
37
34
|
</div>
|
|
38
35
|
</div>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= cell "decidim/proposals/proposals_picker", current_component %>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<% if @component.try(:scopes_enabled) %>
|
|
2
|
+
<%= t(
|
|
3
|
+
".voted_on_space_with_scope",
|
|
4
|
+
space_name: translated_attribute(@space.title),
|
|
5
|
+
scope_name: translated_attribute(@component.scope.name),
|
|
6
|
+
scope_type: translated_attribute(@component.scope.scope_type.name)
|
|
7
|
+
) %>
|
|
8
|
+
<% else %>
|
|
9
|
+
<%= t(
|
|
10
|
+
".voted_on_space",
|
|
11
|
+
space_name: translated_attribute(@space.title)
|
|
12
|
+
) %>
|
|
13
|
+
<% end %>
|
|
14
|
+
|
|
15
|
+
<p><%= t(".selected_projects") %></p>
|
|
16
|
+
|
|
17
|
+
<ul>
|
|
18
|
+
<% @order.projects.each do |project| %>
|
|
19
|
+
<li><%= translated_attribute(project.title) %></li>
|
|
20
|
+
<% end %>
|
|
21
|
+
</ul>
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
<p class="text-center"><%= t(".are_you_sure") %></p>
|
|
23
23
|
<div class="row">
|
|
24
24
|
<div class="columns medium-8 medium-offset-2">
|
|
25
|
-
<%= button_to t(".confirm"), checkout_order_path, class: "button expanded", data: { disable: true } %>
|
|
25
|
+
<%= button_to t(".confirm"), "#{checkout_order_path}#content", class: "button expanded", data: { disable: true } %>
|
|
26
26
|
</div>
|
|
27
27
|
</div>
|
|
28
28
|
<div class="text-center">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<div class="card budget-summary" data-progress-reference>
|
|
1
|
+
<div class="card budget-summary" data-progress-reference data-safe-url="<%= projects_base_url %>">
|
|
2
2
|
<div class="card__content">
|
|
3
3
|
<% if include_heading %>
|
|
4
4
|
<% if current_order_checked_out? %>
|
|
@@ -8,7 +8,13 @@
|
|
|
8
8
|
</p>
|
|
9
9
|
<% else %>
|
|
10
10
|
<h3 class="heading3"><%= t(".title") %></h3>
|
|
11
|
-
<p
|
|
11
|
+
<p>
|
|
12
|
+
<% if current_order.minimum_projects_rule? %>
|
|
13
|
+
<%= t(".description_minimum_projects_rule", minimum_number: current_order.minimum_projects) %>
|
|
14
|
+
<% else %>
|
|
15
|
+
<%= t(".description", minimum_budget: budget_to_currency(current_order.minimum_budget)) %>
|
|
16
|
+
<% end %>
|
|
17
|
+
</p>
|
|
12
18
|
<% end %>
|
|
13
19
|
<% end %>
|
|
14
20
|
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
<%= render partial: "decidim/shared/filter_form_help", locals: { skip_to_id: "projects" } %>
|
|
2
|
+
|
|
1
3
|
<%= filter_form_for filter do |form| %>
|
|
2
4
|
<div class="filters__section">
|
|
3
5
|
<div class="filters__search">
|
|
4
6
|
<div class="input-group">
|
|
5
|
-
<%= form.search_field :search_text, label: false, class: "input-group-field", placeholder: t(".search") %>
|
|
7
|
+
<%= form.search_field :search_text, label: false, class: "input-group-field", placeholder: t(".search"), title: t(".search"), data: { disable_dynamic_change: true } %>
|
|
6
8
|
<div class="input-group-button">
|
|
7
|
-
<button type="submit" class="button
|
|
8
|
-
<%= icon "magnifying-glass", aria_label: t(".search") %>
|
|
9
|
+
<button type="submit" class="button" aria-controls="projects">
|
|
10
|
+
<%= icon "magnifying-glass", aria_label: t(".search"), role: "img", "aria-hidden": true %>
|
|
9
11
|
</button>
|
|
10
12
|
</div>
|
|
11
13
|
</div>
|
|
@@ -13,10 +15,12 @@
|
|
|
13
15
|
</div>
|
|
14
16
|
|
|
15
17
|
<% if current_participatory_space.has_subscopes? %>
|
|
16
|
-
<%=
|
|
18
|
+
<%= form.check_boxes_tree :scope_id, filter_scopes_values, legend_title: t(".scope"), "aria-controls": "projects" %>
|
|
17
19
|
<% end %>
|
|
18
20
|
|
|
19
|
-
<% if
|
|
20
|
-
<%= form.
|
|
21
|
+
<% if current_participatory_space.categories.any? %>
|
|
22
|
+
<%= form.check_boxes_tree :category_id, filter_categories_values, legend_title: t(".category"), "aria-controls": "projects" %>
|
|
21
23
|
<% end %>
|
|
24
|
+
|
|
25
|
+
<%= hidden_field_tag :order, order, id: nil, class: "order_filter" %>
|
|
22
26
|
<% end %>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<div class="card card--action card--list">
|
|
2
2
|
<% resources.each do |project| %>
|
|
3
3
|
<div class="card--list__item">
|
|
4
|
-
<%= icon "actions", class: "card--list__icon", remove_icon_class: true %>
|
|
4
|
+
<%= icon "actions", class: "card--list__icon", role: "img", "aria-hidden": true, remove_icon_class: true %>
|
|
5
5
|
<%= link_to resource_locator(project).path, class: "card--list__text card__link card__link--block" do %>
|
|
6
6
|
<h5 class="card--list__heading">
|
|
7
7
|
<%= translated_attribute(project.title) %>
|
|
@@ -1,35 +1,27 @@
|
|
|
1
1
|
<div id="order-progress">
|
|
2
2
|
<div class="budget-summary__progressbox" data-current-budget="<%= current_order ? current_order.total_budget : 0 %>">
|
|
3
|
-
<div class="progress budget-progress" role="progressbar"
|
|
4
|
-
<div class="progress-meter progress-meter--minimum" style="width: <%=
|
|
3
|
+
<div class="progress budget-progress" role="progressbar" aria-valuenow="<%= current_order_budget_percent %>" aria-valuetext="<%= current_order_budget_percent %>%" aria-valuemin="0" aria-valuemax="100">
|
|
4
|
+
<div class="progress-meter progress-meter--minimum" style="width: <%= component_settings.vote_threshold_percent %>%"></div>
|
|
5
5
|
<!--Change width and text dynamically.-->
|
|
6
6
|
<div class="progress-meter budget-progress__meter" style="width: <%= current_order_budget_percent %>%">
|
|
7
|
-
<
|
|
7
|
+
<span class="progress-meter-text progress-meter-text--right"><%= current_order_budget_percent %>%</span>
|
|
8
8
|
</div>
|
|
9
9
|
</div>
|
|
10
10
|
<% unless current_order_checked_out? %>
|
|
11
|
-
|
|
12
|
-
<button class="button small button--sc" data-toggle="budget-confirm"><%= t(".vote") %></button>
|
|
13
|
-
<% else %>
|
|
14
|
-
<button class="button small button--sc" data-toggle="budget-confirm" disabled><%= t(".vote") %></button>
|
|
15
|
-
<% end %>
|
|
11
|
+
<button class="button small button--sc" data-toggle="budget-confirm" <%= budget_confirm_disabled_attr %>><%= t(".vote") %></button>
|
|
16
12
|
<% end %>
|
|
17
13
|
</div>
|
|
18
14
|
|
|
19
15
|
<div class="progressbox-fixed-wrapper" data-progressbox-fixed>
|
|
20
16
|
<div class="budget-summary__progressbox budget-summary__progressbox--fixed">
|
|
21
|
-
<div class="progress budget-progress budget-progress--fixed" role="progressbar"
|
|
22
|
-
<div class="progress-meter progress-meter--minimum" style="width: <%=
|
|
17
|
+
<div class="progress budget-progress budget-progress--fixed" role="progressbar" aria-valuenow="<%= current_order_budget_percent %>" aria-valuetext="<%= current_order_budget_percent %>%" aria-valuemin="0" aria-valuemax="100">
|
|
18
|
+
<div class="progress-meter progress-meter--minimum" style="width: <%= component_settings.vote_threshold_percent %>%"></div>
|
|
23
19
|
<div class="progress-meter budget-progress__meter" style="width: <%= current_order_budget_percent %>%">
|
|
24
|
-
<
|
|
20
|
+
<span class="progress-meter-text progress-meter-text--right"><%= current_order_budget_percent %>%</span>
|
|
25
21
|
</div>
|
|
26
22
|
</div>
|
|
27
23
|
<% unless current_order_checked_out? %>
|
|
28
|
-
|
|
29
|
-
<button class="button small button--sc" data-toggle="budget-confirm"><%= t(".vote") %></button>
|
|
30
|
-
<% else %>
|
|
31
|
-
<button class="button small button--sc" data-toggle="budget-confirm" disabled><%= t(".vote") %></button>
|
|
32
|
-
<% end %>
|
|
24
|
+
<button class="button small button--sc" data-toggle="budget-confirm" <%= budget_confirm_disabled_attr %>><%= t(".vote") %></button>
|
|
33
25
|
<% end %>
|
|
34
26
|
</div>
|
|
35
27
|
</div>
|
|
@@ -1,57 +1 @@
|
|
|
1
|
-
|
|
2
|
-
<div class="card--list__text">
|
|
3
|
-
<div>
|
|
4
|
-
<%= link_to project, class: "card__link" do %>
|
|
5
|
-
<h5 class="card__title budget-list__title">
|
|
6
|
-
<%= translated_attribute project.title %>
|
|
7
|
-
</h5>
|
|
8
|
-
<% end %>
|
|
9
|
-
<%= cell "decidim/tags", project, context: { extra_classes: ["tags--project"] } %>
|
|
10
|
-
</div>
|
|
11
|
-
</div>
|
|
12
|
-
<% if current_user.present? %>
|
|
13
|
-
<% if current_order && current_order.projects.include?(project) %>
|
|
14
|
-
<div class="card--list__data budget-list__data budget-list__data--added">
|
|
15
|
-
<span class="card--list__data__number budget-list__number">
|
|
16
|
-
<%= budget_to_currency(project.budget) %>
|
|
17
|
-
</span>
|
|
18
|
-
<%= action_authorized_button_to "vote", order_line_item_path(project_id: project), method: :delete, remote: true, data: { disable: true, budget: project.budget, "redirect-url": project_path(project) }, disabled: !current_settings.votes_enabled? || current_order_checked_out? || !current_participatory_space.can_participate?(current_user), class: "button tiny budget--list__action success" do %>
|
|
19
|
-
<%= icon("check", class: "icon--small", aria_label: t(".remove"), role: "img") %>
|
|
20
|
-
<% end %>
|
|
21
|
-
<% if current_settings.show_votes? %>
|
|
22
|
-
<div class="card__support" style="width: 7em">
|
|
23
|
-
<span><%= t(".count", count: project.confirmed_orders_count) %></span>
|
|
24
|
-
</div>
|
|
25
|
-
<% end %>
|
|
26
|
-
</div>
|
|
27
|
-
<% else %>
|
|
28
|
-
<div class="card--list__data budget-list__data">
|
|
29
|
-
<span class="card--list__data__number budget-list__number">
|
|
30
|
-
<%= budget_to_currency(project.budget) %>
|
|
31
|
-
</span>
|
|
32
|
-
<%= action_authorized_button_to "vote", order_line_item_path(project_id: project), method: :post, remote: true, data: { disable: true, budget: project.budget, add: true, "redirect-url": project_path(project) }, disabled: !current_settings.votes_enabled? || current_order_checked_out? || !current_participatory_space.can_participate?(current_user), class: "button tiny hollow budget--list__action" do %>
|
|
33
|
-
<%= icon("check", class: "icon--small", aria_label: t(".add"), role: "img") %>
|
|
34
|
-
<% end %>
|
|
35
|
-
<% if current_settings.show_votes? %>
|
|
36
|
-
<div class="card__support" style="width: 7em">
|
|
37
|
-
<span><%= t(".count", count: project.confirmed_orders_count) %></span>
|
|
38
|
-
</div>
|
|
39
|
-
<% end %>
|
|
40
|
-
</div>
|
|
41
|
-
<% end %>
|
|
42
|
-
<% else %>
|
|
43
|
-
<div class="card--list__data budget-list__data">
|
|
44
|
-
<span class="card--list__data__number budget-list__number">
|
|
45
|
-
<%= budget_to_currency(project.budget) %>
|
|
46
|
-
</span>
|
|
47
|
-
<a href="#" class="button tiny hollow budget--list__action disabled" data-toggle="loginModal">
|
|
48
|
-
<%= icon("check", class: "icon--small", aria_label: t(".add"), role: "img") %>
|
|
49
|
-
</a>
|
|
50
|
-
<% if current_settings.show_votes? %>
|
|
51
|
-
<div class="card__support" style="width: 7em">
|
|
52
|
-
<span><%= t(".count", count: project.confirmed_orders_count) %></span>
|
|
53
|
-
</div>
|
|
54
|
-
<% end %>
|
|
55
|
-
</div>
|
|
56
|
-
<% end %>
|
|
57
|
-
</div>
|
|
1
|
+
<%= cell "decidim/budgets/project_list_item", project %>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<div id="project-<%= project.id %>-budget-button">
|
|
2
2
|
<% if current_user.present? %>
|
|
3
3
|
<% if current_order && current_order.projects.include?(project) %>
|
|
4
|
-
<%= action_authorized_button_to "vote", t(".added"), order_line_item_path(project_id: project), method: :delete, remote: true, data: { disable: true, budget: project.budget, "redirect-url": project_path(project) }, disabled: !current_settings.votes_enabled? || current_order_checked_out? || !current_participatory_space.can_participate?(current_user), class: "button expanded button--sc
|
|
4
|
+
<%= action_authorized_button_to "vote", t(".added"), order_line_item_path(project_id: project), method: :delete, remote: true, data: { disable: true, budget: project.budget, "redirect-url": project_path(project) }, disabled: !current_settings.votes_enabled? || current_order_checked_out? || !current_participatory_space.can_participate?(current_user), class: "button expanded button--sc active budget--list__action", "aria-label": t(".added_descriptive", resource_name: translated_attribute(project.title)) %>
|
|
5
5
|
<% else %>
|
|
6
|
-
<%= action_authorized_button_to "vote", t(".add"), order_line_item_path(project_id: project), method: :post, remote: true, data: { disable: true, budget: project.budget, add: true, "redirect-url": project_path(project) }, disabled: !current_settings.votes_enabled? || current_order_checked_out? || !current_participatory_space.can_participate?(current_user), class: "button expanded button--sc budget--list__action" %>
|
|
6
|
+
<%= action_authorized_button_to "vote", t(".add"), order_line_item_path(project_id: project), method: :post, remote: true, data: { disable: true, budget: project.budget, add: true, "redirect-url": project_path(project) }, disabled: !current_settings.votes_enabled? || current_order_checked_out? || !current_participatory_space.can_participate?(current_user), class: "button expanded button--sc budget--list__action", "aria-label": t(".add_descriptive", resource_name: translated_attribute(project.title)) %>
|
|
7
7
|
<% end %>
|
|
8
8
|
<% else %>
|
|
9
|
-
<button class="button expanded button--sc disabled" data-toggle="loginModal"><%= t(".add") %></button>
|
|
9
|
+
<button class="button expanded button--sc disabled" data-toggle="loginModal" aria-label="<%= t(".add_descriptive", resource_name: translated_attribute(project.title)) %>"><%= t(".add") %></button>
|
|
10
10
|
<% end %>
|
|
11
11
|
</div>
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
<div class="
|
|
1
|
+
<div class="collection-sort-controls row small-up-1 medium-up-3 card-grid">
|
|
2
|
+
<div class="column">
|
|
3
|
+
<%= order_selector available_orders, i18n_scope: "decidim.budgets.projects.orders" %>
|
|
4
|
+
</div>
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
<div class="budget-list">
|
|
2
8
|
<% projects.each do |project| %>
|
|
3
9
|
<%= render partial: "project", locals: { project: project } %>
|
|
4
10
|
<% end %>
|
|
5
11
|
</div>
|
|
12
|
+
|
|
6
13
|
<%= decidim_paginate projects %>
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
</div>
|
|
7
7
|
<% end %>
|
|
8
8
|
<div class="row columns">
|
|
9
|
-
<
|
|
9
|
+
<h3 class="section-heading">
|
|
10
10
|
<%= render partial: "count" %>
|
|
11
|
-
</
|
|
11
|
+
</h3>
|
|
12
12
|
</div>
|
|
13
13
|
<div class="row">
|
|
14
14
|
<div class="columns mediumlarge-4 large-3">
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<%= render partial: "filters" %>
|
|
18
18
|
</div>
|
|
19
19
|
</div>
|
|
20
|
-
<div id="projects" class="columns mediumlarge-8 large-9">
|
|
20
|
+
<div id="projects" class="columns mediumlarge-8 large-9" aria-live="polite">
|
|
21
21
|
<%= render partial: "projects" %>
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
|
@@ -1,2 +1,10 @@
|
|
|
1
1
|
var $projects = $('#projects');
|
|
2
|
+
var $projectsCount = $('#projects-count');
|
|
3
|
+
var $orderFilterInput = $('.order_filter');
|
|
4
|
+
|
|
2
5
|
$projects.html('<%= j(render partial: "projects").strip.html_safe %>');
|
|
6
|
+
$projectsCount.html('<%= j(render partial: "count").strip.html_safe %>');
|
|
7
|
+
$orderFilterInput.val('<%= order %>');
|
|
8
|
+
|
|
9
|
+
var $dropdownMenu = $('.dropdown.menu', $projects);
|
|
10
|
+
$dropdownMenu.foundation();
|
|
@@ -17,7 +17,7 @@ edit_link(
|
|
|
17
17
|
<%= render partial: "budget_summary", locals: { include_heading: false } %>
|
|
18
18
|
<% end %>
|
|
19
19
|
<%= link_to projects_path, class: "muted-link" do %>
|
|
20
|
-
<%= icon "chevron-left", class: "icon--small" %>
|
|
20
|
+
<%= icon "chevron-left", class: "icon--small", role: "img", "aria-hidden": true %>
|
|
21
21
|
<%= t(".view_all_projects") %>
|
|
22
22
|
<% end %>
|
|
23
23
|
<h2 class="heading2"><%= translated_attribute project.title %></h2>
|
data/config/locales/ar.yml
CHANGED
|
@@ -100,7 +100,7 @@ ar:
|
|
|
100
100
|
other: "%{count} مشاريع"
|
|
101
101
|
filters:
|
|
102
102
|
category: الفئة
|
|
103
|
-
|
|
103
|
+
scope: نطاق
|
|
104
104
|
search: بحث
|
|
105
105
|
filters_small_view:
|
|
106
106
|
close_modal: إغلاق مشروط
|
|
@@ -120,7 +120,6 @@ ar:
|
|
|
120
120
|
other: المشاريع المختارة
|
|
121
121
|
view: رأي
|
|
122
122
|
project:
|
|
123
|
-
add: إضافة
|
|
124
123
|
count:
|
|
125
124
|
zero: "%{count} يدعم"
|
|
126
125
|
one: 1 الدعم
|
|
@@ -128,11 +127,7 @@ ar:
|
|
|
128
127
|
few: "%{count} يدعم"
|
|
129
128
|
many: "%{count} يدعم"
|
|
130
129
|
other: "%{count} يدعم"
|
|
131
|
-
remove: إزالة
|
|
132
130
|
view: رأي
|
|
133
|
-
project_budget_button:
|
|
134
|
-
add: إضافة
|
|
135
|
-
added: وأضاف
|
|
136
131
|
show:
|
|
137
132
|
budget: ميزانية
|
|
138
133
|
view_all_projects: عرض جميع المشاريع
|
data/config/locales/ca.yml
CHANGED
|
@@ -65,6 +65,12 @@ ca:
|
|
|
65
65
|
project:
|
|
66
66
|
fields:
|
|
67
67
|
title: Títol
|
|
68
|
+
order_summary_mailer:
|
|
69
|
+
order_summary:
|
|
70
|
+
selected_projects: 'Els projectes que has seleccionat són:'
|
|
71
|
+
subject: Has votat a l'espai de participació %{space_name}
|
|
72
|
+
voted_on_space: Has votat en el pressupost de l'espai de participació %{space_name}.
|
|
73
|
+
voted_on_space_with_scope: Has votat en el pressupost de l'espai de participació %{space_name} a %{scope_name} (%{scope_type}).
|
|
68
74
|
projects:
|
|
69
75
|
budget_confirm:
|
|
70
76
|
are_you_sure: Hi estàs d'acord? Un cop hagis confirmat el teu vot, no podràs canviar-lo.
|
|
@@ -85,6 +91,7 @@ ca:
|
|
|
85
91
|
description: Ja has votat pel pressupost. Si has canviat d'idea, pots %{cancel_link}.
|
|
86
92
|
title: Vot pels pressupostos completat
|
|
87
93
|
description: En quins projectes creus que hem de destinar el pressupost? Assigna com a mínim %{minimum_budget} als projectes que desitges i vota per definir el pressupost.
|
|
94
|
+
description_minimum_projects_rule: A quins projectes creus que hem de destinar el pressupost? Selecciona com a mínim %{minimum_number} projectes i vota segons les teves preferències per a definir el pressupost.
|
|
88
95
|
title: Tu decideixes el pressupost
|
|
89
96
|
count:
|
|
90
97
|
projects_count:
|
|
@@ -92,7 +99,7 @@ ca:
|
|
|
92
99
|
other: "%{count} projectes"
|
|
93
100
|
filters:
|
|
94
101
|
category: Categoria
|
|
95
|
-
|
|
102
|
+
scope: Àmbit
|
|
96
103
|
search: Cerca
|
|
97
104
|
filters_small_view:
|
|
98
105
|
close_modal: Tancar finestra
|
|
@@ -107,16 +114,24 @@ ca:
|
|
|
107
114
|
one: projecte seleccionat
|
|
108
115
|
other: projectes seleccionats
|
|
109
116
|
view: Veure
|
|
117
|
+
orders:
|
|
118
|
+
highest_cost: Major cost
|
|
119
|
+
label: Ordenar projectes per
|
|
120
|
+
lowest_cost: Menor cost
|
|
121
|
+
most_voted: Més votats
|
|
122
|
+
random: Ordre aleatori
|
|
110
123
|
project:
|
|
111
|
-
add: Afegir
|
|
124
|
+
add: Afegir el projecte %{resource_name} al teu vot
|
|
112
125
|
count:
|
|
113
126
|
one: 1 suport
|
|
114
127
|
other: "%{count} suports"
|
|
115
|
-
remove: Esborrar
|
|
128
|
+
remove: Esborrar el projecte %{resource_name} del teu vot
|
|
116
129
|
view: Veure
|
|
117
130
|
project_budget_button:
|
|
118
|
-
add: Afegir
|
|
119
|
-
|
|
131
|
+
add: Afegir al teu vot
|
|
132
|
+
add_descriptive: Afegir el projecte %{resource_name} al teu vot
|
|
133
|
+
added: Afegit al teu vot
|
|
134
|
+
added_descriptive: El projecte %{resource_name} s'ha afegit al teu vot
|
|
120
135
|
show:
|
|
121
136
|
budget: Pressupost
|
|
122
137
|
view_all_projects: Veure tots els projectes
|
|
@@ -129,9 +144,16 @@ ca:
|
|
|
129
144
|
global:
|
|
130
145
|
announcement: Avís
|
|
131
146
|
comments_enabled: Comentaris habilitats
|
|
147
|
+
form:
|
|
148
|
+
errors:
|
|
149
|
+
budget_voting_rule_only_one: Cal activar com a mínim una norma per a la votació
|
|
150
|
+
budget_voting_rule_required: Es requereix una norma per a la votació
|
|
132
151
|
projects_per_page: Projectes per pàgina
|
|
133
152
|
resources_permissions_enabled: Es poden establir permisos d'accions per a cada trobada
|
|
134
153
|
total_budget: Pressupost total
|
|
154
|
+
vote_minimum_budget_projects_number: Nombre màxim de projectes a votar
|
|
155
|
+
vote_rule_minimum_budget_projects_enabled: 'Activar norma: Número mínim de projectes a votar'
|
|
156
|
+
vote_rule_threshold_percent_enabled: 'Activar norma: percentatge mínim del pressupost'
|
|
135
157
|
vote_threshold_percent: Percentatge del pressupost mínim per fer el vot
|
|
136
158
|
step:
|
|
137
159
|
announcement: Avís
|