decidim-elections 0.27.5 → 0.28.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (453) 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/ca.yml +165 -219
  308. data/config/locales/cs.yml +158 -209
  309. data/config/locales/de.yml +160 -214
  310. data/config/locales/el.yml +164 -108
  311. data/config/locales/en.yml +183 -237
  312. data/config/locales/es-MX.yml +164 -218
  313. data/config/locales/es-PY.yml +163 -217
  314. data/config/locales/es.yml +163 -217
  315. data/config/locales/eu.yml +165 -219
  316. data/config/locales/fi-plain.yml +155 -206
  317. data/config/locales/fi.yml +158 -209
  318. data/config/locales/fr-CA.yml +168 -223
  319. data/config/locales/fr.yml +171 -226
  320. data/config/locales/ga-IE.yml +0 -40
  321. data/config/locales/gl.yml +2 -79
  322. data/config/locales/hu.yml +0 -52
  323. data/config/locales/it.yml +6 -244
  324. data/config/locales/ja.yml +173 -224
  325. data/config/locales/lt.yml +135 -204
  326. data/config/locales/lv.yml +0 -34
  327. data/config/locales/nl.yml +2 -212
  328. data/config/locales/no.yml +1 -131
  329. data/config/locales/pl.yml +5 -253
  330. data/config/locales/pt-BR.yml +4 -265
  331. data/config/locales/pt.yml +4 -246
  332. data/config/locales/ro-RO.yml +2 -143
  333. data/config/locales/sv.yml +11 -108
  334. data/config/locales/tr-TR.yml +58 -123
  335. data/config/locales/zh-CN.yml +1 -68
  336. data/config/locales/zh-TW.yml +84 -166
  337. data/lib/decidim/api/election_type.rb +1 -1
  338. data/lib/decidim/api/elections_type.rb +1 -1
  339. data/lib/decidim/elections/admin_engine.rb +4 -19
  340. data/lib/decidim/elections/component.rb +4 -452
  341. data/lib/decidim/elections/engine.rb +23 -1
  342. data/lib/decidim/elections/menu.rb +39 -0
  343. data/lib/decidim/elections/seeds.rb +435 -0
  344. data/lib/decidim/elections/test/factories.rb +22 -21
  345. data/lib/decidim/elections/trustee_zone_engine.rb +3 -7
  346. data/lib/decidim/elections/version.rb +1 -1
  347. data/lib/decidim/elections.rb +6 -0
  348. data/lib/decidim/votings/admin_engine.rb +16 -122
  349. data/lib/decidim/votings/census_admin_engine.rb +4 -8
  350. data/lib/decidim/votings/census_menu.rb +18 -0
  351. data/lib/decidim/votings/content_blocks/registry_manager.rb +88 -0
  352. data/lib/decidim/votings/engine.rb +12 -88
  353. data/lib/decidim/votings/menu.rb +164 -0
  354. data/lib/decidim/votings/participatory_space.rb +6 -190
  355. data/lib/decidim/votings/polling_officer_zone_engine.rb +3 -7
  356. data/lib/decidim/votings/polling_officer_zone_menu.rb +17 -0
  357. data/lib/decidim/votings/query_extensions.rb +4 -4
  358. data/lib/decidim/votings/seeds.rb +197 -0
  359. data/lib/decidim/votings/test/factories.rb +29 -13
  360. data/lib/decidim/votings/voting_serializer.rb +1 -1
  361. data/lib/tasks/decidim_elections.rake +2 -2
  362. metadata +75 -123
  363. data/app/cells/decidim/elections/election_m/data.erb +0 -19
  364. data/app/cells/decidim/elections/election_m/footer.erb +0 -5
  365. data/app/cells/decidim/elections/election_m/tags.erb +0 -3
  366. data/app/cells/decidim/elections/election_m_cell.rb +0 -96
  367. data/app/cells/decidim/elections/election_results/blank_votes.erb +0 -7
  368. data/app/cells/decidim/votings/content_blocks/highlighted_votings/show.erb +0 -30
  369. data/app/cells/decidim/votings/content_blocks/landing_page/attachments_and_folders_cell.rb +0 -22
  370. data/app/cells/decidim/votings/content_blocks/landing_page/description/show.erb +0 -15
  371. data/app/cells/decidim/votings/content_blocks/landing_page/description_cell.rb +0 -25
  372. data/app/cells/decidim/votings/content_blocks/landing_page/elections/show.erb +0 -15
  373. data/app/cells/decidim/votings/content_blocks/landing_page/elections/single.erb +0 -11
  374. data/app/cells/decidim/votings/content_blocks/landing_page/elections_cell.rb +0 -47
  375. data/app/cells/decidim/votings/content_blocks/landing_page/header/show.erb +0 -29
  376. data/app/cells/decidim/votings/content_blocks/landing_page/header_cell.rb +0 -108
  377. data/app/cells/decidim/votings/content_blocks/landing_page/header_settings_form_cell.rb +0 -17
  378. data/app/cells/decidim/votings/content_blocks/landing_page/metrics/show.erb +0 -12
  379. data/app/cells/decidim/votings/content_blocks/landing_page/metrics_cell.rb +0 -19
  380. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/address.erb +0 -14
  381. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/map.erb +0 -18
  382. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/show.erb +0 -25
  383. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations_cell.rb +0 -56
  384. data/app/cells/decidim/votings/content_blocks/landing_page/statistics_cell.rb +0 -24
  385. data/app/cells/decidim/votings/content_blocks/landing_page/timeline/show.erb +0 -7
  386. data/app/cells/decidim/votings/content_blocks/landing_page/timeline_cell.rb +0 -17
  387. data/app/cells/decidim/votings/polling_officers/polling_officers_picker/polling_officers.erb +0 -12
  388. data/app/cells/decidim/votings/voting_m/data.erb +0 -21
  389. data/app/cells/decidim/votings/voting_m/footer.erb +0 -5
  390. data/app/cells/decidim/votings/voting_m_cell.rb +0 -94
  391. data/app/commands/decidim/votings/admin/publish_voting.rb +0 -40
  392. data/app/commands/decidim/votings/admin/unpublish_voting.rb +0 -40
  393. data/app/forms/decidim/votings/admin/monitoring_committee_member_form.rb +0 -27
  394. data/app/helpers/decidim/votings/admin/polling_officers_picker_helper.rb +0 -29
  395. data/app/packs/entrypoints/decidim_elections_admin_pending_action.js +0 -1
  396. data/app/packs/entrypoints/decidim_elections_admin_trustees_process.js +0 -1
  397. data/app/packs/entrypoints/decidim_elections_admin_vote_statistics.js +0 -1
  398. data/app/packs/entrypoints/decidim_elections_election_log.js +0 -1
  399. data/app/packs/entrypoints/decidim_elections_onboarding.js +0 -1
  400. data/app/packs/entrypoints/decidim_elections_trustee_key_ceremony.js +0 -1
  401. data/app/packs/entrypoints/decidim_elections_trustee_tally_started.js +0 -1
  402. data/app/packs/entrypoints/decidim_elections_trustee_trustee_zone.js +0 -1
  403. data/app/packs/entrypoints/decidim_elections_trustee_zone.js +0 -1
  404. data/app/packs/entrypoints/decidim_elections_trustee_zone.scss +0 -1
  405. data/app/packs/entrypoints/decidim_elections_voter_casting-vote.js +0 -1
  406. data/app/packs/entrypoints/decidim_elections_voter_new-vote.js +0 -1
  407. data/app/packs/entrypoints/decidim_elections_voter_setup-preview.js +0 -1
  408. data/app/packs/entrypoints/decidim_elections_voter_setup-vote.js +0 -1
  409. data/app/packs/entrypoints/decidim_elections_voter_verify-vote.js +0 -1
  410. data/app/packs/entrypoints/decidim_votings_admin_monitoring_committee_members_form.js +0 -1
  411. data/app/packs/entrypoints/decidim_votings_admin_polling_officers_form.js +0 -1
  412. data/app/packs/entrypoints/decidim_votings_admin_polling_officers_picker.js +0 -1
  413. data/app/packs/entrypoints/decidim_votings_admin_polling_stations_form.js +0 -1
  414. data/app/packs/entrypoints/decidim_votings_admin_update_census_dataset_status.js +0 -1
  415. data/app/packs/entrypoints/decidim_votings_admin_votings.js +0 -1
  416. data/app/packs/entrypoints/decidim_votings_admin_votings.scss +0 -1
  417. data/app/packs/entrypoints/decidim_votings_in-person-vote.js +0 -1
  418. data/app/packs/entrypoints/decidim_votings_voting-description-cell.js +0 -1
  419. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-edit-closure.js +0 -1
  420. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-in-person-vote.js +0 -1
  421. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-new-closure.js +0 -1
  422. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-sign-closure.js +0 -1
  423. data/app/packs/src/decidim/elections/onboarding.js +0 -5
  424. data/app/packs/src/decidim/votings/admin/monitoring_committee_members_form.js +0 -35
  425. data/app/packs/src/decidim/votings/voting-description-cell.js +0 -34
  426. data/app/packs/stylesheets/decidim/elections/focus/_accordion.scss +0 -36
  427. data/app/packs/stylesheets/decidim/elections/focus/_evote.scss +0 -344
  428. data/app/packs/stylesheets/decidim/elections/focus/_focus.scss +0 -128
  429. data/app/packs/stylesheets/decidim/elections/trustee_zone.scss +0 -24
  430. data/app/packs/stylesheets/decidim/votings/votings/_polling-stations-cell.scss +0 -6
  431. data/app/packs/stylesheets/decidim/votings/votings/_voting-description-cell.scss +0 -29
  432. data/app/views/decidim/elections/admin/answers/proposals_picker.html.erb +0 -1
  433. data/app/views/decidim/elections/elections/_count.html.erb +0 -1
  434. data/app/views/decidim/elections/elections/_election.html.erb +0 -1
  435. data/app/views/decidim/elections/elections/_filters.html.erb +0 -25
  436. data/app/views/decidim/elections/elections/_filters_small_view.html.erb +0 -18
  437. data/app/views/decidim/elections/votes/_focus_header.html.erb +0 -8
  438. data/app/views/decidim/elections/votes/_new_confirm_step_footer.html.erb +0 -23
  439. data/app/views/decidim/votings/admin/votings/polling_officers_picker.html.erb +0 -2
  440. data/app/views/decidim/votings/votings/_count.html.erb +0 -1
  441. data/app/views/decidim/votings/votings/_filters.html.erb +0 -25
  442. data/app/views/decidim/votings/votings/_filters_small_view.html.erb +0 -23
  443. data/app/views/decidim/votings/votings/_promoted_voting.html.erb +0 -27
  444. data/app/views/layouts/decidim/_election_votes_header.html.erb +0 -13
  445. data/app/views/layouts/decidim/election_votes.html.erb +0 -27
  446. data/app/views/layouts/decidim/voting_landing.html.erb +0 -13
  447. data/config/environment.rb +0 -3
  448. data/db/seeds/Exampledocument.pdf +0 -0
  449. data/db/seeds/city.jpeg +0 -0
  450. data/db/seeds/city2.jpeg +0 -0
  451. data/lib/decidim/elections/seeds/city.jpeg +0 -0
  452. data/lib/decidim/votings/test/capybara_polling_officers_picker.rb +0 -49
  453. /data/app/cells/decidim/votings/content_blocks/{landing_page/header_settings_form → hero_settings_form}/show.erb +0 -0
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ module ContentBlocks
6
+ class HeroCell < Decidim::ContentBlocks::ParticipatorySpaceHeroCell
7
+ delegate :start_time, :end_time, to: :resource
8
+
9
+ def has_hashtag?
10
+ false
11
+ end
12
+
13
+ def subtitle
14
+ "#{start_text} — #{end_text}"
15
+ end
16
+
17
+ def cta_text
18
+ return unless model
19
+
20
+ @cta_text ||= translated_attribute(model.settings.button_text).presence
21
+ end
22
+
23
+ def cta_path
24
+ return unless model
25
+
26
+ @cta_path ||= translated_attribute(model.settings.button_url).presence
27
+ end
28
+
29
+ private
30
+
31
+ def start_text
32
+ content_tag :span, title: t("activemodel.attributes.voting.start_time") do
33
+ format_date(start_time)
34
+ end
35
+ end
36
+
37
+ def end_text
38
+ content_tag :span, title: t("activemodel.attributes.voting.end_time") do
39
+ format_date(end_time)
40
+ end
41
+ end
42
+
43
+ def format_date(time)
44
+ if time
45
+ l(time.to_date, format: :decidim_short)
46
+ else
47
+ t("decidim.votings.votings_m.unspecified")
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ module ContentBlocks
6
+ class HeroSettingsFormCell < Decidim::ViewModel
7
+ alias form model
8
+
9
+ def content_block
10
+ options[:content_block]
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -3,39 +3,30 @@
3
3
  module Decidim
4
4
  module Votings
5
5
  module ContentBlocks
6
- class HighlightedVotingsCell < Decidim::ViewModel
7
- delegate :current_user, to: :controller
8
-
9
- def show
10
- render if highlighted_votings.any?
11
- end
6
+ class HighlightedVotingsCell < Decidim::ContentBlocks::HighlightedParticipatorySpacesCell
7
+ BLOCK_ID = "highlighted-votings"
12
8
 
13
- def max_results
14
- model.settings.max_results
15
- end
9
+ delegate :current_user, to: :controller
16
10
 
17
- def highlighted_votings
18
- OrganizationPrioritizedVotings.new(current_organization, current_user)
19
- .query
20
- .limit(max_results)
11
+ def highlighted_spaces
12
+ @highlighted_spaces ||= OrganizationPrioritizedVotings.new(current_organization, current_user).query
21
13
  end
22
14
 
23
15
  def i18n_scope
24
16
  "decidim.votings.pages.home.highlighted_votings"
25
17
  end
26
18
 
27
- def decidim_votings
28
- Decidim::Votings::Engine.routes.url_helpers
19
+ def all_path
20
+ Decidim::Votings::Engine.routes.url_helpers.votings_path
21
+ end
22
+
23
+ def max_results
24
+ model.settings.max_results
29
25
  end
30
26
 
31
27
  private
32
28
 
33
- def cache_hash
34
- hash = []
35
- hash.push(I18n.locale)
36
- hash.push(highlighted_votings.map(&:cache_key_with_version))
37
- hash.join(Decidim.cache_key_separator)
38
- end
29
+ def block_id = BLOCK_ID
39
30
  end
40
31
  end
41
32
  end
@@ -1,3 +1,3 @@
1
1
  <% form.fields_for :settings, form.object.settings do |settings_fields| %>
2
- <%= settings_fields.select :max_results, [4, 8, 12], prompt: "", label: label %>
2
+ <%= settings_fields.select :max_results, [3, 6, 9], prompt: "", label: %>
3
3
  <% end %>
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ module ContentBlocks
6
+ class MainDataCell < Decidim::ContentBlocks::ParticipatorySpaceMainDataCell
7
+ include VotingsHelper
8
+ include Decidim::ComponentPathHelper
9
+ include Decidim::SanitizeHelper
10
+ include ActiveLinkTo
11
+
12
+ delegate :description, to: :resource
13
+
14
+ private
15
+
16
+ def title_text
17
+ t("title", scope: "decidim.votings.votings.show")
18
+ end
19
+
20
+ def description_text
21
+ decidim_sanitize_editor_admin translated_attribute(description)
22
+ end
23
+
24
+ def nav_items
25
+ voting_nav_items(resource)
26
+ end
27
+
28
+ def decidim_votings
29
+ Decidim::Votings::Engine.routes.url_helpers
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ module ContentBlocks
6
+ # VotingsMetricChartsPresenter is not implemented yet. This cell will not
7
+ # display anything if metrics method is blank
8
+ class MetricsCell < Decidim::ContentBlocks::ParticipatorySpaceMetricsCell
9
+ def metrics
10
+ nil
11
+
12
+ # @metrics ||= VotingsMetricChartsPresenter.new(participatory_process: resource)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ <section class="content-block">
2
+ <h2 class="h2 decorator">
3
+ <%= t("heading", scope: "decidim.votings.content_blocks.landing_page.polling_stations") %>
4
+ </h2>
5
+
6
+ <% if polling_stations.any? %>
7
+ <div class="voting__map">
8
+ <div>
9
+ <% polling_stations.each do |polling_station| %>
10
+ <div class="voting__map-address">
11
+ <%== cell("decidim/address", polling_station) %>
12
+ </div>
13
+ <% end %>
14
+ </div>
15
+
16
+ <%= cell "decidim/votings/voting_map", polling_stations %>
17
+ </div>
18
+ <% else %>
19
+ <%= t("no_polling_stations", scope: "decidim.votings.content_blocks.landing_page.polling_stations") %>
20
+ <% end %>
21
+ </section>
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ module ContentBlocks
6
+ class PollingStationsCell < Decidim::ViewModel
7
+ include Decidim::MapHelper
8
+ include Decidim::SanitizeHelper
9
+ include Decidim::LayoutHelper
10
+ include Decidim::IconHelper
11
+ include Decidim::NeedsSnippets
12
+
13
+ delegate :current_participatory_space,
14
+ :snippets,
15
+ to: :controller
16
+
17
+ def show
18
+ return if current_participatory_space.online_voting?
19
+
20
+ render
21
+ end
22
+
23
+ private
24
+
25
+ def polling_stations
26
+ @polling_stations ||= current_participatory_space.polling_stations
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ module ContentBlocks
6
+ class StatisticsCell < Decidim::ContentBlocks::ParticipatorySpaceStatsCell
7
+ private
8
+
9
+ def stats
10
+ @stats ||= begin
11
+ voting = Decidim::Votings::Voting.find_by(id: model.scoped_resource_id)
12
+ Decidim::Votings::VotingStatsPresenter.new(voting:).collection
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,14 +1,15 @@
1
- <div class="picker-header">
2
- <h1><%= t("polling_officers_picker.choose_polling_officers", scope: "decidim.votings.admin.polling_officers") %></h1>
3
- <input type="text" name="polling_officers-filter" id="polling_officers_filter" placeholder="<%= t("decidim.admin.filters.search_placeholder.id_string_or_title_cont", collection: polling_officers_collection_name) %>">
4
- </div>
5
- <div class="picker-content picker-list" data-picker-path="<%= picker_path %>" data-picker-more="<%= more_polling_officers? %>">
6
- <%= render :polling_officers %>
7
- </div>
8
- <div class="picker-footer">
9
- <div class="buttons button--double">
10
- <a class="button" data-close=""><%= t("polling_officers_picker.close", scope: "decidim.votings.admin.polling_officers") %></a>
11
- </div>
12
- </div>
1
+ <label for="polling_officers_filter">
2
+ <%= t("polling_officers_picker.choose_polling_officers", scope: "decidim.votings.admin.polling_officers") %>
13
3
 
14
- <%= javascript_pack_tag "decidim_votings_admin_polling_officers_picker" %>
4
+ <span class="help-text"><%= t("polling_station_managers_help", scope: "decidim.votings.admin.polling_stations.form") %></span>
5
+ <select id="polling_officers_filter"
6
+ placeholder="<%= t("decidim.admin.filters.search_placeholder.id_string_or_title_cont", collection: polling_officers_collection_name) %>"
7
+ data-tm-name="<%= form_name %>"
8
+ data-tm-items="<%= selected_ids.to_json %>"
9
+ data-tm-no-results="<%= t("polling_officers_picker.no_polling_officers", scope: "decidim.votings.admin.polling_officers") %>"
10
+ multiple>
11
+ <% decorated_polling_officers.each do |polling_officer| %>
12
+ <option value="<%= polling_officer.id %>"> <%= polling_officer.name %> (@<%= polling_officer.nickname %>)</option>
13
+ <% end %>
14
+ </select>
15
+ </label>
@@ -9,13 +9,27 @@ module Decidim
9
9
  class PollingOfficersPickerCell < Decidim::ViewModel
10
10
  MAX_POLLING_OFFICERS = 1000
11
11
 
12
- def show
13
- return render :polling_officers if filtered?
12
+ alias component model
14
13
 
15
- render
14
+ def form
15
+ options[:form]
16
16
  end
17
17
 
18
- alias component model
18
+ def field
19
+ options[:field]
20
+ end
21
+
22
+ def form_name
23
+ "#{form.object_name}[#{method_name}]"
24
+ end
25
+
26
+ def method_name
27
+ field.to_s.sub(/s$/, "_ids")
28
+ end
29
+
30
+ def selected_ids
31
+ form.object.send(method_name)
32
+ end
19
33
 
20
34
  def filtered?
21
35
  !search_text.nil?
@@ -46,18 +60,7 @@ module Decidim
46
60
  end
47
61
 
48
62
  def filtered_polling_officers
49
- @filtered_polling_officers ||= if filtered?
50
- query = polling_officers.joins(:user)
51
- if search_text.start_with?("@")
52
- query.where("nickname ILIKE ?", "#{search_text.delete("@")}%")
53
- else
54
- query.where("name ILIKE ?", "%#{search_text}%").or(
55
- query.where("email ILIKE ?", "%#{search_text}%")
56
- )
57
- end
58
- else
59
- polling_officers
60
- end
63
+ @filtered_polling_officers ||= polling_officers
61
64
  end
62
65
 
63
66
  def polling_officers
@@ -1,9 +1,7 @@
1
1
  <% if has_images? %>
2
- <div class="row column">
3
- <% model.photos.each do |image| %>
4
- <a href="<%= image.url %>" target="_blank">
5
- <img class="thumbnail" src="<%= image.thumbnail_url %>" alt="<%= translated_attribute(image.title) %>">
6
- </a>
7
- <% end %>
8
- </div>
2
+ <% model.photos.each do |image| %>
3
+ <a href="<%= image.url %>" target="_blank">
4
+ <img class="thumbnail" src="<%= image.thumbnail_url %>" alt="<%= translated_attribute(image.title) %>">
5
+ </a>
6
+ <% end %>
9
7
  <% end %>
@@ -1,74 +1,70 @@
1
- <p>
2
- <%= content_tag :strong, t("recount_summary", scope: "decidim.votings.polling_station_closure_recount") %>
3
- </p>
1
+ <div class="form__wrapper">
2
+ <p class="font-semibold">
3
+ <%= t("recount_summary", scope: "decidim.votings.polling_station_closure_recount") %>
4
+ </p>
4
5
 
5
- <div class="card--secondary">
6
- <div class="card__content">
7
- <div>
6
+ <code>
7
+ <span>
8
+ <%= t("total_ballots", scope: "decidim.votings.polling_station_closure_recount") %>
9
+ <%= model.results.total_ballots&.first&.value %>
10
+ </span>
11
+ <div class="ml-4">
8
12
  <span>
9
- <%= content_tag :strong, t("total_ballots", scope: "decidim.votings.polling_station_closure_recount") %>
10
- <%= model.results.total_ballots&.first&.value %>
13
+ <%= t("total_valid_ballots", scope: "decidim.votings.polling_station_closure_recount") %>
14
+ <%= model.results.valid_ballots&.first&.value %>
15
+ </span>
16
+ <br>
17
+ <span>
18
+ <%= t("total_blank_ballots", scope: "decidim.votings.polling_station_closure_recount") %>
19
+ <%= model.results.blank_ballots&.first&.value %>
20
+ </span>
21
+ <br>
22
+ <span>
23
+ <%= t("total_null_ballots", scope: "decidim.votings.polling_station_closure_recount") %>
24
+ <%= model.results.null_ballots&.first&.value %>
11
25
  </span>
12
- <div class="ml-s">
13
- <span>
14
- <%= content_tag :strong, t("total_valid_ballots", scope: "decidim.votings.polling_station_closure_recount") %>
15
- <%= model.results.valid_ballots&.first&.value %>
16
- </span>
17
- <br>
18
- <span>
19
- <%= content_tag :strong, t("total_blank_ballots", scope: "decidim.votings.polling_station_closure_recount") %>
20
- <%= model.results.blank_ballots&.first&.value %>
21
- </span>
22
- <br>
23
- <span>
24
- <%= content_tag :strong, t("total_null_ballots", scope: "decidim.votings.polling_station_closure_recount") %>
25
- <%= model.results.null_ballots&.first&.value %>
26
- </span>
27
- </div>
28
26
  </div>
29
27
 
30
- <% model.election.questions.each do |question| %>
31
- <div class="mt-s">
32
- <span>
33
- <%= content_tag :strong, translated_attribute(question.title) %>
34
- </span>
28
+ <% model.election.questions.each do |question| %>
29
+ <span>
30
+ <%= translated_attribute(question.title) %>
31
+ </span>
35
32
 
36
- <div class="ml-s">
37
- <% question.answers.each.with_index(1) do |answer, index| %>
38
- <span>
39
- <%= content_tag :strong, translated_attribute(answer.title) %>:
33
+ <div class="ml-4">
34
+ <% question.answers.each.with_index(1) do |answer, index| %>
35
+ <span>
36
+ <%= translated_attribute(answer.title) %>:
40
37
 
41
- <%= content_tag :span, answer.results&.valid_answers&.first&.value %>
42
- </span>
43
- <% unless index == question.answers.count %>
44
- <br>
45
- <% end %>
38
+ <%= content_tag :span, answer.results&.valid_answers&.first&.value %>
39
+ </span>
40
+ <% unless index == question.answers.count %>
41
+ <br>
46
42
  <% end %>
43
+ <% end %>
47
44
 
48
- <% if question.nota_option? %>
49
- <br>
50
- <%= content_tag :strong, t("nota_option", scope: "decidim.votings.polling_station_closure_recount") %>
45
+ <% if question.nota_option? %>
46
+ <br>
47
+ <%= t("nota_option", scope: "decidim.votings.polling_station_closure_recount") %>
51
48
 
52
- <%= content_tag :span, question.results.blank_answers&.first&.value %>
53
- <% end %>
54
- </div>
49
+ <%= content_tag :span, question.results.blank_answers&.first&.value %>
50
+ <% end %>
55
51
  </div>
56
52
  <% end %>
57
- </div>
58
- </div>
59
-
60
- <p class="mt-sm">
61
- <%= content_tag :strong, t("polling_officer_notes", scope: "decidim.votings.polling_station_closure_recount") %>
62
- <br>
63
- <% if model.polling_officer_notes.present? %>
64
- <%= model.polling_officer_notes %>
65
- <% else %>
66
- <%= content_tag :span, t("polling_officer_notes_blank", scope: "decidim.votings.polling_station_closure_recount"), class: "text-muted" %>
67
- <% end %>
68
- </p>
53
+ </code>
69
54
 
70
- <% if model.signed? %>
71
55
  <p>
72
- <%= content_tag :strong, t("signed", scope: "decidim.votings.polling_station_closure_recount"), class: "text-success" %>
56
+ <%= t("polling_officer_notes", scope: "decidim.votings.polling_station_closure_recount") %>
57
+ <br>
58
+ <% if model.polling_officer_notes.present? %>
59
+ <%= model.polling_officer_notes %>
60
+ <% else %>
61
+ <%= content_tag :span, t("polling_officer_notes_blank", scope: "decidim.votings.polling_station_closure_recount") %>
62
+ <% end %>
73
63
  </p>
74
- <% end %>
64
+
65
+ <% if model.signed? %>
66
+ <p>
67
+ <%= t("signed", scope: "decidim.votings.polling_station_closure_recount") %>
68
+ </p>
69
+ <% end %>
70
+ </div>
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Votings
5
5
  # This cell renders the card for an instance of a Voting
6
- # the default size is the Medium Card (:m)
6
+ # the default size is the Search Card (:s)
7
7
  class VotingCell < Decidim::ViewModel
8
8
  def show
9
9
  cell card_size, model, options
@@ -12,7 +12,12 @@ module Decidim
12
12
  private
13
13
 
14
14
  def card_size
15
- "decidim/votings/voting_m"
15
+ case @options[:size]
16
+ when :s
17
+ "decidim/votings/voting_s"
18
+ else
19
+ "decidim/votings/voting_g"
20
+ end
16
21
  end
17
22
  end
18
23
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ class VotingDropdownMetadataCell < Decidim::ParticipatorySpaceDropdownMetadataCell
6
+ include VotingsHelper
7
+ include Decidim::ComponentPathHelper
8
+ include ActiveLinkTo
9
+
10
+ def decidim_votings
11
+ Decidim::Votings::Engine.routes.url_helpers
12
+ end
13
+
14
+ private
15
+
16
+ def nav_items_method = :voting_nav_items
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ # This cell renders the Grid (:g) voting card
6
+ # for a given instance of a Voting
7
+ class VotingGCell < Decidim::CardGCell
8
+ private
9
+
10
+ def resource_image_path
11
+ model.attached_uploader(:banner_image).path
12
+ end
13
+
14
+ def metadata_cell
15
+ "decidim/votings/voting_metadata"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ <%= dynamic_map_for polling_station_data_for_map(polling_stations) do %>
2
+ <template id="marker-popup">
3
+ <div class="space-y-6">
4
+ <div class="card__list">
5
+ <div class="card__list-content">
6
+ <h3 class="h4 card__list-title">${title}</h3>
7
+ <div class="card__list-metadata">
8
+ {{each JSON.parse(items)}}
9
+ <span>{{html icon}}${text}</span>
10
+ {{/each}}
11
+ </div>
12
+ </div>
13
+ </div>
14
+ </div>
15
+ </template>
16
+ <% end.html_safe %>
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ class VotingMapCell < VotingGCell
6
+ include Decidim::MapHelper
7
+ include Decidim::Votings::MapHelper
8
+
9
+ delegate :snippets, to: :controller
10
+
11
+ def show
12
+ return unless Decidim::Map.available?(:geocoding, :dynamic)
13
+
14
+ render
15
+ end
16
+
17
+ def polling_stations
18
+ model
19
+ end
20
+
21
+ private
22
+
23
+ def cache_hash
24
+ nil
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ # This cell renders metadata for an instance of a Voting
6
+ class VotingMetadataCell < Decidim::CardMetadataCell
7
+ delegate :voting_type, :period_status, :start_time, :end_time, to: :model
8
+
9
+ def initialize(*)
10
+ super
11
+
12
+ @items.prepend(*voting_items)
13
+ end
14
+
15
+ private
16
+
17
+ def voting_items
18
+ [dates_metadata_item, type_item, status_item]
19
+ end
20
+
21
+ def type_item
22
+ {
23
+ icon: resource_type_icon_key(voting_type),
24
+ text: t(voting_type, scope: "decidim.votings.votings_m.voting_type")
25
+ }
26
+ end
27
+
28
+ def status_item
29
+ return if period_status.blank?
30
+
31
+ { text: content_tag(:span, t(period_status, scope: "decidim.votings.votings_m.badge_name"), class: "label #{state_class}") }
32
+ end
33
+
34
+ def state_class
35
+ case period_status
36
+ when :ongoing
37
+ "success"
38
+ when :upcoming
39
+ "warning"
40
+ end
41
+ end
42
+
43
+ def start_date
44
+ return unless start_time
45
+
46
+ start_time.to_date
47
+ end
48
+
49
+ def end_date
50
+ return unless end_time
51
+
52
+ end_time.to_date
53
+ end
54
+
55
+ def dates_metadata_item
56
+ {
57
+ icon: "calendar-todo-line",
58
+ text: [
59
+ start_date.present? ? l(start_date, format: :decidim_short_with_month_name_short) : "?",
60
+ end_date.present? ? l(end_date, format: :decidim_short_with_month_name_short) : "?"
61
+ ].join(" → ")
62
+ }
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ # This cell renders the Search (:s) voting card
6
+ # for a given instance of a Voting
7
+ class VotingSCell < Decidim::CardSCell
8
+ end
9
+ end
10
+ end