decidim-elections 0.27.4 → 0.28.0.rc5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (456) 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/environment.rb +3 -0
  307. data/config/locales/ar.yml +0 -8
  308. data/config/locales/ca.yml +162 -216
  309. data/config/locales/cs.yml +155 -205
  310. data/config/locales/de.yml +160 -214
  311. data/config/locales/el.yml +160 -110
  312. data/config/locales/en.yml +183 -237
  313. data/config/locales/es-MX.yml +161 -215
  314. data/config/locales/es-PY.yml +160 -214
  315. data/config/locales/es.yml +160 -214
  316. data/config/locales/eu.yml +293 -218
  317. data/config/locales/fi-plain.yml +152 -206
  318. data/config/locales/fi.yml +157 -211
  319. data/config/locales/fr-CA.yml +167 -200
  320. data/config/locales/fr.yml +170 -203
  321. data/config/locales/ga-IE.yml +0 -40
  322. data/config/locales/gl.yml +2 -76
  323. data/config/locales/hu.yml +7 -52
  324. data/config/locales/it.yml +3 -245
  325. data/config/locales/ja.yml +176 -230
  326. data/config/locales/lt.yml +154 -181
  327. data/config/locales/lv.yml +0 -38
  328. data/config/locales/nl.yml +0 -214
  329. data/config/locales/no.yml +0 -128
  330. data/config/locales/pl.yml +3 -247
  331. data/config/locales/pt-BR.yml +1 -247
  332. data/config/locales/pt.yml +1 -248
  333. data/config/locales/ro-RO.yml +1 -143
  334. data/config/locales/sq-AL.yml +1 -0
  335. data/config/locales/sv.yml +20 -102
  336. data/config/locales/th-TH.yml +1 -0
  337. data/config/locales/tr-TR.yml +56 -118
  338. data/config/locales/zh-CN.yml +0 -64
  339. data/config/locales/zh-TW.yml +81 -168
  340. data/lib/decidim/api/election_type.rb +1 -1
  341. data/lib/decidim/api/elections_type.rb +1 -1
  342. data/lib/decidim/elections/admin_engine.rb +4 -19
  343. data/lib/decidim/elections/component.rb +4 -452
  344. data/lib/decidim/elections/engine.rb +23 -1
  345. data/lib/decidim/elections/menu.rb +39 -0
  346. data/lib/decidim/elections/seeds.rb +435 -0
  347. data/lib/decidim/elections/test/factories.rb +22 -21
  348. data/lib/decidim/elections/trustee_zone_engine.rb +3 -7
  349. data/lib/decidim/elections/version.rb +1 -1
  350. data/lib/decidim/elections.rb +6 -0
  351. data/lib/decidim/votings/admin_engine.rb +16 -122
  352. data/lib/decidim/votings/census_admin_engine.rb +4 -8
  353. data/lib/decidim/votings/census_menu.rb +18 -0
  354. data/lib/decidim/votings/content_blocks/registry_manager.rb +88 -0
  355. data/lib/decidim/votings/engine.rb +12 -88
  356. data/lib/decidim/votings/menu.rb +164 -0
  357. data/lib/decidim/votings/participatory_space.rb +6 -190
  358. data/lib/decidim/votings/polling_officer_zone_engine.rb +3 -7
  359. data/lib/decidim/votings/polling_officer_zone_menu.rb +17 -0
  360. data/lib/decidim/votings/query_extensions.rb +4 -4
  361. data/lib/decidim/votings/seeds.rb +197 -0
  362. data/lib/decidim/votings/test/factories.rb +29 -13
  363. data/lib/decidim/votings/voting_serializer.rb +3 -3
  364. data/lib/tasks/decidim_elections.rake +2 -2
  365. metadata +77 -123
  366. data/app/cells/decidim/elections/election_m/data.erb +0 -19
  367. data/app/cells/decidim/elections/election_m/footer.erb +0 -5
  368. data/app/cells/decidim/elections/election_m/tags.erb +0 -3
  369. data/app/cells/decidim/elections/election_m_cell.rb +0 -96
  370. data/app/cells/decidim/elections/election_results/blank_votes.erb +0 -7
  371. data/app/cells/decidim/votings/content_blocks/highlighted_votings/show.erb +0 -30
  372. data/app/cells/decidim/votings/content_blocks/landing_page/attachments_and_folders_cell.rb +0 -22
  373. data/app/cells/decidim/votings/content_blocks/landing_page/description/show.erb +0 -15
  374. data/app/cells/decidim/votings/content_blocks/landing_page/description_cell.rb +0 -25
  375. data/app/cells/decidim/votings/content_blocks/landing_page/elections/show.erb +0 -15
  376. data/app/cells/decidim/votings/content_blocks/landing_page/elections/single.erb +0 -11
  377. data/app/cells/decidim/votings/content_blocks/landing_page/elections_cell.rb +0 -47
  378. data/app/cells/decidim/votings/content_blocks/landing_page/header/show.erb +0 -29
  379. data/app/cells/decidim/votings/content_blocks/landing_page/header_cell.rb +0 -108
  380. data/app/cells/decidim/votings/content_blocks/landing_page/header_settings_form_cell.rb +0 -17
  381. data/app/cells/decidim/votings/content_blocks/landing_page/metrics/show.erb +0 -12
  382. data/app/cells/decidim/votings/content_blocks/landing_page/metrics_cell.rb +0 -19
  383. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/address.erb +0 -14
  384. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/map.erb +0 -18
  385. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/show.erb +0 -25
  386. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations_cell.rb +0 -56
  387. data/app/cells/decidim/votings/content_blocks/landing_page/statistics_cell.rb +0 -24
  388. data/app/cells/decidim/votings/content_blocks/landing_page/timeline/show.erb +0 -7
  389. data/app/cells/decidim/votings/content_blocks/landing_page/timeline_cell.rb +0 -17
  390. data/app/cells/decidim/votings/polling_officers/polling_officers_picker/polling_officers.erb +0 -12
  391. data/app/cells/decidim/votings/voting_m/data.erb +0 -21
  392. data/app/cells/decidim/votings/voting_m/footer.erb +0 -5
  393. data/app/cells/decidim/votings/voting_m_cell.rb +0 -94
  394. data/app/commands/decidim/votings/admin/publish_voting.rb +0 -40
  395. data/app/commands/decidim/votings/admin/unpublish_voting.rb +0 -40
  396. data/app/forms/decidim/votings/admin/monitoring_committee_member_form.rb +0 -27
  397. data/app/forms/decidim/votings/admin/voting_role_form.rb +0 -29
  398. data/app/helpers/decidim/votings/admin/polling_officers_picker_helper.rb +0 -29
  399. data/app/packs/entrypoints/decidim_elections_admin_pending_action.js +0 -1
  400. data/app/packs/entrypoints/decidim_elections_admin_trustees_process.js +0 -1
  401. data/app/packs/entrypoints/decidim_elections_admin_vote_statistics.js +0 -1
  402. data/app/packs/entrypoints/decidim_elections_election_log.js +0 -1
  403. data/app/packs/entrypoints/decidim_elections_onboarding.js +0 -1
  404. data/app/packs/entrypoints/decidim_elections_trustee_key_ceremony.js +0 -1
  405. data/app/packs/entrypoints/decidim_elections_trustee_tally_started.js +0 -1
  406. data/app/packs/entrypoints/decidim_elections_trustee_trustee_zone.js +0 -1
  407. data/app/packs/entrypoints/decidim_elections_trustee_zone.js +0 -1
  408. data/app/packs/entrypoints/decidim_elections_trustee_zone.scss +0 -1
  409. data/app/packs/entrypoints/decidim_elections_voter_casting-vote.js +0 -1
  410. data/app/packs/entrypoints/decidim_elections_voter_new-vote.js +0 -1
  411. data/app/packs/entrypoints/decidim_elections_voter_setup-preview.js +0 -1
  412. data/app/packs/entrypoints/decidim_elections_voter_setup-vote.js +0 -1
  413. data/app/packs/entrypoints/decidim_elections_voter_verify-vote.js +0 -1
  414. data/app/packs/entrypoints/decidim_votings_admin_monitoring_committee_members_form.js +0 -1
  415. data/app/packs/entrypoints/decidim_votings_admin_polling_officers_form.js +0 -1
  416. data/app/packs/entrypoints/decidim_votings_admin_polling_officers_picker.js +0 -1
  417. data/app/packs/entrypoints/decidim_votings_admin_polling_stations_form.js +0 -1
  418. data/app/packs/entrypoints/decidim_votings_admin_update_census_dataset_status.js +0 -1
  419. data/app/packs/entrypoints/decidim_votings_admin_votings.js +0 -1
  420. data/app/packs/entrypoints/decidim_votings_admin_votings.scss +0 -1
  421. data/app/packs/entrypoints/decidim_votings_in-person-vote.js +0 -1
  422. data/app/packs/entrypoints/decidim_votings_voting-description-cell.js +0 -1
  423. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-edit-closure.js +0 -1
  424. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-in-person-vote.js +0 -1
  425. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-new-closure.js +0 -1
  426. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-sign-closure.js +0 -1
  427. data/app/packs/src/decidim/elections/onboarding.js +0 -5
  428. data/app/packs/src/decidim/votings/admin/monitoring_committee_members_form.js +0 -35
  429. data/app/packs/src/decidim/votings/voting-description-cell.js +0 -34
  430. data/app/packs/stylesheets/decidim/elections/focus/_accordion.scss +0 -36
  431. data/app/packs/stylesheets/decidim/elections/focus/_evote.scss +0 -344
  432. data/app/packs/stylesheets/decidim/elections/focus/_focus.scss +0 -128
  433. data/app/packs/stylesheets/decidim/elections/trustee_zone.scss +0 -24
  434. data/app/packs/stylesheets/decidim/votings/votings/_polling-stations-cell.scss +0 -6
  435. data/app/packs/stylesheets/decidim/votings/votings/_voting-description-cell.scss +0 -29
  436. data/app/views/decidim/elections/admin/answers/proposals_picker.html.erb +0 -1
  437. data/app/views/decidim/elections/elections/_count.html.erb +0 -1
  438. data/app/views/decidim/elections/elections/_election.html.erb +0 -1
  439. data/app/views/decidim/elections/elections/_filters.html.erb +0 -25
  440. data/app/views/decidim/elections/elections/_filters_small_view.html.erb +0 -18
  441. data/app/views/decidim/elections/votes/_focus_header.html.erb +0 -8
  442. data/app/views/decidim/elections/votes/_new_confirm_step_footer.html.erb +0 -23
  443. data/app/views/decidim/votings/admin/votings/polling_officers_picker.html.erb +0 -2
  444. data/app/views/decidim/votings/votings/_count.html.erb +0 -1
  445. data/app/views/decidim/votings/votings/_filters.html.erb +0 -25
  446. data/app/views/decidim/votings/votings/_filters_small_view.html.erb +0 -23
  447. data/app/views/decidim/votings/votings/_promoted_voting.html.erb +0 -27
  448. data/app/views/layouts/decidim/_election_votes_header.html.erb +0 -13
  449. data/app/views/layouts/decidim/election_votes.html.erb +0 -27
  450. data/app/views/layouts/decidim/voting_landing.html.erb +0 -13
  451. data/db/seeds/Exampledocument.pdf +0 -0
  452. data/db/seeds/city.jpeg +0 -0
  453. data/db/seeds/city2.jpeg +0 -0
  454. data/lib/decidim/elections/seeds/city.jpeg +0 -0
  455. data/lib/decidim/votings/test/capybara_polling_officers_picker.rb +0 -49
  456. /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: 86f9af4eb56a517eb85ce45e079ba761c916040de349fb52b878886a3ad5b27c
4
- data.tar.gz: '0436869e21f87e86847c41940ffd617cfcfbe6516e86bff3d2d6e2f7b9e6308b'
3
+ metadata.gz: 8f2c5af649b48958fda0b1f019a10ec4be908097cd003758e3331bd65b1d305b
4
+ data.tar.gz: dccdb02537d49b0139d60c22d335dd6af3e4bdc7698cf102dcc4527c098b3bdf
5
5
  SHA512:
6
- metadata.gz: 798f01f86d2c7a1d3232c8e76d6a2fe9289c585265d6f488178f0e1fa71931a7ae49d2f645b4ec42d0b44fd890094908e644315f31c6f8c003ddf618abd09b4a
7
- data.tar.gz: b87ebc1509c74e59911917343b529498c3ba163ae35d691e90ff10cfbc337a4d4eca1654f4176033a4bb85c15948515cbe0e0c898975f8e7d14e3eb5522b10fb
6
+ metadata.gz: bf24d820c12d305690d9a52bd0ebb65dfd9592cb040f40086f987bd9853e37949a044febb4b450a84494c123f899b66b90edf62b7ff0850ac2119a7cdd48f6c5
7
+ data.tar.gz: 3fea3faaaa7b5599ddba18bfe8586604aa8263ccbd383c2eeb8f4b6bfc42612f45d32b6b536fa99aa0b83728af811fd2a7a74e6e0847ed6fce60710dd08d9b81
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