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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/votings/content_blocks/highlighted_votings/show.erb +1 -1
  3. data/app/cells/decidim/votings/content_blocks/highlighted_votings_cell.rb +1 -0
  4. data/app/cells/decidim/votings/content_blocks/landing_page/description/show.erb +1 -1
  5. data/app/cells/decidim/votings/content_blocks/landing_page/header/show.erb +2 -2
  6. data/app/commands/decidim/elections/admin/create_question.rb +0 -1
  7. data/app/commands/decidim/elections/admin/import_proposals_to_elections.rb +4 -1
  8. data/app/commands/decidim/elections/admin/setup_election.rb +3 -1
  9. data/app/commands/decidim/elections/admin/update_question.rb +0 -1
  10. data/app/controllers/decidim/elections/elections_controller.rb +2 -2
  11. data/app/controllers/decidim/votings/admin/imports_controller.rb +14 -0
  12. data/app/controllers/decidim/votings/votings_controller.rb +2 -2
  13. data/app/forms/decidim/elections/admin/question_form.rb +0 -2
  14. data/app/forms/decidim/elections/admin/setup_form.rb +43 -0
  15. data/app/models/decidim/elections/election.rb +2 -2
  16. data/app/models/decidim/elections/question.rb +1 -1
  17. data/app/packs/src/decidim/elections/admin/pending_action.js +2 -0
  18. data/app/packs/src/decidim/elections/admin/trustees_process.js +2 -0
  19. data/app/packs/src/decidim/elections/broken_promises_handler.js +11 -0
  20. data/app/packs/src/decidim/elections/trustee/key_ceremony.js +3 -0
  21. data/app/packs/src/decidim/elections/trustee/tally.js +3 -0
  22. data/app/packs/src/decidim/elections/voter/casting-vote.js +3 -0
  23. data/app/packs/src/decidim/elections/voter/setup-vote.js +9 -0
  24. data/app/packs/src/decidim/votings/in-person-vote.js +3 -0
  25. data/app/permissions/decidim/votings/admin/permissions.rb +4 -1
  26. data/app/views/decidim/elections/admin/questions/_form.html.erb +0 -4
  27. data/app/views/decidim/elections/admin/steps/_create_election.html.erb +14 -1
  28. data/app/views/decidim/elections/admin/steps/index.html.erb +2 -0
  29. data/app/views/decidim/elections/shared/_broken_promises_modal.html.erb +33 -0
  30. data/app/views/decidim/elections/trustee_zone/elections/show.html.erb +3 -0
  31. data/app/views/decidim/elections/votes/_server_error_modal.html.erb +28 -0
  32. data/app/views/decidim/elections/votes/_show_casting.html.erb +2 -0
  33. data/app/views/decidim/elections/votes/new.html.erb +3 -0
  34. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/new.html.erb +2 -0
  35. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/show.html.erb +2 -0
  36. data/app/views/decidim/votings/votings/_promoted_voting.html.erb +1 -1
  37. data/config/locales/ar.yml +0 -2
  38. data/config/locales/ca.yml +21 -2
  39. data/config/locales/cs.yml +25 -6
  40. data/config/locales/de.yml +33 -3
  41. data/config/locales/el.yml +0 -1
  42. data/config/locales/en.yml +21 -2
  43. data/config/locales/es-MX.yml +21 -2
  44. data/config/locales/es-PY.yml +21 -2
  45. data/config/locales/es.yml +21 -2
  46. data/config/locales/eu.yml +6 -2
  47. data/config/locales/fi-plain.yml +21 -2
  48. data/config/locales/fi.yml +21 -2
  49. data/config/locales/fr-CA.yml +22 -3
  50. data/config/locales/fr.yml +21 -2
  51. data/config/locales/ga-IE.yml +3 -0
  52. data/config/locales/gl.yml +2 -1
  53. data/config/locales/gn-PY.yml +1 -0
  54. data/config/locales/hu.yml +6 -1
  55. data/config/locales/it.yml +2 -2
  56. data/config/locales/ja.yml +21 -2
  57. data/config/locales/lo-LA.yml +1 -0
  58. data/config/locales/lt.yml +1423 -0
  59. data/config/locales/lv.yml +0 -1
  60. data/config/locales/nl.yml +2 -2
  61. data/config/locales/no.yml +3 -2
  62. data/config/locales/oc-FR.yml +1 -0
  63. data/config/locales/pl.yml +7 -2
  64. data/config/locales/pt-BR.yml +2 -2
  65. data/config/locales/pt.yml +2 -2
  66. data/config/locales/ro-RO.yml +2 -2
  67. data/config/locales/sv.yml +52 -1
  68. data/config/locales/tr-TR.yml +3 -1
  69. data/config/locales/zh-CN.yml +3 -1
  70. data/db/migrate/20220615102642_remove_description_from_elections_questions.rb +7 -0
  71. data/lib/decidim/api/election_question_type.rb +0 -1
  72. data/lib/decidim/elections/component.rb +0 -12
  73. data/lib/decidim/elections/test/factories.rb +0 -1
  74. data/lib/decidim/elections/version.rb +1 -1
  75. data/lib/decidim/votings/admin_engine.rb +3 -0
  76. metadata +20 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8219848da3b47bb1de74d7c35c5d9f2f1b98ee394a1d9e07201cfc3760e8650
4
- data.tar.gz: 8c2a725b532393fc5ddbdcbc2db2e320ce288e3b067e22524277097409f1ffa5
3
+ metadata.gz: 8ec0e86b7444f64ee3b9a825db1950f6dbfd337abf7ea93ca577d4637225d99d
4
+ data.tar.gz: 2303d3bad0bfc976ee51ba20cd5cc0b4722706f2a7b216cda95d47a1a6c71d63
5
5
  SHA512:
6
- metadata.gz: 668655440f14e989272e753a90332751b8d10ed8b8b63a7b0cbd14ef1fde3f4e79edaf9d6f499f00318ba1862ef1be157a7407806d30ed60dd2d274299f70968
7
- data.tar.gz: 82341a653e8ee97716326601b815ce8d6f90811b94b92e057f1ae4983614d835253e5b3d6d59671c7ccd76d8d18db28bb3505aac69b750bedbba96bb688442e0
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>
@@ -37,6 +37,7 @@ module Decidim
37
37
  def cache_hash
38
38
  hash = []
39
39
  hash.push(I18n.locale)
40
+ hash.push(highlighted_votings.map(&:cache_key_with_version))
40
41
  hash.join(Decidim.cache_key_separator)
41
42
  end
42
43
  end
@@ -1,4 +1,4 @@
1
- <div class="row section voting-description-cell">
1
+ <div class="row section voting-description-cell mt-m">
2
2
  <div class="columns">
3
3
  <% if introductory_image.attached? %>
4
4
  <div id="introductory-image" class="columns medium-4 mediumlarge-5">
@@ -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 class="section">
27
+ <section>
28
28
  <%= extended_navigation_bar(navigation_items) %>
29
29
  </section>
@@ -30,7 +30,6 @@ module Decidim
30
30
  attributes = {
31
31
  election: form.election,
32
32
  title: form.title,
33
- description: form.description,
34
33
  max_selections: form.max_selections,
35
34
  weight: form.weight,
36
35
  random_answers_order: form.random_answers_order,
@@ -77,7 +77,10 @@ module Decidim
77
77
  end
78
78
 
79
79
  def proposal_already_copied?(original_proposal)
80
- original_proposal.linked_resources(:answers, "related_proposals").any? do |answer|
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: flatten_translations(question.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
@@ -33,7 +33,6 @@ module Decidim
33
33
  def update_question!
34
34
  attributes = {
35
35
  title: form.title,
36
- description: form.description,
37
36
  max_selections: form.max_selections,
38
37
  weight: form.weight,
39
38
  random_answers_order: form.random_answers_order,
@@ -57,8 +57,8 @@ module Decidim
57
57
  end
58
58
 
59
59
  def paginated_elections
60
- @paginated_elections ||= paginate(search.results.published)
61
- @paginated_elections = reorder(@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 ||= paginate(search.results.published)
133
- @paginated_votings = reorder(@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, description and a maximum number of selection that voters can choose.
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
@@ -1,3 +1,5 @@
1
+ // show a message to the user if comunication is lost
2
+ import "src/decidim/elections/broken_promises_handler";
1
3
  import { Client } from "@decidim/decidim-bulletin_board";
2
4
 
3
5
  $(() => {
@@ -1,3 +1,5 @@
1
+ // show a message to the user if comunication is lost
2
+ import "src/decidim/elections/broken_promises_handler";
1
3
  import {
2
4
  Client,
3
5
  Election,
@@ -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,3 +1,6 @@
1
+ // show a message to the user if comunication is lost
2
+ import "src/decidim/elections/broken_promises_handler";
3
+
1
4
  import {
2
5
  KeyCeremonyComponent,
3
6
  MessageIdentifier,
@@ -1,3 +1,6 @@
1
+ // show a message to the user if comunication is lost
2
+ import "src/decidim/elections/broken_promises_handler";
3
+
1
4
  import {
2
5
  TallyComponent,
3
6
  IdentificationKeys,
@@ -1,3 +1,6 @@
1
+ // show a message to the user if comunication is lost
2
+ import "src/decidim/elections/broken_promises_handler";
3
+
1
4
  import { Client } from "@decidim/decidim-bulletin_board";
2
5
 
3
6
  $(async () => {
@@ -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
+
@@ -1,3 +1,6 @@
1
+ // show a message to the user if comunication is lost
2
+ import "src/decidim/elections/broken_promises_handler";
3
+
1
4
  import { Client } from "@decidim/decidim-bulletin_board";
2
5
 
3
6
  $(async () => {
@@ -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 %>&nbsp;<%= form.errors.messages[key][0].html_safe %></li>
23
+ <% else %>
24
+ <li><%= icon "check", class: "text-success", role: "img", "aria-hidden": true %>&nbsp;<%= 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 %>&nbsp;<%= 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)] }
@@ -43,3 +43,5 @@
43
43
  <%= render partial: current_step.to_s %>
44
44
  </div>
45
45
  <% end %>
46
+
47
+ <%= render "decidim/elections/shared/broken_promises_modal" %>
@@ -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">&times;</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>
@@ -18,5 +18,8 @@
18
18
  <%= render("#{current_step}_steps") %>
19
19
  </div>
20
20
 
21
+ <%= render "decidim/elections/shared/broken_promises_modal" %>
22
+
21
23
  <%= javascript_pack_tag "decidim_elections_trustee_#{current_step}" %>
24
+
22
25
  <% end %>
@@ -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">&times;</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" %>
@@ -18,4 +18,6 @@
18
18
  <% end %>
19
19
  </div>
20
20
 
21
+ <%= render "decidim/elections/shared/broken_promises_modal" %>
22
+
21
23
  <%= javascript_pack_tag "decidim_votings_in_person_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 %>
@@ -5,8 +5,6 @@ ar:
5
5
  description: الوصف
6
6
  election:
7
7
  description: الوصف
8
- question:
9
- description: الوصف
10
8
  decidim:
11
9
  elections:
12
10
  admin:
@@ -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 3 hores</strong> abans de que comenci l'elecció.
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: