decidim-elections 0.27.8 → 0.28.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (459) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +60 -3
  3. data/app/cells/decidim/elections/content_blocks/related_elections_cell.rb +13 -0
  4. data/app/cells/decidim/elections/election_cell.rb +7 -2
  5. data/app/cells/decidim/elections/election_g_cell.rb +23 -0
  6. data/app/cells/decidim/elections/election_metadata_cell.rb +57 -0
  7. data/app/cells/decidim/elections/election_preview/show.erb +24 -24
  8. data/app/cells/decidim/elections/election_results/progress_bar.erb +6 -7
  9. data/app/cells/decidim/elections/election_results/show.erb +36 -33
  10. data/app/cells/decidim/elections/election_s_cell.rb +10 -0
  11. data/app/cells/decidim/elections/election_vote_cta/show.erb +14 -26
  12. data/app/cells/decidim/elections/election_vote_cta_cell.rb +0 -9
  13. data/app/cells/decidim/elections/highlighted_elections_for_component/show.erb +18 -0
  14. data/app/cells/decidim/elections/highlighted_elections_for_component_cell.rb +50 -0
  15. data/app/cells/decidim/elections/remaining_time_callout/show.erb +1 -3
  16. data/app/cells/decidim/elections/voting_step_navigation/show.erb +21 -25
  17. data/app/cells/decidim/elections/voting_step_navigation_cell.rb +2 -2
  18. data/app/cells/decidim/votings/content_block_cell.rb +5 -1
  19. data/app/cells/decidim/votings/content_blocks/hero_cell.rb +53 -0
  20. data/app/cells/decidim/votings/content_blocks/hero_settings_form_cell.rb +15 -0
  21. data/app/cells/decidim/votings/content_blocks/highlighted_votings_cell.rb +12 -21
  22. data/app/cells/decidim/votings/content_blocks/highlighted_votings_settings_form/show.erb +1 -1
  23. data/app/cells/decidim/votings/content_blocks/main_data_cell.rb +34 -0
  24. data/app/cells/decidim/votings/content_blocks/metrics_cell.rb +17 -0
  25. data/app/cells/decidim/votings/content_blocks/polling_stations/show.erb +21 -0
  26. data/app/cells/decidim/votings/content_blocks/polling_stations_cell.rb +31 -0
  27. data/app/cells/decidim/votings/content_blocks/statistics_cell.rb +18 -0
  28. data/app/cells/decidim/votings/polling_officers/polling_officers_picker/show.erb +14 -13
  29. data/app/cells/decidim/votings/polling_officers/polling_officers_picker_cell.rb +19 -16
  30. data/app/cells/decidim/votings/polling_station_closure_certificate/show.erb +5 -7
  31. data/app/cells/decidim/votings/polling_station_closure_recount/show.erb +55 -59
  32. data/app/cells/decidim/votings/voting_cell.rb +7 -2
  33. data/app/cells/decidim/votings/voting_dropdown_metadata_cell.rb +19 -0
  34. data/app/cells/decidim/votings/voting_g_cell.rb +19 -0
  35. data/app/cells/decidim/votings/voting_map/show.erb +16 -0
  36. data/app/cells/decidim/votings/voting_map_cell.rb +28 -0
  37. data/app/cells/decidim/votings/voting_metadata_cell.rb +66 -0
  38. data/app/cells/decidim/votings/voting_s_cell.rb +10 -0
  39. data/app/commands/decidim/elections/admin/add_user_as_trustee.rb +5 -5
  40. data/app/commands/decidim/elections/admin/create_answer.rb +0 -1
  41. data/app/commands/decidim/elections/admin/create_election.rb +0 -1
  42. data/app/commands/decidim/elections/admin/destroy_answer.rb +0 -1
  43. data/app/commands/decidim/elections/admin/destroy_election.rb +0 -1
  44. data/app/commands/decidim/elections/admin/end_vote.rb +2 -2
  45. data/app/commands/decidim/elections/admin/import_proposals_to_elections.rb +1 -1
  46. data/app/commands/decidim/elections/admin/publish_election.rb +1 -1
  47. data/app/commands/decidim/elections/admin/publish_results.rb +2 -2
  48. data/app/commands/decidim/elections/admin/report_missing_trustee.rb +2 -2
  49. data/app/commands/decidim/elections/admin/setup_election.rb +2 -2
  50. data/app/commands/decidim/elections/admin/start_key_ceremony.rb +2 -2
  51. data/app/commands/decidim/elections/admin/start_tally.rb +2 -2
  52. data/app/commands/decidim/elections/admin/start_vote.rb +2 -2
  53. data/app/commands/decidim/elections/admin/unpublish_election.rb +1 -1
  54. data/app/commands/decidim/elections/admin/update_answer.rb +0 -1
  55. data/app/commands/decidim/elections/admin/update_answer_selection.rb +1 -1
  56. data/app/commands/decidim/elections/admin/update_election.rb +0 -1
  57. data/app/commands/decidim/elections/trustee_zone/update_election_bulletin_board_status.rb +3 -3
  58. data/app/commands/decidim/elections/voter/cast_vote.rb +1 -1
  59. data/app/commands/decidim/elections/voter/update_vote_status.rb +2 -2
  60. data/app/commands/decidim/votings/admin/create_ballot_style.rb +1 -1
  61. data/app/commands/decidim/votings/admin/create_monitoring_committee_member.rb +4 -4
  62. data/app/commands/decidim/votings/admin/create_polling_officer.rb +4 -4
  63. data/app/commands/decidim/votings/admin/create_polling_station.rb +1 -1
  64. data/app/commands/decidim/votings/admin/create_voting.rb +1 -1
  65. data/app/commands/decidim/votings/admin/destroy_ballot_style.rb +1 -1
  66. data/app/commands/decidim/votings/admin/destroy_monitoring_committee_member.rb +1 -1
  67. data/app/commands/decidim/votings/admin/destroy_polling_officer.rb +1 -1
  68. data/app/commands/decidim/votings/admin/manage_polling_station.rb +1 -1
  69. data/app/commands/decidim/votings/admin/monitoring_committee_validate_polling_station_closure.rb +1 -1
  70. data/app/commands/decidim/votings/admin/update_ballot_style.rb +1 -1
  71. data/app/commands/decidim/votings/admin/update_voting.rb +1 -1
  72. data/app/commands/decidim/votings/census/admin/create_dataset.rb +2 -2
  73. data/app/commands/decidim/votings/census/admin/create_datum.rb +3 -3
  74. data/app/commands/decidim/votings/census/admin/destroy_dataset.rb +1 -1
  75. data/app/commands/decidim/votings/census/admin/increment_dataset_processed_rows.rb +1 -1
  76. data/app/commands/decidim/votings/census/admin/launch_access_codes_generation.rb +1 -1
  77. data/app/commands/decidim/votings/census/admin/update_dataset.rb +1 -1
  78. data/app/commands/decidim/votings/certify_polling_station_closure.rb +1 -2
  79. data/app/commands/decidim/votings/create_polling_station_closure.rb +1 -1
  80. data/app/commands/decidim/votings/create_polling_station_results.rb +1 -1
  81. data/app/commands/decidim/votings/send_access_code.rb +5 -1
  82. data/app/commands/decidim/votings/sign_polling_station_closure.rb +2 -2
  83. data/app/commands/decidim/votings/voter/in_person_vote.rb +1 -1
  84. data/app/constraints/decidim/votings/current_voting.rb +1 -1
  85. data/app/controllers/concerns/decidim/elections/content_security_policy.rb +23 -0
  86. data/app/controllers/concerns/decidim/elections/has_vote_flow.rb +2 -2
  87. data/app/controllers/concerns/decidim/votings/admin/voting_admin.rb +1 -1
  88. data/app/controllers/concerns/decidim/votings/needs_voting.rb +1 -1
  89. data/app/controllers/decidim/elections/admin/answers_controller.rb +9 -10
  90. data/app/controllers/decidim/elections/admin/application_controller.rb +1 -0
  91. data/app/controllers/decidim/elections/admin/elections_controller.rb +7 -7
  92. data/app/controllers/decidim/elections/admin/feedback_forms_controller.rb +2 -2
  93. data/app/controllers/decidim/elections/admin/proposals_imports_controller.rb +3 -3
  94. data/app/controllers/decidim/elections/admin/questions_controller.rb +7 -7
  95. data/app/controllers/decidim/elections/admin/steps_controller.rb +4 -4
  96. data/app/controllers/decidim/elections/admin/trustees_participatory_spaces_controller.rb +2 -2
  97. data/app/controllers/decidim/elections/application_controller.rb +1 -0
  98. data/app/controllers/decidim/elections/elections_controller.rb +5 -2
  99. data/app/controllers/decidim/elections/trustee_zone/application_controller.rb +1 -0
  100. data/app/controllers/decidim/elections/trustee_zone/elections_controller.rb +2 -2
  101. data/app/controllers/decidim/elections/trustee_zone/trustees_controller.rb +3 -3
  102. data/app/controllers/decidim/elections/votes_controller.rb +19 -13
  103. data/app/controllers/decidim/votings/admin/monitoring_committee_election_results_controller.rb +11 -3
  104. data/app/controllers/decidim/votings/admin/monitoring_committee_members_controller.rb +3 -3
  105. data/app/controllers/decidim/votings/admin/monitoring_committee_polling_station_closures_controller.rb +3 -3
  106. data/app/controllers/decidim/votings/admin/polling_officers_controller.rb +3 -3
  107. data/app/controllers/decidim/votings/admin/polling_stations_controller.rb +3 -4
  108. data/app/controllers/decidim/votings/admin/voting_attachment_collections_controller.rb +5 -0
  109. data/app/controllers/decidim/votings/admin/voting_attachments_controller.rb +5 -0
  110. data/app/controllers/decidim/votings/admin/voting_publications_controller.rb +25 -0
  111. data/app/controllers/decidim/votings/admin/votings_controller.rb +2 -26
  112. data/app/controllers/decidim/votings/admin/votings_landing_page_content_blocks_controller.rb +1 -5
  113. data/app/controllers/decidim/votings/admin/votings_landing_page_controller.rb +4 -7
  114. data/app/controllers/decidim/votings/census/admin/census_controller.rb +2 -2
  115. data/app/controllers/decidim/votings/polling_officer_zone/closures_controller.rb +12 -12
  116. data/app/controllers/decidim/votings/polling_officer_zone/in_person_votes_controller.rb +17 -10
  117. data/app/controllers/decidim/votings/polling_officer_zone/polling_officers_controller.rb +1 -1
  118. data/app/controllers/decidim/votings/votings_controller.rb +7 -9
  119. data/app/events/decidim/elections/election_published_event.rb +1 -1
  120. data/app/events/decidim/elections/trustees/notify_new_trustee_event.rb +1 -1
  121. data/app/events/decidim/elections/trustees/notify_trustee_new_election_event.rb +1 -1
  122. data/app/events/decidim/elections/votes/vote_accepted_event.rb +1 -1
  123. data/app/events/decidim/votings/polling_officers/polling_station_assigned_event.rb +1 -1
  124. data/app/forms/decidim/elections/admin/answer_form.rb +1 -1
  125. data/app/forms/decidim/elections/admin/election_form.rb +1 -1
  126. data/app/forms/decidim/votings/admin/publish_results_form.rb +5 -5
  127. data/app/forms/decidim/votings/admin/voting_form.rb +1 -1
  128. data/app/forms/decidim/votings/admin/{polling_officer_form.rb → voting_user_role_form.rb} +1 -1
  129. data/app/forms/decidim/votings/census/frontend_fields.rb +1 -1
  130. data/app/forms/decidim/votings/census/in_person_fields.rb +8 -4
  131. data/app/forms/decidim/votings/closure_result_form.rb +2 -2
  132. data/app/helpers/decidim/elections/admin/trustees_participatory_spaces_helper.rb +4 -2
  133. data/app/helpers/decidim/elections/application_helper.rb +8 -0
  134. data/app/helpers/decidim/votings/map_helper.rb +22 -0
  135. data/app/helpers/decidim/votings/votings_helper.rb +33 -0
  136. data/app/jobs/decidim/votings/census/admin/create_datum_job.rb +1 -1
  137. data/app/jobs/decidim/votings/census/admin/generate_access_codes_job.rb +2 -2
  138. data/app/mailers/decidim/votings/access_code_mailer.rb +1 -1
  139. data/app/mailers/decidim/votings/census/export_mailer.rb +1 -1
  140. data/app/models/decidim/elections/trustee.rb +2 -2
  141. data/app/models/decidim/votings/ballot_style.rb +1 -1
  142. data/app/models/decidim/votings/polling_officer.rb +2 -2
  143. data/app/models/decidim/votings/polling_station.rb +1 -1
  144. data/app/packs/entrypoints/decidim_elections.js +12 -0
  145. data/app/packs/entrypoints/decidim_elections_admin.js +6 -0
  146. data/app/packs/entrypoints/decidim_votings.js +11 -0
  147. data/app/packs/entrypoints/decidim_votings_admin.js +10 -0
  148. data/app/packs/src/decidim/elections/admin/pending_action.js +10 -7
  149. data/app/packs/src/decidim/elections/admin/trustees_process.js +107 -104
  150. data/app/packs/src/decidim/elections/admin/vote_statistics.js +6 -3
  151. data/app/packs/src/decidim/elections/broken_promises_handler.js +9 -7
  152. data/app/packs/src/decidim/elections/election_log.js +126 -128
  153. data/app/packs/src/decidim/elections/trustee/key_ceremony.js +138 -139
  154. data/app/packs/src/decidim/elections/trustee/tally.js +122 -118
  155. data/app/packs/src/decidim/elections/trustee/trustee_zone.js +9 -7
  156. data/app/packs/src/decidim/elections/voter/casting-vote.js +9 -7
  157. data/app/packs/src/decidim/elections/voter/new-vote.js +92 -71
  158. data/app/packs/src/decidim/elections/voter/setup-preview.js +0 -4
  159. data/app/packs/src/decidim/elections/voter/setup-vote.js +0 -4
  160. data/app/packs/src/decidim/elections/voter/verify-vote.js +11 -6
  161. data/app/packs/src/decidim/elections/voter/vote_questions.component.js +74 -28
  162. data/app/packs/src/decidim/votings/admin/polling_officers_picker.js +16 -31
  163. data/app/packs/src/decidim/votings/admin/polling_stations_form.js +4 -1
  164. data/app/packs/src/decidim/votings/admin/{polling_officers_form.js → voting_user_role_form.js} +1 -1
  165. data/app/packs/src/decidim/votings/in-person-vote.js +4 -4
  166. data/app/packs/src/decidim/votings/polling_officer_zone/edit-closure.js +4 -4
  167. data/app/packs/src/decidim/votings/polling_officer_zone/in-person-vote.js +1 -1
  168. data/app/packs/src/decidim/votings/polling_officer_zone/new-closure.js +6 -8
  169. data/app/packs/stylesheets/decidim/elections/elections.scss +200 -6
  170. data/app/packs/stylesheets/decidim/votings/admin/votings/_ballot-styles.scss +3 -3
  171. data/app/packs/stylesheets/decidim/votings/admin/votings/_monitoring-committee-polling-station-closures.scss +2 -2
  172. data/app/packs/stylesheets/decidim/votings/admin/votings/_results.scss +1 -1
  173. data/app/packs/stylesheets/decidim/votings/admin/votings.scss +20 -0
  174. data/app/packs/stylesheets/decidim/votings/votings.scss +53 -2
  175. data/app/permissions/decidim/votings/admin/permissions.rb +2 -2
  176. data/app/presenters/decidim/elections/admin_log/election_presenter.rb +2 -2
  177. data/app/presenters/decidim/elections/admin_log/trustee_presenter.rb +2 -2
  178. data/app/presenters/decidim/elections/trustee_presenter.rb +1 -1
  179. data/app/presenters/decidim/votings/admin_log/ballot_style_presenter.rb +2 -2
  180. data/app/presenters/decidim/votings/admin_log/monitoring_committee_member_presenter.rb +2 -2
  181. data/app/presenters/decidim/votings/admin_log/polling_officer_presenter.rb +2 -2
  182. data/app/presenters/decidim/votings/admin_log/polling_station_presenter.rb +2 -2
  183. data/app/presenters/decidim/votings/admin_log/voting_presenter.rb +2 -2
  184. data/app/presenters/decidim/votings/census/admin_log/dataset_presenter.rb +2 -2
  185. data/app/presenters/decidim/votings/voting_stats_presenter.rb +3 -42
  186. data/app/services/decidim/votings/census/access_codes_exporter.rb +1 -1
  187. data/app/services/decidim/votings/census_vote_flow.rb +3 -3
  188. data/app/views/decidim/elections/admin/answers/_form.html.erb +16 -18
  189. data/app/views/decidim/elections/admin/answers/edit.html.erb +21 -5
  190. data/app/views/decidim/elections/admin/answers/index.html.erb +33 -18
  191. data/app/views/decidim/elections/admin/answers/new.html.erb +21 -5
  192. data/app/views/decidim/elections/admin/elections/_form.html.erb +20 -19
  193. data/app/views/decidim/elections/admin/elections/edit.html.erb +16 -6
  194. data/app/views/decidim/elections/admin/elections/index.html.erb +72 -70
  195. data/app/views/decidim/elections/admin/elections/new.html.erb +16 -6
  196. data/app/views/decidim/elections/admin/proposals_imports/new.html.erb +36 -21
  197. data/app/views/decidim/elections/admin/questions/_form.html.erb +18 -20
  198. data/app/views/decidim/elections/admin/questions/edit.html.erb +20 -6
  199. data/app/views/decidim/elections/admin/questions/index.html.erb +50 -49
  200. data/app/views/decidim/elections/admin/questions/new.html.erb +20 -5
  201. data/app/views/decidim/elections/admin/steps/_create_election.html.erb +41 -36
  202. data/app/views/decidim/elections/admin/steps/_created.html.erb +2 -2
  203. data/app/views/decidim/elections/admin/steps/_key_ceremony.html.erb +7 -7
  204. data/app/views/decidim/elections/admin/steps/_key_ceremony_ended.html.erb +2 -2
  205. data/app/views/decidim/elections/admin/steps/_results_published.html.erb +4 -4
  206. data/app/views/decidim/elections/admin/steps/_tally_ended.html.erb +4 -4
  207. data/app/views/decidim/elections/admin/steps/_tally_started.html.erb +11 -11
  208. data/app/views/decidim/elections/admin/steps/_vote.html.erb +3 -3
  209. data/app/views/decidim/elections/admin/steps/_vote_ended.html.erb +2 -2
  210. data/app/views/decidim/elections/admin/steps/_vote_stats.html.erb +2 -2
  211. data/app/views/decidim/elections/admin/steps/index.html.erb +44 -37
  212. data/app/views/decidim/elections/admin/trustees_participatory_spaces/_form.html.erb +10 -14
  213. data/app/views/decidim/elections/admin/trustees_participatory_spaces/index.html.erb +57 -60
  214. data/app/views/decidim/elections/admin/trustees_participatory_spaces/new.html.erb +16 -5
  215. data/app/views/decidim/elections/elections/_elections.html.erb +9 -16
  216. data/app/views/decidim/elections/elections/election_log.html.erb +171 -179
  217. data/app/views/decidim/elections/elections/index.html.erb +18 -21
  218. data/app/views/decidim/elections/elections/index.js.erb +0 -5
  219. data/app/views/decidim/elections/elections/show.html.erb +63 -39
  220. data/app/views/decidim/elections/shared/_broken_promises_modal.html.erb +18 -27
  221. data/app/views/decidim/elections/trustee_zone/elections/_backup_modal.html.erb +10 -20
  222. data/app/views/decidim/elections/trustee_zone/elections/_key_ceremony_steps.html.erb +32 -27
  223. data/app/views/decidim/elections/trustee_zone/elections/_restore_modal.html.erb +11 -21
  224. data/app/views/decidim/elections/trustee_zone/elections/_tally_started_steps.html.erb +46 -41
  225. data/app/views/decidim/elections/trustee_zone/elections/show.html.erb +4 -6
  226. data/app/views/decidim/elections/trustee_zone/trustees/_no_public_keys.html.erb +30 -0
  227. data/app/views/decidim/elections/trustee_zone/trustees/_public_keys.html.erb +17 -0
  228. data/app/views/decidim/elections/trustee_zone/trustees/_table.html.erb +28 -0
  229. data/app/views/decidim/elections/trustee_zone/trustees/show.html.erb +21 -96
  230. data/app/views/decidim/elections/votes/_new_ballot_decision_step.html.erb +22 -26
  231. data/app/views/decidim/elections/votes/_new_confirm_step.html.erb +59 -47
  232. data/app/views/decidim/elections/votes/_new_encrypting_step.html.erb +8 -19
  233. data/app/views/decidim/elections/votes/_new_question.html.erb +12 -28
  234. data/app/views/decidim/elections/votes/_new_question_modal.html.erb +20 -23
  235. data/app/views/decidim/elections/votes/_onboarding_modal.html.erb +14 -22
  236. data/app/views/decidim/elections/votes/_show_casted.html.erb +28 -30
  237. data/app/views/decidim/elections/votes/_show_casting.html.erb +12 -19
  238. data/app/views/decidim/elections/votes/_show_failed.html.erb +20 -17
  239. data/app/views/decidim/elections/votes/new.html.erb +78 -61
  240. data/app/views/decidim/elections/votes/show.html.erb +12 -11
  241. data/app/views/decidim/elections/votes/verify.html.erb +40 -61
  242. data/app/views/decidim/votings/admin/ballot_styles/_form.html.erb +19 -19
  243. data/app/views/decidim/votings/admin/ballot_styles/edit.html.erb +16 -6
  244. data/app/views/decidim/votings/admin/ballot_styles/index.html.erb +50 -54
  245. data/app/views/decidim/votings/admin/ballot_styles/new.html.erb +16 -6
  246. data/app/views/decidim/votings/admin/monitoring_committee_election_results/_results.html.erb +43 -46
  247. data/app/views/decidim/votings/admin/monitoring_committee_election_results/index.html.erb +23 -25
  248. data/app/views/decidim/votings/admin/monitoring_committee_election_results/show.html.erb +5 -5
  249. data/app/views/decidim/votings/admin/monitoring_committee_members/_form.html.erb +19 -20
  250. data/app/views/decidim/votings/admin/monitoring_committee_members/index.html.erb +32 -34
  251. data/app/views/decidim/votings/admin/monitoring_committee_members/new.html.erb +17 -6
  252. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/_closure_certificate_results.erb +1 -1
  253. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/_closures.html.erb +53 -56
  254. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/_elections.html.erb +22 -25
  255. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/edit.html.erb +12 -11
  256. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/show.html.erb +1 -1
  257. data/app/views/decidim/votings/admin/monitoring_committee_verify_elections/index.html.erb +37 -39
  258. data/app/views/decidim/votings/admin/polling_officers/_form.html.erb +19 -20
  259. data/app/views/decidim/votings/admin/polling_officers/index.html.erb +40 -41
  260. data/app/views/decidim/votings/admin/polling_officers/new.html.erb +17 -6
  261. data/app/views/decidim/votings/admin/polling_stations/_form.html.erb +25 -31
  262. data/app/views/decidim/votings/admin/polling_stations/edit.html.erb +17 -6
  263. data/app/views/decidim/votings/admin/polling_stations/index.html.erb +46 -47
  264. data/app/views/decidim/votings/admin/polling_stations/new.html.erb +17 -6
  265. data/app/views/decidim/votings/admin/votings/_form.html.erb +49 -52
  266. data/app/views/decidim/votings/admin/votings/edit.html.erb +35 -28
  267. data/app/views/decidim/votings/admin/votings/index.html.erb +58 -82
  268. data/app/views/decidim/votings/admin/votings/new.html.erb +16 -9
  269. data/app/views/decidim/votings/census/admin/census/_creating_data.html.erb +4 -4
  270. data/app/views/decidim/votings/census/admin/census/_export_codes.html.erb +3 -3
  271. data/app/views/decidim/votings/census/admin/census/_generate_codes.html.erb +8 -8
  272. data/app/views/decidim/votings/census/admin/census/_new_census.html.erb +8 -7
  273. data/app/views/decidim/votings/census/admin/census/_upload_info.html.erb +5 -5
  274. data/app/views/decidim/votings/census/admin/census/show.html.erb +7 -7
  275. data/app/views/decidim/votings/polling_officer_zone/closures/_answer_results_form_fields.html.erb +2 -3
  276. data/app/views/decidim/votings/polling_officer_zone/closures/_ballot_results_form_fields.html.erb +24 -35
  277. data/app/views/decidim/votings/polling_officer_zone/closures/_certify_form.html.erb +5 -9
  278. data/app/views/decidim/votings/polling_officer_zone/closures/_modal_ballots_count_error.html.erb +34 -48
  279. data/app/views/decidim/votings/polling_officer_zone/closures/_modal_ballots_results_count_error.html.erb +18 -18
  280. data/app/views/decidim/votings/polling_officer_zone/closures/_question_results_form_fields.html.erb +12 -17
  281. data/app/views/decidim/votings/polling_officer_zone/closures/_sign_form.html.erb +34 -49
  282. data/app/views/decidim/votings/polling_officer_zone/closures/edit.html.erb +50 -37
  283. data/app/views/decidim/votings/polling_officer_zone/closures/new.html.erb +57 -51
  284. data/app/views/decidim/votings/polling_officer_zone/closures/show.html.erb +44 -34
  285. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/_complete_voting.html.erb +40 -57
  286. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/_in_person_form.html.erb +34 -47
  287. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/_verify_document.html.erb +19 -22
  288. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/new.html.erb +12 -12
  289. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/show.html.erb +22 -21
  290. data/app/views/decidim/votings/polling_officer_zone/polling_officers/_polling_station.html.erb +34 -41
  291. data/app/views/decidim/votings/polling_officer_zone/polling_officers/index.html.erb +9 -5
  292. data/app/views/decidim/votings/votings/_access_code_modal.html.erb +26 -31
  293. data/app/views/decidim/votings/votings/_check_fields.html.erb +19 -28
  294. data/app/views/decidim/votings/votings/_polling_officers_picker.html.erb +4 -0
  295. data/app/views/decidim/votings/votings/_votings.html.erb +5 -11
  296. data/app/views/decidim/votings/votings/check_census.html.erb +53 -53
  297. data/app/views/decidim/votings/votings/elections_log.html.erb +25 -22
  298. data/app/views/decidim/votings/votings/index.html.erb +24 -25
  299. data/app/views/decidim/votings/votings/index.js.erb +0 -5
  300. data/app/views/decidim/votings/votings/login.html.erb +51 -44
  301. data/app/views/decidim/votings/votings/show.html.erb +5 -7
  302. data/app/views/layouts/decidim/admin/voting.html.erb +11 -11
  303. data/app/views/layouts/decidim/admin/votings.html.erb +16 -0
  304. data/app/views/layouts/decidim/votings.html.erb +10 -14
  305. data/config/assets.rb +3 -28
  306. data/config/locales/ar.yml +0 -6
  307. data/config/locales/bg.yml +0 -1431
  308. data/config/locales/ca.yml +169 -223
  309. data/config/locales/cs.yml +157 -210
  310. data/config/locales/de.yml +161 -215
  311. data/config/locales/el.yml +164 -108
  312. data/config/locales/en.yml +183 -237
  313. data/config/locales/es-MX.yml +164 -218
  314. data/config/locales/es-PY.yml +163 -217
  315. data/config/locales/es.yml +168 -222
  316. data/config/locales/eu.yml +165 -222
  317. data/config/locales/fi-plain.yml +154 -208
  318. data/config/locales/fi.yml +157 -211
  319. data/config/locales/fr-CA.yml +168 -223
  320. data/config/locales/fr.yml +171 -226
  321. data/config/locales/ga-IE.yml +0 -40
  322. data/config/locales/gl.yml +2 -79
  323. data/config/locales/hu.yml +0 -62
  324. data/config/locales/it.yml +6 -243
  325. data/config/locales/ja.yml +173 -227
  326. data/config/locales/lt.yml +135 -204
  327. data/config/locales/lv.yml +0 -34
  328. data/config/locales/nl.yml +2 -211
  329. data/config/locales/no.yml +1 -131
  330. data/config/locales/pl.yml +3 -407
  331. data/config/locales/pt-BR.yml +4 -374
  332. data/config/locales/pt.yml +4 -245
  333. data/config/locales/ro-RO.yml +2 -143
  334. data/config/locales/ru.yml +0 -5
  335. data/config/locales/sk.yml +0 -5
  336. data/config/locales/sv.yml +11 -108
  337. data/config/locales/tr-TR.yml +58 -126
  338. data/config/locales/uk.yml +0 -5
  339. data/config/locales/zh-CN.yml +1 -68
  340. data/config/locales/zh-TW.yml +84 -166
  341. data/db/migrate/20210310120708_add_followable_counter_cache_to_votings.rb +2 -6
  342. data/lib/decidim/api/election_type.rb +1 -1
  343. data/lib/decidim/api/elections_type.rb +1 -1
  344. data/lib/decidim/elections/admin_engine.rb +4 -19
  345. data/lib/decidim/elections/component.rb +4 -452
  346. data/lib/decidim/elections/engine.rb +23 -1
  347. data/lib/decidim/elections/menu.rb +39 -0
  348. data/lib/decidim/elections/seeds.rb +435 -0
  349. data/lib/decidim/elections/test/factories.rb +22 -21
  350. data/lib/decidim/elections/trustee_zone_engine.rb +3 -7
  351. data/lib/decidim/elections/version.rb +1 -1
  352. data/lib/decidim/elections.rb +6 -0
  353. data/lib/decidim/votings/admin_engine.rb +16 -122
  354. data/lib/decidim/votings/census_admin_engine.rb +4 -8
  355. data/lib/decidim/votings/census_menu.rb +18 -0
  356. data/lib/decidim/votings/content_blocks/registry_manager.rb +88 -0
  357. data/lib/decidim/votings/engine.rb +12 -88
  358. data/lib/decidim/votings/menu.rb +164 -0
  359. data/lib/decidim/votings/participatory_space.rb +6 -190
  360. data/lib/decidim/votings/polling_officer_zone_engine.rb +3 -7
  361. data/lib/decidim/votings/polling_officer_zone_menu.rb +17 -0
  362. data/lib/decidim/votings/query_extensions.rb +4 -4
  363. data/lib/decidim/votings/seeds.rb +197 -0
  364. data/lib/decidim/votings/test/factories.rb +29 -13
  365. data/lib/decidim/votings/voting_serializer.rb +1 -1
  366. data/lib/tasks/decidim_elections.rake +2 -2
  367. metadata +76 -125
  368. data/app/cells/decidim/elections/election_m/data.erb +0 -19
  369. data/app/cells/decidim/elections/election_m/footer.erb +0 -5
  370. data/app/cells/decidim/elections/election_m/tags.erb +0 -3
  371. data/app/cells/decidim/elections/election_m_cell.rb +0 -96
  372. data/app/cells/decidim/elections/election_results/blank_votes.erb +0 -7
  373. data/app/cells/decidim/votings/content_blocks/highlighted_votings/show.erb +0 -30
  374. data/app/cells/decidim/votings/content_blocks/landing_page/attachments_and_folders_cell.rb +0 -22
  375. data/app/cells/decidim/votings/content_blocks/landing_page/description/show.erb +0 -15
  376. data/app/cells/decidim/votings/content_blocks/landing_page/description_cell.rb +0 -25
  377. data/app/cells/decidim/votings/content_blocks/landing_page/elections/show.erb +0 -15
  378. data/app/cells/decidim/votings/content_blocks/landing_page/elections/single.erb +0 -11
  379. data/app/cells/decidim/votings/content_blocks/landing_page/elections_cell.rb +0 -47
  380. data/app/cells/decidim/votings/content_blocks/landing_page/header/show.erb +0 -29
  381. data/app/cells/decidim/votings/content_blocks/landing_page/header_cell.rb +0 -108
  382. data/app/cells/decidim/votings/content_blocks/landing_page/header_settings_form_cell.rb +0 -17
  383. data/app/cells/decidim/votings/content_blocks/landing_page/metrics/show.erb +0 -12
  384. data/app/cells/decidim/votings/content_blocks/landing_page/metrics_cell.rb +0 -19
  385. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/address.erb +0 -14
  386. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/map.erb +0 -18
  387. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/show.erb +0 -25
  388. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations_cell.rb +0 -56
  389. data/app/cells/decidim/votings/content_blocks/landing_page/statistics_cell.rb +0 -24
  390. data/app/cells/decidim/votings/content_blocks/landing_page/timeline/show.erb +0 -7
  391. data/app/cells/decidim/votings/content_blocks/landing_page/timeline_cell.rb +0 -17
  392. data/app/cells/decidim/votings/polling_officers/polling_officers_picker/polling_officers.erb +0 -12
  393. data/app/cells/decidim/votings/voting_m/data.erb +0 -21
  394. data/app/cells/decidim/votings/voting_m/footer.erb +0 -5
  395. data/app/cells/decidim/votings/voting_m_cell.rb +0 -94
  396. data/app/commands/decidim/votings/admin/publish_voting.rb +0 -40
  397. data/app/commands/decidim/votings/admin/unpublish_voting.rb +0 -40
  398. data/app/forms/decidim/votings/admin/monitoring_committee_member_form.rb +0 -27
  399. data/app/helpers/decidim/votings/admin/polling_officers_picker_helper.rb +0 -29
  400. data/app/packs/entrypoints/decidim_elections_admin_pending_action.js +0 -1
  401. data/app/packs/entrypoints/decidim_elections_admin_trustees_process.js +0 -1
  402. data/app/packs/entrypoints/decidim_elections_admin_vote_statistics.js +0 -1
  403. data/app/packs/entrypoints/decidim_elections_election_log.js +0 -1
  404. data/app/packs/entrypoints/decidim_elections_onboarding.js +0 -1
  405. data/app/packs/entrypoints/decidim_elections_trustee_key_ceremony.js +0 -1
  406. data/app/packs/entrypoints/decidim_elections_trustee_tally_started.js +0 -1
  407. data/app/packs/entrypoints/decidim_elections_trustee_trustee_zone.js +0 -1
  408. data/app/packs/entrypoints/decidim_elections_trustee_zone.js +0 -1
  409. data/app/packs/entrypoints/decidim_elections_trustee_zone.scss +0 -1
  410. data/app/packs/entrypoints/decidim_elections_voter_casting-vote.js +0 -1
  411. data/app/packs/entrypoints/decidim_elections_voter_new-vote.js +0 -1
  412. data/app/packs/entrypoints/decidim_elections_voter_setup-preview.js +0 -1
  413. data/app/packs/entrypoints/decidim_elections_voter_setup-vote.js +0 -1
  414. data/app/packs/entrypoints/decidim_elections_voter_verify-vote.js +0 -1
  415. data/app/packs/entrypoints/decidim_votings_admin_monitoring_committee_members_form.js +0 -1
  416. data/app/packs/entrypoints/decidim_votings_admin_polling_officers_form.js +0 -1
  417. data/app/packs/entrypoints/decidim_votings_admin_polling_officers_picker.js +0 -1
  418. data/app/packs/entrypoints/decidim_votings_admin_polling_stations_form.js +0 -1
  419. data/app/packs/entrypoints/decidim_votings_admin_update_census_dataset_status.js +0 -1
  420. data/app/packs/entrypoints/decidim_votings_admin_votings.js +0 -1
  421. data/app/packs/entrypoints/decidim_votings_admin_votings.scss +0 -1
  422. data/app/packs/entrypoints/decidim_votings_in-person-vote.js +0 -1
  423. data/app/packs/entrypoints/decidim_votings_voting-description-cell.js +0 -1
  424. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-edit-closure.js +0 -1
  425. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-in-person-vote.js +0 -1
  426. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-new-closure.js +0 -1
  427. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-sign-closure.js +0 -1
  428. data/app/packs/src/decidim/elections/onboarding.js +0 -5
  429. data/app/packs/src/decidim/votings/admin/monitoring_committee_members_form.js +0 -35
  430. data/app/packs/src/decidim/votings/voting-description-cell.js +0 -34
  431. data/app/packs/stylesheets/decidim/elections/focus/_accordion.scss +0 -36
  432. data/app/packs/stylesheets/decidim/elections/focus/_evote.scss +0 -344
  433. data/app/packs/stylesheets/decidim/elections/focus/_focus.scss +0 -128
  434. data/app/packs/stylesheets/decidim/elections/trustee_zone.scss +0 -24
  435. data/app/packs/stylesheets/decidim/votings/votings/_polling-stations-cell.scss +0 -6
  436. data/app/packs/stylesheets/decidim/votings/votings/_voting-description-cell.scss +0 -29
  437. data/app/views/decidim/elections/admin/answers/proposals_picker.html.erb +0 -1
  438. data/app/views/decidim/elections/elections/_count.html.erb +0 -1
  439. data/app/views/decidim/elections/elections/_election.html.erb +0 -1
  440. data/app/views/decidim/elections/elections/_filters.html.erb +0 -25
  441. data/app/views/decidim/elections/elections/_filters_small_view.html.erb +0 -18
  442. data/app/views/decidim/elections/votes/_focus_header.html.erb +0 -8
  443. data/app/views/decidim/elections/votes/_new_confirm_step_footer.html.erb +0 -23
  444. data/app/views/decidim/votings/admin/votings/polling_officers_picker.html.erb +0 -2
  445. data/app/views/decidim/votings/votings/_count.html.erb +0 -1
  446. data/app/views/decidim/votings/votings/_filters.html.erb +0 -25
  447. data/app/views/decidim/votings/votings/_filters_small_view.html.erb +0 -23
  448. data/app/views/decidim/votings/votings/_promoted_voting.html.erb +0 -27
  449. data/app/views/layouts/decidim/_election_votes_header.html.erb +0 -13
  450. data/app/views/layouts/decidim/election_votes.html.erb +0 -27
  451. data/app/views/layouts/decidim/voting_landing.html.erb +0 -13
  452. data/config/locales/he-IL.yml +0 -1
  453. data/db/seeds/Exampledocument.pdf +0 -0
  454. data/db/seeds/city.jpeg +0 -0
  455. data/db/seeds/city2.jpeg +0 -0
  456. data/decidim-elections.gemspec +0 -37
  457. data/lib/decidim/elections/seeds/city.jpeg +0 -0
  458. data/lib/decidim/votings/test/capybara_polling_officers_picker.rb +0 -49
  459. /data/app/cells/decidim/votings/content_blocks/{landing_page/header_settings_form → hero_settings_form}/show.erb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 857e82d3f34ea098afd4930fd2ec11da276f24e09217d528e5029b56145e12ba
4
- data.tar.gz: ed77e9c6e359c4761f4ffbb791d7b4c8e24d5636c0eeecc477206935b34aa1e8
3
+ metadata.gz: ab832a9afb63a9a904b3d23e155081cd1aba8c255b467a3d0b53fcf85fbbbf3f
4
+ data.tar.gz: b7b99b80ea05ccf1aa051519e1b836b5d6c5c791245b2e87b77e8ecccd4f3b2a
5
5
  SHA512:
6
- metadata.gz: f44f66ae16f5444f0d19f9dddb14b65498facd8fa43fba09d5c6647d2a8d747d3fd4594aace8ce5c83a93b3cdcee712ce2da7ae50eabab4c5e275f29e93c7ea9
7
- data.tar.gz: e8548f143bd8c0be6fbbea4fa04252460be7d71a11ce3b2747f00c2d75c06946bf0915d3570fa459bf2662d09eae9650fc01123714408bcbc310f6fe0d4a8dcc
6
+ metadata.gz: faeef6cc44bebfe73e58dbf61d8354b24fe25616acd6286f0da2776c9384ac44b71996c1c3edd9e2c5b520c1265109fa5e2bce06e04be40f6e8eade1b235115b
7
+ data.tar.gz: ad5b7e056629d3f09e38534cd14058095c5ff2cbcf87c68260a8acd315511e2b87e69e69604a76ab1f50a714de006f9f15cd649c53ce989337a6e7b6e6f08a99
data/README.md CHANGED
@@ -10,6 +10,40 @@ Elections will be available as a Component for a Participatory Space.
10
10
 
11
11
  In order to celebrate [End-to-end auditable votings](https://en.wikipedia.org/wiki/End-to-end_auditable_voting_systems) using the Elections module, you will need to connect your Decidim instance with an instance of the [Decidim Bulletin Board application](https://github.com/decidim/decidim-bulletin-board/). To create this connection, please check the [instructions](https://docs.decidim.org/en/services/elections_bulletin_board/).
12
12
 
13
+ ## Development
14
+
15
+ In the case that you only want to use this module for local development or testing purposes, you have an example docker-compose configuration in `docs/`. Mind that this setup is not recommended for production environments. It works with default seeds and configurations for a Decidim installation, so you should not do anything.
16
+
17
+ ```bash
18
+ cd docs/docker/bulletin_board
19
+ docker-compose up
20
+ ```
21
+
22
+ One important caveat is that as the Trustees' key generation functionality uses the IndexedDB API, and at least in Firefox there is unsupported in the Private Browsing mode (see ticket [#1639542 in Mozilla's Bugzilla](https://bugzilla.mozilla.org/show_bug.cgi?id=1639542)). As a workaround there is the [Firefox Multi-Account Containers addon](https://addons.mozilla.org/es/firefox/addon/multi-account-containers/).
23
+
24
+ ## Testing
25
+
26
+ Besides the [set-up typical for Decidim](https://docs.decidim.org/en/develop/develop/testing), for some of the specs a Bulletin Board installation is needed, running in port 5017 by default with the `DATABASE_CLEANER_ALLOW_REMOTE_DATABASE_URL` environment variable set up with the "true" string. There is a working configuration on `docs`.
27
+
28
+ ```bash
29
+ cd docs/docker/bulletin_board_test
30
+ docker-compose up
31
+ ```
32
+
33
+ As the Bulletin Board service is a necessary dependency for this module to work, if it is not running while executing the specs, the following exception will be shown.
34
+
35
+ > Failure/Error: Decidim::Elections.bulletin_board.reset_test_database
36
+ >
37
+ > StandardError:
38
+ > Sorry, something went wrong
39
+ >
40
+ > ./spec/shared/test_bulletin_board_shared_context.rb:6:in 'block (2 levels) in <top (required)>'
41
+ > (...)
42
+ > -- Caused by:
43
+ > Errno::ECONNREFUSED:
44
+ > Connection refused - connect(2) for 127.0.0.1:5017
45
+ > ./spec/shared/test_bulletin_board_shared_context.rb:6:in 'block (2 levels) in <top (required)>'
46
+
13
47
  ## Installation
14
48
 
15
49
  Add this line to your application's Gemfile:
@@ -26,17 +60,40 @@ bundle
26
60
 
27
61
  ## Configuration
28
62
 
63
+ ### Identification numbers
64
+
65
+ For the verification of the participants' data in the Voting's census, you can configure which type of documents a participant can have. By default these documents are `identification_number` and `passport`, but in some countries you may need to adapt these to your specifics needs. For instance, in Spain there are `dni`, `nie` and `passport`.
66
+
67
+ For configuring these you can do so with the Environment Variable `ELECTIONS_DOCUMENT_TYPES`.
68
+
69
+ ```env
70
+ ELECTIONS_DOCUMENT_TYPES="dni,nie,passport"
71
+ ```
72
+
73
+ You need to also add the following keys in your i18n files (i.e. `config/locales/en.yml`).
74
+
75
+ ```yaml
76
+ en:
77
+ decidim:
78
+ votings:
79
+ census:
80
+ document_types:
81
+ dni: DNI
82
+ nie: NIE
83
+ passport: Passport
84
+ ```
85
+
29
86
  ### Scheduled tasks
30
87
 
31
88
  For the Elections module to function as expected, there are some background tasks that should be scheduled to be executed regularly. Alternatively you could use `whenever` gem or the scheduled jobs of your hosting provider.
32
89
 
33
- You can configure it with `crontab -e`, for instance if you've created your Decidim application on /home/user/decidim_application:
34
- ```
90
+ You can configure it with `crontab -e`, for instance if you have created your Decidim application on /home/user/decidim_application:
91
+
92
+ ```bash
35
93
  # Remove census export files
36
94
  0 0 * * * cd /home/user/decidim_application && RAILS_ENV=production bundle exec rake decidim_votings_census:delete_census_access_codes_export
37
95
  ```
38
96
 
39
-
40
97
  ## Contributing
41
98
 
42
99
  See [Decidim](https://github.com/decidim/decidim).
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Elections
5
+ module ContentBlocks
6
+ class RelatedElectionsCell < Decidim::ContentBlocks::HighlightedElementsWithCellForListCell
7
+ private
8
+
9
+ def list_cell_path = "decidim/elections/highlighted_elections_for_component"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Elections
5
5
  # This cell renders the election card for an instance of an election
6
- # the default size is the Medium Card (:m)
6
+ # the default size is the Search Card (:s)
7
7
  class ElectionCell < Decidim::ViewModel
8
8
  include ElectionCellsHelper
9
9
  include Cell::ViewModel::Partial
@@ -15,7 +15,12 @@ module Decidim
15
15
  private
16
16
 
17
17
  def card_size
18
- "decidim/elections/election_m"
18
+ case @options[:size]
19
+ when :s
20
+ "decidim/elections/election_s"
21
+ else
22
+ "decidim/elections/election_g"
23
+ end
19
24
  end
20
25
  end
21
26
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Elections
5
+ # This cell renders the Grid (:g) election card
6
+ # for a given instance of an Election
7
+ class ElectionGCell < Decidim::CardGCell
8
+ include ElectionCellsHelper
9
+
10
+ def metadata_cell
11
+ "decidim/elections/election_metadata"
12
+ end
13
+
14
+ def has_image?
15
+ model.photos.present?
16
+ end
17
+
18
+ def resource_image_path
19
+ model.photos.first.url if has_image?
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Elections
5
+ # This cell renders metadata for an instance of an Election
6
+ class ElectionMetadataCell < Decidim::CardMetadataCell
7
+ def initialize(*)
8
+ super
9
+
10
+ @items.prepend(*election_items)
11
+ end
12
+
13
+ private
14
+
15
+ def election_items
16
+ [dates_metadata_item, state_item]
17
+ end
18
+
19
+ def state_item
20
+ return if model.voting_period_status.blank?
21
+
22
+ { text: content_tag(:span, I18n.t(model.voting_period_status, scope: "decidim.elections.election_m.badge_name"), class: "label #{state_class}") }
23
+ end
24
+
25
+ def state_class
26
+ case model.voting_period_status
27
+ when :ongoing
28
+ "success"
29
+ when :upcoming
30
+ "warning"
31
+ end
32
+ end
33
+
34
+ def start_date
35
+ return unless model.start_time
36
+
37
+ model.start_time.to_date
38
+ end
39
+
40
+ def end_date
41
+ return unless model.end_time
42
+
43
+ model.end_time.to_date
44
+ end
45
+
46
+ def dates_metadata_item
47
+ {
48
+ icon: "calendar-todo-line",
49
+ text: [
50
+ start_date.present? ? l(start_date, format: :decidim_short_with_month_name_short) : "?",
51
+ end_date.present? ? l(end_date, format: :decidim_short_with_month_name_short) : "?"
52
+ ].join(" → ")
53
+ }
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,28 +1,28 @@
1
- <div class="row">
2
- <div class="columns large-8">
3
- <h3 class="section-heading"><%= t("decidim.elections.elections.preview.title") %></h3>
1
+ <div class="election__section-title">
2
+ <%= icon "question-mark" %>
3
+ <h2 class="h4"><%= t("decidim.elections.elections.preview.title") %></h2>
4
+ </div>
4
5
 
5
- <p><%= t("decidim.elections.elections.preview.description") %></p>
6
+ <p class="election__section-desc"><%= t("decidim.elections.elections.preview.description") %></p>
6
7
 
7
- <ul class="accordion mb-m evote__preview"
8
- data-accordion
9
- data-multi-expand="true"
10
- data-allow-all-closed="true">
11
- <% model.questions.each do |question| %>
12
- <li class="accordion-item evote__preview-question <%= " is-active" if model.questions.one? %>" data-accordion-item>
13
- <a href="#" class="accordion-title flex--sbc"><%= translated_attribute(question.title) %></a>
8
+ <ul id="accordion-preview" class="space-y-8" data-component="accordion">
9
+ <% model.questions.each_with_index do |question, ix| %>
10
+ <li class="election__accordion">
11
+ <button id="accordion-trigger-<%= ix %>" data-controls="accordion-panel-<%= ix %>" class="election__accordion-trigger" <%= " data-open='true'" if model.questions.one? %>>
12
+ <%= translated_attribute(question.title) %>
13
+ <%= icon "arrow-down-s-line" %>
14
+ <%= icon "arrow-up-s-line" %>
15
+ </button>
14
16
 
15
- <div class="accordion-content" data-tab-content>
16
- <strong><%= t("decidim.elections.elections.preview.available_answers") %></strong>
17
+ <div id="accordion-panel-<%= ix %>" class="election__accordion-panel" aria-hidden="true">
18
+ <strong><%= t("decidim.elections.elections.preview.available_answers") %></strong>
17
19
 
18
- <ul>
19
- <% question.answers.each do |answer| %>
20
- <li><%= translated_attribute(answer.title) %></li>
21
- <% end %>
22
- </ul>
23
- </div>
24
- </li>
25
- <% end %>
26
- </ul>
27
- </div>
28
- </div>
20
+ <ul>
21
+ <% question.answers.each do |answer| %>
22
+ <li><%= translated_attribute(answer.title) %></li>
23
+ <% end %>
24
+ </ul>
25
+ </div>
26
+ </li>
27
+ <% end %>
28
+ </ul>
@@ -1,16 +1,15 @@
1
- <div class="progress__bar">
2
- <div class="evote__preview-bar">
3
- <div class="progress progress__bar__bar" role="progressbar" tabindex="0" aria-valuenow="<%= results_percentage %>%" aria-valuemin="0" aria-valuetext="<%= results_percentage %>% percent" aria-valuemax="100">
4
- <div class="progress-meter progress__bar__bar--complete" style="width: <%= results_percentage %>%"></div>
5
- <div class="progress__bar__bar--incomplete" style="width:calc(100% - <%= results_percentage %>%);"></div>
1
+ <div>
2
+ <div class="flex items-center justify-between gap-2">
3
+ <div class="flex justify-between grow bg-gray" role="progressbar" tabindex="0" aria-labelledby="total-answers-<%= id %>" aria-valuenow="<%= results_percentage %>" aria-valuemin="0" aria-valuetext="<%= results_percentage %> %" aria-valuemax="100">
4
+ <div class="h-2 bg-success" style="width: <%= results_percentage %>%"></div>
6
5
  </div>
7
6
 
8
- <div class="evote__preview-perc">
7
+ <div class="w-1/6 md:w-1/12 font-bold text-right">
9
8
  <%= t("decidim.elections.elections.results.percentage", count: results_percentage) %>
10
9
  </div>
11
10
  </div>
12
11
 
13
- <div class="evote__preview-label">
12
+ <div id="total-answers-<%= id %>" class="text-sm font-semibold">
14
13
  <%= t("decidim.elections.elections.results.votes", count: results_total) %>
15
14
  </div>
16
15
  </div>
@@ -1,40 +1,43 @@
1
- <div class="row">
2
- <div class="columns large-8">
3
- <h3 class="section-heading"><%= t("decidim.elections.elections.results.title") %></h3>
1
+ <div class="election__section-title">
2
+ <%= icon "bar-chart-box-line" %>
3
+ <h2 class="h4"><%= t("decidim.elections.elections.results.title") %></h2>
4
+ </div>
4
5
 
5
- <p><%= t("decidim.elections.elections.results.description") %></p>
6
+ <p class="election__section-desc"><%= t("decidim.elections.elections.results.description") %></p>
6
7
 
7
- <ul class="accordion mb-m evote__preview"
8
- data-accordion
9
- data-multi-expand="true"
10
- data-allow-all-closed="true">
11
- <% model.questions.each_with_index do |question, i| %>
12
- <li class="accordion-item evote__preview-question <%= " is-active" if i == 0 %>" data-accordion-item>
13
- <a href="#" class="accordion-title flex--sbc"><%= translated_attribute(question.title) %></a>
8
+ <ul id="accordion-results" class="space-y-8" data-component="accordion">
9
+ <% model.questions.each_with_index do |question, ix| %>
10
+ <li class="election__accordion">
11
+ <button id="accordion-trigger-<%= ix %>" data-controls="accordion-panel-<%= ix %>" class="election__accordion-trigger" <%= " data-open='true'" if ix.zero? %>>
12
+ <%= translated_attribute(question.title) %>
13
+ <%= icon "arrow-down-s-line" %>
14
+ <%= icon "arrow-up-s-line" %>
15
+ </button>
14
16
 
15
- <div class="accordion-content" data-tab-content>
16
- <% question.answers.each do |answer| %>
17
- <div class="evote__preview-result">
18
- <h3 class="evote__preview-option">
19
- <%= translated_attribute(answer.title) %>
17
+ <div id="accordion-panel-<%= ix %>" class="election__accordion-panel" aria-hidden="true">
18
+ <% question.answers.each do |answer| %>
19
+ <div>
20
+ <p>
21
+ <%= translated_attribute(answer.title) %>
20
22
 
21
- <% if answer.selected? %>
22
- <span class="label label--small label--highlight">
23
- <%= t("decidim.elections.elections.results.selected") %>
24
- </span>
25
- <% end %>
26
- </h3>
23
+ <% if answer.selected? %>
24
+ <span class="label">
25
+ <%= t("decidim.elections.elections.results.selected") %>
26
+ </span>
27
+ <% end %>
28
+ </p>
27
29
 
28
- <%= render view: :progress_bar, locals: { results_percentage: answer.results_percentage, results_total: answer.results_total } %>
29
- </div>
30
- <% end %>
30
+ <%= render view: :progress_bar, locals: { id: answer.id, results_percentage: answer.results_percentage, results_total: answer.results_total } %>
31
+ </div>
32
+ <% end %>
31
33
 
32
- <% if question.results.blank_answers.any? %>
33
- <%= render view: :blank_votes, locals: { question: question } %>
34
- <% end %>
34
+ <% if question.results.blank_answers.any? %>
35
+ <div>
36
+ <p><%= t("decidim.elections.votes.new.nota_option") %></p>
37
+ <%= render view: :progress_bar, locals: { id: answer.id, results_percentage: question.blank_votes_percentage, results_total: question.blank_votes } %>
35
38
  </div>
36
- </li>
37
- <% end %>
38
- </ul>
39
- </div>
40
- </div>
39
+ <% end %>
40
+ </div>
41
+ </li>
42
+ <% end %>
43
+ </ul>
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Elections
5
+ # This cell renders the Search (:s) election card
6
+ # for a given instance of an Election
7
+ class ElectionSCell < Decidim::CardSCell
8
+ end
9
+ end
10
+ end
@@ -2,34 +2,22 @@
2
2
  <%= cell("decidim/announcement", callout_text) %>
3
3
  <% end %>
4
4
 
5
- <div>
6
- <% if model.ongoing? %>
7
- <% if vote_flow.login_path(new_election_vote_path) %>
8
- <%= link_to vote_flow.login_path(new_election_vote_path), class: "button button--sc" do %>
9
- <%= vote_action_button_text %>
10
- <% end %>
11
- <% else %>
12
- <%= action_authorized_link_to :vote, new_election_vote_path, resource: model, class: "button button--sc" do %>
13
- <%= vote_action_button_text %>
14
- <% end %>
5
+ <% if model.ongoing? %>
6
+ <% if vote_flow.login_path(new_election_vote_path) %>
7
+ <%= link_to vote_flow.login_path(new_election_vote_path), class: "button button__lg button__secondary w-full" do %>
8
+ <%= vote_action_button_text %>
15
9
  <% end %>
16
- <% elsif !model.finished? %>
17
- <span class="button button--sc disabled"><%= t("action_button.vote", scope: "decidim.elections.elections.show") %></span>
18
- <% end %>
19
-
20
- <% if preview_mode? && can_preview? %>
21
- <%= link_to new_election_vote_path, class: "button button--sc" do %>
22
- <%= t("preview", scope: "decidim.elections.elections.show") %>
10
+ <% else %>
11
+ <%= action_authorized_link_to :vote, new_election_vote_path, resource: model, class: "button button__lg button__secondary w-full" do %>
12
+ <%= vote_action_button_text %>
23
13
  <% end %>
24
14
  <% end %>
25
- </div>
26
-
27
- <div class="text-sm">
28
- <% if model.started? %>
29
- <%= t("verify.already_voted", scope: "decidim.elections.elections.show") %>
15
+ <% elsif !model.finished? %>
16
+ <button class="button button__lg button__secondary w-full" disabled><%= t("action_button.vote", scope: "decidim.elections.elections.show") %></button>
17
+ <% end %>
30
18
 
31
- <%= link_to t("verify.verify_here", scope: "decidim.elections.elections.show"), election_vote_verify_path %>
32
- <% else %>
33
- <span class="disabled"><%= t("verify.will_verify", scope: "decidim.elections.elections.show") %></span>
19
+ <% if preview_mode? && can_preview? %>
20
+ <%= link_to new_election_vote_path, class: "button button__lg button__secondary w-full mt-4" do %>
21
+ <%= t("preview", scope: "decidim.elections.elections.show") %>
22
+ <% end %>
34
23
  <% end %>
35
- </div>
@@ -41,15 +41,6 @@ module Decidim
41
41
  end
42
42
  end
43
43
 
44
- def election_vote_verify_path
45
- engine_router.election_vote_verify_path(
46
- "#{key_participatory_space_slug}": current_participatory_space.slug,
47
- component_id: current_component.id,
48
- election_id: model.id,
49
- vote_id: "_"
50
- )
51
- end
52
-
53
44
  def callout_text
54
45
  if last_vote_pending?
55
46
  t("callout.pending_vote", scope: "decidim.elections.elections.show")
@@ -0,0 +1,18 @@
1
+ <div class="content-block__title">
2
+ <h2 class="h2 decorator">
3
+ <%= single_component? ? translated_attribute(model.name) : t("decidim.components.elections.name") %>
4
+ </h2>
5
+ <div class="label text-lg"><%= elections_count %></div>
6
+ <% if see_all_path.present? %>
7
+ <%= link_to see_all_path, class: "button button__sm button__text-secondary" do %>
8
+ <span><%= t("decidim.participatory_spaces.related_elections.see_all") %></span>
9
+ <%= icon "arrow-right-line" %>
10
+ <% end %>
11
+ <% end %>
12
+ </div>
13
+
14
+ <div class="participatory-space__block-grid">
15
+ <% elections.each do |election| %>
16
+ <%= card_for(election, link_whole_card: true, title_tag: :h3, **options.slice(:show_space)) %>
17
+ <% end %>
18
+ </div>
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module Elections
7
+ # This cell renders the highlighted elections for a given participatory
8
+ # space. It is intended to be used in the `participatory_space_highlighted_elements`
9
+ # view hook.
10
+ class HighlightedElectionsForComponentCell < Decidim::ViewModel
11
+ include ElectionCellsHelper
12
+ include Decidim::ComponentPathHelper
13
+ include Decidim::CardHelper
14
+
15
+ def show
16
+ render unless items_blank?
17
+ end
18
+
19
+ def items_blank?
20
+ elections_count.zero?
21
+ end
22
+
23
+ private
24
+
25
+ def elections_count
26
+ @elections_count ||= elections.size
27
+ end
28
+
29
+ def elections
30
+ @elections ||= Decidim::Elections::Election.where(component: model).published
31
+ end
32
+
33
+ def single_component?
34
+ @single_component ||= model.is_a?(Decidim::Component)
35
+ end
36
+
37
+ def see_all_path
38
+ @see_all_path ||= options[:see_all_path] || (single_component? && main_component_path(model))
39
+ end
40
+
41
+ def cache_hash
42
+ hash = []
43
+ hash << "decidim/elections/highlighted_elections_for_component"
44
+ hash << elections.cache_key_with_version
45
+ hash << I18n.locale.to_s
46
+ hash.join(Decidim.cache_key_separator)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,5 +1,3 @@
1
1
  <% if needs_to_show_remaining_time? %>
2
- <div class="callout secondary">
3
- <%= remaining_time %>
4
- </div>
2
+ <%= cell("decidim/announcement", remaining_time) %>
5
3
  <% end %>
@@ -1,29 +1,25 @@
1
- <div class="focus__footer">
2
- <div class="row">
3
- <% if first_step? %>
4
- <a></a>
5
- <% else %>
6
- <%= link_to(
7
- icon("chevron-left", class: "icon", role: "img", "aria-hidden": true) + " " + t("decidim.elections.votes.voting_step.back"),
8
- "#",
9
- class: "focus__back",
10
- data: {
11
- toggle: [previous_step_dom_id, current_step_dom_id].join(" ")
12
- }
13
- ) %>
14
- <% end %>
15
-
16
- <span class="button focus__next disabled-continue disabled">
17
- <%= button_continue_text %>
18
- </span>
19
-
20
- <%= link_to(
21
- button_continue_text,
22
- "#",
23
- class: "button focus__next enabled-continue",
1
+ <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
2
+ <% unless first_step? %>
3
+ <%= button_tag(
4
+ t("decidim.elections.votes.voting_step.back"),
5
+ type: "button",
6
+ id: "back-#{current_step_index}",
7
+ class: "button button__sm md:button__lg button__transparent-secondary",
24
8
  data: {
25
- toggle: [next_step_dom_id, current_step_dom_id].join(" ")
9
+ toggle: [previous_step_dom_id, current_step_dom_id].join(" ")
26
10
  }
27
11
  ) %>
28
- </div>
12
+ <% end %>
13
+
14
+ <%= button_tag(
15
+ class: "button button__sm md:button__lg button__secondary",
16
+ type: "button",
17
+ id: "next-#{current_step_index}",
18
+ data: {
19
+ toggle: [next_step_dom_id, current_step_dom_id].join(" ")
20
+ }
21
+ ) do %>
22
+ <span><%= button_continue_text %></span>
23
+ <%= icon "arrow-right-line" %>
24
+ <% end %>
29
25
  </div>
@@ -23,7 +23,7 @@ module Decidim
23
23
  end
24
24
 
25
25
  def button_continue_text
26
- "#{t("decidim.elections.votes.voting_step.continue")} #{icon("chevron-right", class: "icon", role: "img", "aria-hidden": true)}"
26
+ t("decidim.elections.votes.voting_step.continue")
27
27
  end
28
28
 
29
29
  def previous_step_dom_id
@@ -31,7 +31,7 @@ module Decidim
31
31
  end
32
32
 
33
33
  def next_step_dom_id
34
- "step-#{current_step_index + 1}"
34
+ last_step? ? "step-confirm" : "step-#{current_step_index + 1}"
35
35
  end
36
36
 
37
37
  def current_step_dom_id
@@ -6,7 +6,11 @@ module Decidim
6
6
  delegate :scoped_resource, to: :controller
7
7
 
8
8
  def edit_content_block_path
9
- decidim_votings.edit_voting_landing_page_content_block_path(scoped_resource, manifest_name)
9
+ decidim_votings.edit_voting_landing_page_content_block_path(scoped_resource, model)
10
+ end
11
+
12
+ def content_block_path
13
+ decidim_votings.voting_landing_page_content_block_path(scoped_resource, model)
10
14
  end
11
15
 
12
16
  def decidim_votings