decidim-elections 0.26.2 → 0.26.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/cells/decidim/votings/content_blocks/highlighted_votings/show.erb +1 -1
- data/app/cells/decidim/votings/content_blocks/highlighted_votings_cell.rb +1 -0
- data/app/cells/decidim/votings/content_blocks/landing_page/description/show.erb +1 -1
- data/app/cells/decidim/votings/content_blocks/landing_page/header/show.erb +2 -2
- data/app/commands/decidim/elections/admin/create_question.rb +0 -1
- data/app/commands/decidim/elections/admin/import_proposals_to_elections.rb +4 -1
- data/app/commands/decidim/elections/admin/setup_election.rb +3 -1
- data/app/commands/decidim/elections/admin/update_question.rb +0 -1
- data/app/controllers/decidim/elections/elections_controller.rb +2 -2
- data/app/controllers/decidim/votings/admin/imports_controller.rb +14 -0
- data/app/controllers/decidim/votings/votings_controller.rb +2 -2
- data/app/forms/decidim/elections/admin/question_form.rb +0 -2
- data/app/forms/decidim/elections/admin/setup_form.rb +43 -0
- data/app/models/decidim/elections/election.rb +2 -2
- data/app/models/decidim/elections/question.rb +1 -1
- data/app/packs/src/decidim/elections/admin/pending_action.js +2 -0
- data/app/packs/src/decidim/elections/admin/trustees_process.js +2 -0
- data/app/packs/src/decidim/elections/broken_promises_handler.js +11 -0
- data/app/packs/src/decidim/elections/trustee/key_ceremony.js +3 -0
- data/app/packs/src/decidim/elections/trustee/tally.js +3 -0
- data/app/packs/src/decidim/elections/voter/casting-vote.js +3 -0
- data/app/packs/src/decidim/elections/voter/setup-vote.js +9 -0
- data/app/packs/src/decidim/votings/in-person-vote.js +3 -0
- data/app/permissions/decidim/votings/admin/permissions.rb +4 -1
- data/app/views/decidim/elections/admin/questions/_form.html.erb +0 -4
- data/app/views/decidim/elections/admin/steps/_create_election.html.erb +14 -1
- data/app/views/decidim/elections/admin/steps/index.html.erb +2 -0
- data/app/views/decidim/elections/shared/_broken_promises_modal.html.erb +33 -0
- data/app/views/decidim/elections/trustee_zone/elections/show.html.erb +3 -0
- data/app/views/decidim/elections/votes/_server_error_modal.html.erb +28 -0
- data/app/views/decidim/elections/votes/_show_casting.html.erb +2 -0
- data/app/views/decidim/elections/votes/new.html.erb +3 -0
- data/app/views/decidim/votings/polling_officer_zone/in_person_votes/new.html.erb +2 -0
- data/app/views/decidim/votings/polling_officer_zone/in_person_votes/show.html.erb +2 -0
- data/app/views/decidim/votings/votings/_promoted_voting.html.erb +1 -1
- data/config/locales/ar.yml +0 -2
- data/config/locales/ca.yml +21 -2
- data/config/locales/cs.yml +25 -6
- data/config/locales/de.yml +33 -3
- data/config/locales/el.yml +0 -1
- data/config/locales/en.yml +21 -2
- data/config/locales/es-MX.yml +21 -2
- data/config/locales/es-PY.yml +21 -2
- data/config/locales/es.yml +21 -2
- data/config/locales/eu.yml +6 -2
- data/config/locales/fi-plain.yml +21 -2
- data/config/locales/fi.yml +21 -2
- data/config/locales/fr-CA.yml +22 -3
- data/config/locales/fr.yml +21 -2
- data/config/locales/ga-IE.yml +3 -0
- data/config/locales/gl.yml +2 -1
- data/config/locales/gn-PY.yml +1 -0
- data/config/locales/hu.yml +6 -1
- data/config/locales/it.yml +2 -2
- data/config/locales/ja.yml +21 -2
- data/config/locales/lo-LA.yml +1 -0
- data/config/locales/lt.yml +1423 -0
- data/config/locales/lv.yml +0 -1
- data/config/locales/nl.yml +2 -2
- data/config/locales/no.yml +3 -2
- data/config/locales/oc-FR.yml +1 -0
- data/config/locales/pl.yml +7 -2
- data/config/locales/pt-BR.yml +2 -2
- data/config/locales/pt.yml +2 -2
- data/config/locales/ro-RO.yml +2 -2
- data/config/locales/sv.yml +52 -1
- data/config/locales/tr-TR.yml +3 -1
- data/config/locales/zh-CN.yml +3 -1
- data/db/migrate/20220615102642_remove_description_from_elections_questions.rb +7 -0
- data/lib/decidim/api/election_question_type.rb +0 -1
- data/lib/decidim/elections/component.rb +0 -12
- data/lib/decidim/elections/test/factories.rb +0 -1
- data/lib/decidim/elections/version.rb +1 -1
- data/lib/decidim/votings/admin_engine.rb +3 -0
- metadata +20 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ec0e86b7444f64ee3b9a825db1950f6dbfd337abf7ea93ca577d4637225d99d
|
4
|
+
data.tar.gz: 2303d3bad0bfc976ee51ba20cd5cc0b4722706f2a7b216cda95d47a1a6c71d63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b74806f59ce7fe4cdb2a78e3a7fe813ff345e0024a01e8cb270e865c2dbd671faef589490a9d7d5393d50ca413c8affe79ef9007861ab5f2db6436033f0ce58f
|
7
|
+
data.tar.gz: 2a915f400a8549614a12be707202a991376f1b732bc171b74a27e423b6c1cae88840cb837ce07f55987ef184a32e185d884dd6b0099b35c7c8c2934138a680cc
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<div class="column">
|
9
9
|
<%= link_to decidim_votings.voting_path(voting), class: "card card--voting card--mini" do %>
|
10
10
|
<div aria-hidden="true" class="card__image-top"
|
11
|
-
style="background-image:url(<%= voting.attached_uploader(:banner_image).path %>)"></div>
|
11
|
+
style="background-image:url('<%= voting.attached_uploader(:banner_image).path %>')"></div>
|
12
12
|
<div class="card__content">
|
13
13
|
<span class="card__title card__link"><%= translated_attribute voting.title %></span>
|
14
14
|
</div>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<section class="extended hero" style="background-image:url(<%= current_participatory_space.attached_uploader(:banner_image).path %>);">
|
1
|
+
<section class="extended hero" style="background-image:url('<%= current_participatory_space.attached_uploader(:banner_image).path %>');">
|
2
2
|
<div class="hero__container">
|
3
3
|
<div class="row">
|
4
4
|
<div class="columns large-10 text-left">
|
@@ -24,6 +24,6 @@
|
|
24
24
|
</div>
|
25
25
|
</section>
|
26
26
|
|
27
|
-
<section
|
27
|
+
<section>
|
28
28
|
<%= extended_navigation_bar(navigation_items) %>
|
29
29
|
</section>
|
@@ -77,7 +77,10 @@ module Decidim
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def proposal_already_copied?(original_proposal)
|
80
|
-
|
80
|
+
# Note: we are including also answers from unpublished components
|
81
|
+
# because otherwise duplicates could be created until the component is
|
82
|
+
# published.
|
83
|
+
original_proposal.linked_resources(:answers, "related_proposals", component_published: false).any? do |answer|
|
81
84
|
answer.question == target_question
|
82
85
|
end
|
83
86
|
end
|
@@ -94,7 +94,9 @@ module Decidim
|
|
94
94
|
weight: question.weight,
|
95
95
|
max_selections: question.max_selections,
|
96
96
|
title: flatten_translations(question.title),
|
97
|
-
description
|
97
|
+
# the bulletin_board gem (ruby client) expects a description for the question
|
98
|
+
# as development is in a separate repository, let's send an empty content for the moment
|
99
|
+
description: {},
|
98
100
|
answers: question_answers_data(question)
|
99
101
|
}
|
100
102
|
end
|
@@ -57,8 +57,8 @@ module Decidim
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def paginated_elections
|
60
|
-
@paginated_elections ||=
|
61
|
-
@paginated_elections =
|
60
|
+
@paginated_elections ||= reorder(search.results.published)
|
61
|
+
@paginated_elections = paginate(@paginated_elections)
|
62
62
|
end
|
63
63
|
|
64
64
|
def scheduled_elections
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Votings
|
5
|
+
module Admin
|
6
|
+
# This controller allows importing things.
|
7
|
+
# It is targeted for customizations for importing things that lives under
|
8
|
+
# a voting space.
|
9
|
+
class ImportsController < Decidim::Admin::ImportsController
|
10
|
+
include VotingAdmin
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -129,8 +129,8 @@ module Decidim
|
|
129
129
|
end
|
130
130
|
|
131
131
|
def paginated_votings
|
132
|
-
@paginated_votings ||=
|
133
|
-
@paginated_votings =
|
132
|
+
@paginated_votings ||= reorder(search.results.published)
|
133
|
+
@paginated_votings = paginate(@paginated_votings)
|
134
134
|
end
|
135
135
|
|
136
136
|
def promoted_votings
|
@@ -8,14 +8,12 @@ module Decidim
|
|
8
8
|
include TranslatableAttributes
|
9
9
|
|
10
10
|
translatable_attribute :title, String
|
11
|
-
translatable_attribute :description, String
|
12
11
|
attribute :max_selections, Integer, default: 1
|
13
12
|
attribute :weight, Integer, default: 0
|
14
13
|
attribute :random_answers_order, Boolean, default: true
|
15
14
|
attribute :min_selections, Integer, default: 1
|
16
15
|
|
17
16
|
validates :title, translatable_presence: true
|
18
|
-
validates :description, translatable_presence: true
|
19
17
|
validates :max_selections, presence: true, numericality: { greater_than_or_equal_to: 1 }
|
20
18
|
|
21
19
|
def election
|
@@ -13,6 +13,12 @@ module Decidim
|
|
13
13
|
validations.each do |message, t_args, valid|
|
14
14
|
errors.add(message, I18n.t("steps.create_election.errors.#{message}", **t_args, scope: "decidim.elections.admin")) unless valid
|
15
15
|
end
|
16
|
+
|
17
|
+
if needs_census?
|
18
|
+
census_validations.each do |message, t_args, valid|
|
19
|
+
errors.add(message, I18n.t("steps.create_election.errors.#{message}", **t_args, scope: "decidim.elections.admin")) unless valid
|
20
|
+
end
|
21
|
+
end
|
16
22
|
end
|
17
23
|
|
18
24
|
def current_step; end
|
@@ -34,17 +40,34 @@ module Decidim
|
|
34
40
|
[:minimum_answers, {}, election.minimum_answers?],
|
35
41
|
[:max_selections, {}, election.valid_questions?],
|
36
42
|
[:published, {}, election.published_at.present?],
|
43
|
+
[:component_published, {}, election.component.published?],
|
37
44
|
[:time_before, { hours: Decidim::Elections.setup_minimum_hours_before_start }, election.minimum_hours_before_start?],
|
38
45
|
[:trustees_number, { number: bulletin_board.number_of_trustees }, participatory_space_trustees_with_public_key.size >= bulletin_board.number_of_trustees]
|
39
46
|
].freeze
|
40
47
|
end
|
41
48
|
|
49
|
+
def census_validations
|
50
|
+
return [] unless needs_census?
|
51
|
+
|
52
|
+
@census_validations ||= [
|
53
|
+
[:census_uploaded, {}, census.present? && census.data.exists?],
|
54
|
+
[:census_codes_generated, {}, census_codes_generated?],
|
55
|
+
[:census_frozen, {}, census&.freeze?]
|
56
|
+
].freeze
|
57
|
+
end
|
58
|
+
|
42
59
|
def messages
|
43
60
|
@messages ||= validations.map do |message, t_args, _valid|
|
44
61
|
[message, I18n.t("steps.create_election.requirements.#{message}", **t_args, scope: "decidim.elections.admin")]
|
45
62
|
end.to_h
|
46
63
|
end
|
47
64
|
|
65
|
+
def census_messages
|
66
|
+
@census_messages ||= census_validations.to_h do |message, t_args, _valid|
|
67
|
+
[message, I18n.t("steps.create_election.requirements.#{message}", **t_args, scope: "decidim.elections.admin")]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
48
71
|
def participatory_space_trustees
|
49
72
|
@participatory_space_trustees ||= Decidim::Elections::Trustees::ByParticipatorySpace.new(election.component.participatory_space).to_a
|
50
73
|
end
|
@@ -57,6 +80,26 @@ module Decidim
|
|
57
80
|
@bulletin_board ||= context[:bulletin_board] || Decidim::Elections.bulletin_board
|
58
81
|
end
|
59
82
|
|
83
|
+
def needs_census?
|
84
|
+
vote_flow.is_a?(Decidim::Votings::CensusVoteFlow)
|
85
|
+
end
|
86
|
+
|
87
|
+
def vote_flow
|
88
|
+
@vote_flow ||= election.participatory_space.try(:vote_flow_for, election)
|
89
|
+
end
|
90
|
+
|
91
|
+
def census_codes_generated?
|
92
|
+
return unless needs_census?
|
93
|
+
|
94
|
+
census&.codes_generated? || census&.exporting_codes? || census&.freeze?
|
95
|
+
end
|
96
|
+
|
97
|
+
def census
|
98
|
+
return unless needs_census?
|
99
|
+
|
100
|
+
@census ||= election.component.participatory_space.dataset
|
101
|
+
end
|
102
|
+
|
60
103
|
def main_button?
|
61
104
|
true
|
62
105
|
end
|
@@ -86,7 +86,7 @@ module Decidim
|
|
86
86
|
#
|
87
87
|
# Returns a boolean.
|
88
88
|
def minimum_answers?
|
89
|
-
questions.all? { |question| question.answers.size > 1 }
|
89
|
+
questions.any? && questions.all? { |question| question.answers.size > 1 }
|
90
90
|
end
|
91
91
|
|
92
92
|
# Public: Checks if the election results are published and election finished
|
@@ -107,7 +107,7 @@ module Decidim
|
|
107
107
|
#
|
108
108
|
# Returns a boolean.
|
109
109
|
def valid_questions?
|
110
|
-
questions.all?(&:valid_max_selection?)
|
110
|
+
questions.any? && questions.all?(&:valid_max_selection?)
|
111
111
|
end
|
112
112
|
|
113
113
|
# Public: Gets the voting period status of the election
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module Elections
|
5
5
|
# The data store for a Question in the Decidim::Elections component. It stores a
|
6
|
-
# title
|
6
|
+
# title and a maximum number of selection that voters can choose.
|
7
7
|
class Question < ApplicationRecord
|
8
8
|
include Decidim::Resourceable
|
9
9
|
include Traceable
|
@@ -0,0 +1,11 @@
|
|
1
|
+
/* Fallback for non-handled failed promises */
|
2
|
+
window.addEventListener("unhandledrejection", (event) => {
|
3
|
+
console.log("broken", event)
|
4
|
+
$("#server-failure .tech-info").html(event.reason);
|
5
|
+
if (event.reason.toString().indexOf("fetch") === -1) {
|
6
|
+
$("#server-failure .communication_error").addClass("hide");
|
7
|
+
$("#server-failure .generic_error").removeClass("hide");
|
8
|
+
}
|
9
|
+
$("#server-failure").foundation("open");
|
10
|
+
});
|
11
|
+
|
@@ -1,5 +1,7 @@
|
|
1
1
|
/* eslint-disable require-jsdoc */
|
2
2
|
|
3
|
+
// show a message to the user if comunication is lost
|
4
|
+
import "src/decidim/elections/broken_promises_handler";
|
3
5
|
import { VoteComponent } from "@decidim/decidim-bulletin_board";
|
4
6
|
|
5
7
|
import * as VotingSchemesDummy from "@decidim/voting_schemes-dummy";
|
@@ -46,5 +48,12 @@ export default function setupVoteComponent($voteWrapper) {
|
|
46
48
|
});
|
47
49
|
}
|
48
50
|
|
51
|
+
/* Fallback for non-handled failed promises */
|
52
|
+
window.addEventListener("unhandledrejection", (event) => {
|
53
|
+
$("#server-failure .tech-info").html(event.reason);
|
54
|
+
$("#server-failure").foundation("open");
|
55
|
+
});
|
56
|
+
|
49
57
|
window.Decidim = window.Decidim || {};
|
50
58
|
window.Decidim.setupVoteComponent = setupVoteComponent;
|
59
|
+
|
@@ -59,7 +59,8 @@ module Decidim
|
|
59
59
|
:monitoring_committee_verify_elections,
|
60
60
|
:monitoring_committee_election_result, :monitoring_committee_election_results,
|
61
61
|
:census,
|
62
|
-
:ballot_style, :ballot_styles
|
62
|
+
:ballot_style, :ballot_styles,
|
63
|
+
:component_data
|
63
64
|
].member? permission_action.subject
|
64
65
|
|
65
66
|
case permission_action.subject
|
@@ -130,6 +131,8 @@ module Decidim
|
|
130
131
|
end
|
131
132
|
when :ballot_styles
|
132
133
|
toggle_allow(user.admin?) if permission_action.action == :read
|
134
|
+
when :component_data
|
135
|
+
toggle_allow(user.admin?) if permission_action.action == :import
|
133
136
|
end
|
134
137
|
end
|
135
138
|
|
@@ -8,10 +8,6 @@
|
|
8
8
|
<%= form.translated :text_field, :title, autofocus: true %>
|
9
9
|
</div>
|
10
10
|
|
11
|
-
<div class="row column">
|
12
|
-
<%= form.translated :editor, :description %>
|
13
|
-
</div>
|
14
|
-
|
15
11
|
<div class="row column">
|
16
12
|
<%= form.number_field :max_selections, step: 1, min: 0 %>
|
17
13
|
</div>
|
@@ -14,10 +14,23 @@
|
|
14
14
|
<% end %>
|
15
15
|
</ul>
|
16
16
|
|
17
|
+
<% if form.needs_census? %>
|
18
|
+
<h4><%= t(".census") %></h4>
|
19
|
+
<ul class="no-bullet-indented">
|
20
|
+
<% form.census_messages.each do |key, value| %>
|
21
|
+
<% if form.errors.include?(key) %>
|
22
|
+
<li><%= icon "x", class: "text-alert", role: "img", "aria-hidden": true %> <%= form.errors.messages[key][0].html_safe %></li>
|
23
|
+
<% else %>
|
24
|
+
<li><%= icon "check", class: "text-success", role: "img", "aria-hidden": true %> <%= value.html_safe %></li>
|
25
|
+
<% end %>
|
26
|
+
<% end %>
|
27
|
+
</ul>
|
28
|
+
<% end %>
|
29
|
+
|
17
30
|
<h4><%= t(".trustees") %></h4>
|
18
31
|
<ul class="no-bullet-indented">
|
19
32
|
<% if form.participatory_space_trustees.none? %>
|
20
|
-
<li><%= t(".no_trustees") %></li>
|
33
|
+
<li><%= icon "x", class: "text-alert", role: "img", "aria-hidden": true %> <%= t(".no_trustees") %></li>
|
21
34
|
<% end %>
|
22
35
|
|
23
36
|
<% form.participatory_space_trustees.map {|trustee| [trustee, form.trustees.none? || form.trustees.include?(trustee)] }
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<% i18n_scope ||= "decidim.elections.connection.failed" %>
|
2
|
+
|
3
|
+
<div class="reveal" id="server-failure" data-reveal>
|
4
|
+
<div class="reveal__header">
|
5
|
+
<h3 class="reveal__title">
|
6
|
+
<%= t("modal.title", scope: i18n_scope) %>
|
7
|
+
</h3>
|
8
|
+
|
9
|
+
<button class="close-button" data-close aria-label="<%= t("modal.close", scope: i18n_scope) %>"
|
10
|
+
type="button">
|
11
|
+
<span aria-hidden="true">×</span>
|
12
|
+
</button>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<div class="row">
|
16
|
+
<p class="communication_error">
|
17
|
+
<%= t("modal.communication_lost", scope: i18n_scope).html_safe %>
|
18
|
+
</p>
|
19
|
+
<p class="generic_error hide">
|
20
|
+
<%= t("modal.generic_error", scope: i18n_scope).html_safe %>
|
21
|
+
</p>
|
22
|
+
|
23
|
+
<p class="help-text tech-info"></p>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<div class="row">
|
27
|
+
<div class="column flex-center">
|
28
|
+
<button class="button primary expanded" data-close type="button">
|
29
|
+
<%= t("modal.close", scope: i18n_scope) %>
|
30
|
+
</button>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
</div>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<div class="reveal" id="server-failure" data-reveal>
|
2
|
+
<div class="reveal__header">
|
3
|
+
<h3 class="reveal__title">
|
4
|
+
<%= t("modal.title", scope: "decidim.elections.votes.failed") %>
|
5
|
+
</h3>
|
6
|
+
|
7
|
+
<button class="close-button" data-close aria-label="<%= t("modal.close", scope: "decidim.elections.votes.failed") %>"
|
8
|
+
type="button">
|
9
|
+
<span aria-hidden="true">×</span>
|
10
|
+
</button>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div class="row">
|
14
|
+
<p>
|
15
|
+
<%= t("modal.communication_lost", scope: "decidim.elections.votes.failed").html_safe %>
|
16
|
+
</p>
|
17
|
+
|
18
|
+
<p class="help-text tech-info"></p>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="row">
|
22
|
+
<div class="column flex-center">
|
23
|
+
<button class="button primary expanded" data-close type="button">
|
24
|
+
<%= t("modal.close", scope: "decidim.elections.votes.failed") %>
|
25
|
+
</button>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</div>
|
@@ -22,4 +22,6 @@
|
|
22
22
|
<%= form_tag election_vote_path(election, id: vote.encrypted_vote_hash), method: :patch, class: "update_vote_status" %>
|
23
23
|
</div>
|
24
24
|
|
25
|
+
<%= render "decidim/elections/shared/broken_promises_modal" %>
|
26
|
+
|
25
27
|
<%= javascript_pack_tag "decidim_elections_voter_casting_vote" %>
|
@@ -59,9 +59,12 @@
|
|
59
59
|
</div>
|
60
60
|
</div>
|
61
61
|
|
62
|
+
<%= render "decidim/elections/shared/broken_promises_modal" %>
|
63
|
+
|
62
64
|
<% if preview_mode? %>
|
63
65
|
<%= javascript_pack_tag "decidim_elections_voter_setup_preview" %>
|
64
66
|
<% else %>
|
65
67
|
<%= javascript_pack_tag "decidim_elections_voter_setup_vote" %>
|
66
68
|
<% end %>
|
69
|
+
|
67
70
|
<%= javascript_pack_tag "decidim_elections_voter_new_vote" %>
|
@@ -22,4 +22,6 @@
|
|
22
22
|
<%= form_tag polling_officer_election_in_person_vote_path(polling_officer, election, in_person_vote), method: :patch, class: "update_vote_status" %>
|
23
23
|
</div>
|
24
24
|
|
25
|
+
<%= render "decidim/elections/shared/broken_promises_modal" %>
|
26
|
+
|
25
27
|
<%= javascript_pack_tag "decidim_votings_in_person_vote" %>
|
@@ -13,7 +13,7 @@
|
|
13
13
|
</div>
|
14
14
|
<div class="columns mediumlarge-8 large-6 card--process__column">
|
15
15
|
<div class="card--full__image"
|
16
|
-
style="background-image:url(<%= promoted_voting.attached_uploader(:banner_image).path %>)">
|
16
|
+
style="background-image:url('<%= promoted_voting.attached_uploader(:banner_image).path %>')">
|
17
17
|
<div class="card__content row collapse">
|
18
18
|
<div class="large-6 large-offset-6 columns">
|
19
19
|
<%= link_to voting_path(promoted_voting), class: "button expanded button--sc" do %>
|
data/config/locales/ar.yml
CHANGED
data/config/locales/ca.yml
CHANGED
@@ -12,7 +12,6 @@ ca:
|
|
12
12
|
start_time: La votació comença el
|
13
13
|
title: Títol
|
14
14
|
question:
|
15
|
-
description: Descripció
|
16
15
|
max_selections: Número màxim d'opcions
|
17
16
|
min_selections: Cap de les opcions anteriors
|
18
17
|
title: Títol
|
@@ -231,12 +230,17 @@ ca:
|
|
231
230
|
success: La pregunta s'ha actualitzat correctament
|
232
231
|
steps:
|
233
232
|
create_election:
|
233
|
+
census: Cens
|
234
234
|
errors:
|
235
|
+
census_codes_generated: Els codis d'accés al cens no s'han pogut generar.
|
236
|
+
census_frozen: Els codis d'accés al cens no s'han pogut exportar.
|
237
|
+
census_uploaded: No s'ha pujat el cens per a aquestes eleccions.
|
238
|
+
component_published: L'elecció <strong>no està publicada</strong>.
|
235
239
|
max_selections: Les preguntes no tenen un <strong>valor correcte per quantitat de respostes</strong>
|
236
240
|
minimum_answers: Les preguntes han de tenir <strong>almenys dues respostes</strong>.
|
237
241
|
minimum_questions: L'elecció <strong>ha de tenir almenys una pregunta</strong>.
|
238
242
|
published: L'elecció <strong>no està publicada</strong>.
|
239
|
-
time_before: L'hora d'inici és en <strong>menys de
|
243
|
+
time_before: L'hora d'inici és en <strong>menys de %{hours} hores </strong> abans de que comenci l'elecció.
|
240
244
|
trustees_number: L'espai de participació <strong>ha de tenir almenys %{number} garants amb clau pública</strong>.
|
241
245
|
invalid: S'ha produït un error en configurar aquesta elecció
|
242
246
|
no_trustees: No hi ha garants configurats per aquest espai de participació
|
@@ -245,6 +249,10 @@ ca:
|
|
245
249
|
'false': no té una <strong>clau pública</strong>
|
246
250
|
'true': té una <strong>clau pública</strong>
|
247
251
|
requirements:
|
252
|
+
census_codes_generated: S'han generat els codis d'accés al cens.
|
253
|
+
census_frozen: S'han exportat els codis per al cens i el cens ha quedat congelat.
|
254
|
+
census_uploaded: El cens s'ha pujat.
|
255
|
+
component_published: L'elecció està <strong>publicada</strong>.
|
248
256
|
max_selections: Totes les preguntes tenen un valor correcte per <strong>màxim de respostes</strong>.
|
249
257
|
minimum_answers: Cada pregunta té <strong>almenys 2 respostes</strong>.
|
250
258
|
minimum_questions: L'elecció té <strong>almenys 1 pregunta</strong>.
|
@@ -357,6 +365,13 @@ ca:
|
|
357
365
|
update: "%{user_name} ha actualitzat l'elecció %{resource_name} a %{space_name}"
|
358
366
|
trustee:
|
359
367
|
create: "%{user_name} ha assignat a la usuària %{trustee_user} com a garant"
|
368
|
+
connection:
|
369
|
+
failed:
|
370
|
+
modal:
|
371
|
+
close: Tancar
|
372
|
+
communication_lost: Malauradament, sembla que la comunicació amb el servidor de votació (Bulletin Board) s'ha perdut.<br>Pot ser que la connexió a Internet estigui avariada o que el servidor de destí estigui massa ocupat.<br>Pots provar-ho més tard o posar-te en contacte amb el servei d'assistència si aquest problema persisteix.
|
373
|
+
generic_error: Malauradament, s'ha produït un error desconegut. És probable que el teu navegador no estigui suportat o que estiguis fent servir el mode "d'incògnit" o "privat" que no són compatibles.
|
374
|
+
title: Alguna cosa ha anat malament
|
360
375
|
election_m:
|
361
376
|
badge_name:
|
362
377
|
finished: Acabada
|
@@ -639,6 +654,10 @@ ca:
|
|
639
654
|
failed:
|
640
655
|
header: Vot fallit
|
641
656
|
lead: El teu vot no s'ha enviat!
|
657
|
+
modal:
|
658
|
+
close: Tancar
|
659
|
+
communication_lost: Malauradament, sembla que la comunicació amb el servidor de votació (Bulletin Board) s'ha perdut.<br>Pot ser que la connexió a Internet estigui avariada o que el servidor de destí estigui massa ocupat.<br>Pots provar-ho més tard o posar-te en contacte amb el servei d'assistència si aquest problema persisteix.
|
660
|
+
title: Alguna cosa ha anat malament
|
642
661
|
text: Alguna cosa ha anat malament. Si us plau, torna-ho a provar.
|
643
662
|
try_again: Prova-ho de nou
|
644
663
|
header:
|