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
@@ -5,9 +5,6 @@
5
5
  export default class VoteQuestionsComponent {
6
6
  constructor($voteWrapper) {
7
7
  this.$voteWrapper = $voteWrapper;
8
- this.$continueButton = this.$voteWrapper.find("a.focus__next");
9
- this.$confirmButton = this.$voteWrapper.find("a.focus__next.confirm");
10
- this.$continueSpan = this.$voteWrapper.find("span.disabled-continue");
11
8
  this.$currentStep = "";
12
9
  this.$currentStepMaxSelection = "";
13
10
  this.$answerCounter = 0;
@@ -23,27 +20,38 @@ export default class VoteQuestionsComponent {
23
20
  init() {
24
21
  this.setCurrentStep();
25
22
  this.toggleContinueButton();
26
- this.$confirmButton.addClass("show").removeClass("hide");
27
- $(".evote__counter-min").text(this.$answerCounter);
23
+
24
+ $("[data-counter-selection]").text(this.$answerCounter);
28
25
  this.answerCounter();
29
26
  this.disableCheckbox();
30
27
  }
31
28
 
32
29
  setCurrentStep() {
33
- this.$currentStep = this.$voteWrapper.find(".focus__step:visible")
30
+ this.$currentStep = this.$voteWrapper.find('[id^="step"]:not([hidden])')
31
+ this.$confirmButton = this.$currentStep.find('[id^="next"]');
32
+
34
33
  this.setSelections();
35
34
  this.onSelectionChange();
35
+ this.updateWizardSteps(this.$currentStep.attr("id"));
36
+ }
37
+
38
+ errored() {
39
+ this.$currentStep.attr("hidden", true);
40
+ this.$currentStep = this.$voteWrapper.find("#failed").attr("hidden", false);
36
41
  }
37
42
 
38
43
  toggleContinueButton() {
44
+ // ignore the button if the step is not a question
45
+ if (!this.isQuestion(this.$currentStep.attr("id"))) {
46
+ return
47
+ }
48
+
39
49
  if (this.checkAnswers()) {
40
50
  // next step enabled
41
- this.$continueButton.addClass("show").removeClass("hide")
42
- this.$continueSpan.addClass("hide").removeClass("show")
51
+ this.$confirmButton.attr("disabled", false)
43
52
  } else {
44
53
  // next step disabled
45
- this.$continueButton.addClass("hide").removeClass("show")
46
- this.$continueSpan.addClass("show").removeClass("hide")
54
+ this.$confirmButton.attr("disabled", true)
47
55
  }
48
56
  }
49
57
 
@@ -57,7 +65,7 @@ export default class VoteQuestionsComponent {
57
65
 
58
66
  answerCounter() {
59
67
  let checked = $(`#${this.$currentStep.attr("id")} .answer_input:checked`).length
60
- $(".evote__counter-min").text(checked);
68
+ $("[data-counter-selection]").text(checked);
61
69
  }
62
70
 
63
71
  // disable checkboxes if NOTA option is selected
@@ -72,26 +80,27 @@ export default class VoteQuestionsComponent {
72
80
  let checkId = $(event.target).attr("id");
73
81
  let checkStatus = event.target.checked;
74
82
 
75
- this.$currentStep.find(`[data-disabled-by='#${checkId}']`).each((_index, element) => {
83
+ this.$currentStep.find(`[data-disabled-by='${checkId}']`).each((_index, element) => {
84
+ const $checkbox = $(element).find("input[type=checkbox]")
85
+
76
86
  if (checkStatus) {
77
- $(element).addClass("is-disabled");
78
- $(element).find("input[type=checkbox]").prop("checked", false);
79
- $(element).find("input[type=checkbox]").attr("aria-disabled", "");
87
+ $checkbox.prop("disabled", true);
88
+ $checkbox.prop("checked", false);
89
+ $(element).attr("aria-disabled", true);
80
90
  } else {
81
- $(element).removeClass("is-disabled");
82
- $(element).find("input[type=checkbox]").removeAttr("aria-disabled");
91
+ $checkbox.prop("disabled", false);
92
+ $(element).removeAttr("aria-disabled");
83
93
  }
84
94
  });
85
95
  });
86
96
  }
87
97
 
88
98
  setSelections() {
89
- this.$currentStepMaxSelection = this.$currentStep.find(".evote__options").data("max-selection")
99
+ this.$currentStepMaxSelection = this.$currentStep.find('[id^="question"]').data("max-selection")
90
100
  }
91
101
 
92
-
93
102
  onSelectionChange() {
94
- let $voteOptions = this.$currentStep.find(".evote__options");
103
+ let $voteOptions = this.$currentStep.find('[id^="question"]');
95
104
  $voteOptions.on("change", () => {
96
105
  this.toggleContinueButton();
97
106
  this.toggleConfirmAnswers();
@@ -99,26 +108,63 @@ export default class VoteQuestionsComponent {
99
108
  });
100
109
  }
101
110
 
111
+ updateWizardSteps(id) {
112
+ const wizard = document.getElementById("wizard-steps")
113
+ const heading = document.getElementById("heading")
114
+
115
+ if (heading) {
116
+ // this step has no heading 🤷‍♀️
117
+ if (id === "step-encrypting") {
118
+ heading.hidden = true
119
+
120
+ return
121
+ }
122
+
123
+ heading.hidden = false
124
+ }
125
+
126
+ if (wizard) {
127
+ let selector = id
128
+
129
+ if (this.isQuestion(id)) {
130
+ selector = "step-election"
131
+ }
132
+
133
+ wizard.querySelectorAll("[data-step]").forEach((element) => {
134
+ if (element.dataset.step === selector) {
135
+ element.setAttribute("aria-current", "step")
136
+ } else {
137
+ element.removeAttribute("aria-current")
138
+ }
139
+ })
140
+ }
141
+ }
142
+
143
+ // the question ids always end with a number
144
+ isQuestion(id) {
145
+ return (/[0-9]+$/).test(id);
146
+ }
147
+
102
148
  // receive confirmed answers
103
149
  toggleConfirmAnswers() {
104
150
  $(".answer_input:checked").each((_index, element) => {
105
- const confirmedAnswer = $(".evote__confirm").find(`#${element.value}`);
106
- $(confirmedAnswer).removeClass("hide")
151
+ const confirmedAnswer = $("#step-confirm").find(`#${element.value}`);
152
+ $(confirmedAnswer).attr("hidden", false)
107
153
  })
108
154
 
109
155
  $(".answer_input").not(":checked").each((_index, element) => {
110
- const confirmedAnswer = $(".evote__confirm").find(`#${element.value}`);
111
- $(confirmedAnswer).addClass("hide")
156
+ const confirmedAnswer = $("#step-confirm").find(`#${element.value}`);
157
+ $(confirmedAnswer).attr("hidden", true)
112
158
  })
113
159
 
114
160
  $(".nota_input:checked").each((_index, element) => {
115
- const confirmedAnswer = $(".evote__confirm").find(`.${element.value}`);
116
- $(confirmedAnswer).removeClass("hide")
161
+ const confirmedAnswer = $("#step-confirm").find(`#${element.value}`);
162
+ $(confirmedAnswer).attr("hidden", false)
117
163
  })
118
164
 
119
165
  $(".nota_input").not(":checked").each((_index, element) => {
120
- const confirmedAnswer = $(".evote__confirm").find(`.${element.value}`);
121
- $(confirmedAnswer).addClass("hide")
166
+ const confirmedAnswer = $("#step-confirm").find(`#${element.value}`);
167
+ $(confirmedAnswer).attr("hidden", true)
122
168
  })
123
169
  }
124
170
  }
@@ -1,35 +1,20 @@
1
- $(() => {
2
- const $content = $(".picker-content"),
3
- pickerMore = $content.data("picker-more"),
4
- pickerPath = $content.data("picker-path"),
5
- toggleNoPollingOfficers = () => {
6
- const showNoPollingOfficers = $("#polling_officers_list li:visible").length === 0
7
- $("#no_polling_officers").toggle(showNoPollingOfficers)
8
- }
9
-
10
- let jqxhr = null
11
-
12
- toggleNoPollingOfficers()
13
-
14
- $(".data_picker-modal-content").on("change keyup", "#polling_officers_filter", (event) => {
15
- const filter = event.target.value.toLowerCase()
1
+ import TomSelect from "tom-select/dist/cjs/tom-select.popular";
16
2
 
17
- if (pickerMore) {
18
- if (jqxhr !== null) {
19
- jqxhr.abort()
3
+ document.addEventListener("DOMContentLoaded", () => {
4
+ const tagContainers = document.querySelectorAll("#polling_officers_filter");
5
+ tagContainers.forEach((container) => {
6
+ const { tmName, tmItems, tmNoResults } = container.dataset
7
+ const config = {
8
+ plugins: ["remove_button", "dropdown_input"],
9
+ allowEmptyOption: true,
10
+ items: JSON.parse(tmItems),
11
+ render: {
12
+ item: (data, escape) => `<div>${escape(data.text)}<input type="hidden" name="${tmName}[]" value="${data.value}" /></div>`,
13
+ // eslint-disable-next-line camelcase
14
+ ...(tmNoResults && { no_results: () => `<div class="no-results">${tmNoResults}</div>` })
20
15
  }
16
+ };
21
17
 
22
- $content.html("<div class='loading-spinner'></div>")
23
- jqxhr = $.get(`${pickerPath}?q=${filter}`, (data) => {
24
- $content.html(data)
25
- jqxhr = null
26
- toggleNoPollingOfficers()
27
- })
28
- } else {
29
- $("#polling_officers_list li").each((index, li) => {
30
- $(li).toggle(li.textContent.toLowerCase().includes(filter))
31
- })
32
- toggleNoPollingOfficers()
33
- }
18
+ return new TomSelect(container, config)
34
19
  })
35
- })
20
+ });
@@ -2,5 +2,8 @@ import attachGeocoding from "src/decidim/geocoding/attach_input"
2
2
 
3
3
  $(() => {
4
4
  const $form = $(".edit_polling_station, .new_polling_station");
5
- attachGeocoding($form.find("#polling_station_address"));
5
+
6
+ if ($form.length > 0) {
7
+ attachGeocoding($form.find("#polling_station_address"));
8
+ }
6
9
  })
@@ -1,7 +1,7 @@
1
1
  import createFieldDependentInputs from "src/decidim/admin/field_dependent_inputs.component"
2
2
 
3
3
  $(() => {
4
- const $participantType = $("#polling_officer_existing_user");
4
+ const $participantType = $("#voting_user_role_existing_user");
5
5
 
6
6
  createFieldDependentInputs({
7
7
  controllerField: $participantType,
@@ -4,7 +4,7 @@ import "src/decidim/elections/broken_promises_handler";
4
4
  import { Client } from "@decidim/decidim-bulletin_board";
5
5
 
6
6
  $(async () => {
7
- const $inPersonVoteWrapper = $(".in-person-vote-wrapper");
7
+ const $inPersonVoteWrapper = $("#in-person-vote-wrapper");
8
8
  if ($inPersonVoteWrapper.length > 0) {
9
9
  const bulletinBoardClient = new Client({
10
10
  apiEndpointUrl: $inPersonVoteWrapper.data("apiEndpointUrl")
@@ -16,8 +16,8 @@ $(async () => {
16
16
  $("form.update_vote_status").trigger("submit");
17
17
  }
18
18
 
19
- $(".js-verify-document").on("click", () => {
20
- $("#verify-document").hide();
21
- $("#complete-voting").removeClass("hide");
19
+ $("#js-verify-document").on("click", () => {
20
+ $("#verify-document").attr("hidden", true);
21
+ $("#complete-voting").attr("hidden", false);
22
22
  });
23
23
  });
@@ -12,11 +12,11 @@ $(() => {
12
12
  let recount = validBallotsCount + blankBallotsCount + nullBallotsCount
13
13
 
14
14
  if (recount === totalBallots) {
15
- $("#submit-ballot-recount").removeClass("hide");
16
- $("#btn-modal-closure-results-count-error").addClass("hide");
15
+ $("#submit-ballot-recount").attr("hidden", false);
16
+ $("#btn-modal-closure-results-count-error").attr("hidden", true);
17
17
  } else {
18
- $("#submit-ballot-recount").addClass("hide");
19
- $("#btn-modal-closure-results-count-error").removeClass("hide");
18
+ $("#submit-ballot-recount").attr("hidden", true);
19
+ $("#btn-modal-closure-results-count-error").attr("hidden", false);
20
20
  }
21
21
  };
22
22
 
@@ -1,5 +1,5 @@
1
1
  $(() => {
2
2
  $("#person_voted_checkbox").on("change", (event) => {
3
- $("#submit_complete_voting").toggleClass("disabled", !$(event.target).is(":checked"));
3
+ $("#submit_complete_voting").attr("disabled", !$(event.target).is(":checked"));
4
4
  });
5
5
  });
@@ -8,20 +8,18 @@ $(() => {
8
8
  const totalBallotsInputValue = parseInt($totalBallotsInput.val(), 10);
9
9
  const electionVotesInputValue = parseInt($electionVotesInput.val(), 10);
10
10
 
11
-
12
11
  if (totalBallotsInputValue === electionVotesInputValue) {
13
- $submitBtn.removeClass("disabled hide");
14
- $modalBtn.addClass("hide");
12
+ $submitBtn.find("button").attr("disabled", false);
13
+ $submitBtn.attr("hidden", false);
14
+ $modalBtn.attr("hidden", true);
15
15
  } else {
16
- $submitBtn.addClass("hide");
17
- $modalBtn.removeClass("hide");
16
+ $submitBtn.attr("hidden", true);
17
+ $modalBtn.attr("hidden", false);
18
18
  }
19
19
  };
20
20
 
21
21
  $totalBallotsInput.on("blur", checkValues);
22
22
 
23
- $("#submit-verify-votes").addClass("disabled");
24
-
25
23
  $totalBallotsInput.on("keyup", function() {
26
24
  $("#modal-total-ballots-value").html(parseInt($totalBallotsInput.val(), 10));
27
25
  $("#envelopes_result_polling_officer_notes").val("")
@@ -30,6 +28,6 @@ $(() => {
30
28
  $("#envelopes_result_polling_officer_notes").on("keyup", function() {
31
29
  let modalPollingOfficerNotes = $("#envelopes_result_polling_officer_notes").val()
32
30
 
33
- $("#btn-submit-from-modal").toggleClass("disabled", !modalPollingOfficerNotes.trim());
31
+ $("#btn-submit-from-modal").attr("disabled", !modalPollingOfficerNotes.trim());
34
32
  });
35
33
  });
@@ -1,8 +1,202 @@
1
- @import "stylesheets/decidim/elections/focus/accordion";
2
- @import "stylesheets/decidim/elections/focus/evote";
3
- @import "stylesheets/decidim/elections/focus/focus";
1
+ .election {
2
+ &__section {
3
+ &-title {
4
+ @apply flex gap-1 items-center;
4
5
 
5
- .card__icondata ul li:not(:first-child) strong,
6
- .card__block ul li:not(:first-child) strong{
7
- font-size: 100%;
6
+ svg {
7
+ @apply w-6 h-6 text-tertiary fill-current;
8
+ }
9
+ }
10
+
11
+ &-desc {
12
+ @apply text-gray-2 my-6;
13
+ }
14
+ }
15
+
16
+ &__accordion {
17
+ @apply border-4 border-background rounded px-3 py-2;
18
+
19
+ &-trigger {
20
+ @apply flex justify-between items-center w-full font-bold text-secondary hover:underline focus:outline-none focus:underline;
21
+
22
+ > :last-child {
23
+ @apply flex-none;
24
+ }
25
+
26
+ svg {
27
+ @apply w-8 h-8 text-secondary fill-current first:block last:hidden;
28
+ }
29
+
30
+ &[role="button"][aria-expanded="true"] svg {
31
+ @apply first:hidden last:block;
32
+ }
33
+ }
34
+
35
+ &-panel {
36
+ @apply border-t border-gray-3 mt-4 pt-4 space-y-4;
37
+
38
+ ul {
39
+ @apply list-decimal px-4;
40
+ }
41
+ }
42
+ }
43
+
44
+ &__aside {
45
+ &-heading {
46
+ @apply uppercase font-semibold text-gray-2 text-sm;
47
+ }
48
+
49
+ &-link {
50
+ @apply flex items-center gap-2 text-sm;
51
+
52
+ svg {
53
+ @apply w-4 h-4 flex-none text-gray fill-current;
54
+ }
55
+
56
+ a {
57
+ @apply text-md text-secondary;
58
+ }
59
+ }
60
+ }
61
+ }
62
+
63
+ .election-log {
64
+ &__entry {
65
+ @apply flex flex-col gap-2 rounded border-4 border-background p-4 mb-8 last:mb-0 text-gray-2;
66
+ }
67
+
68
+ &__hash,
69
+ &__time {
70
+ @apply text-sm empty:hidden;
71
+ }
72
+
73
+ &__pre {
74
+ @apply bg-background p-2 rounded;
75
+ }
76
+ }
77
+
78
+ .election-question {
79
+ @apply block rounded p-4 border-4 border-background flex items-center text-lg text-gray-2 hover:border-tertiary focus:border-tertiary cursor-pointer;
80
+
81
+ &[aria-disabled="true"] {
82
+ @apply text-gray cursor-not-allowed hover:border-background focus:border-background;
83
+ }
84
+
85
+ &__counter {
86
+ @apply font-semibold text-black text-lg bg-tertiary inline-block;
87
+ }
88
+
89
+ /* overwrite default accordion styles */
90
+ [id^="step"][aria-hidden="true"] {
91
+ @apply hidden;
92
+ }
93
+
94
+ &__container {
95
+ @apply space-y-4 mb-8;
96
+ }
97
+
98
+ &__intro {
99
+ @apply py-8 border-t-2 border-background space-y-4;
100
+ }
101
+
102
+ &__description {
103
+ @apply text-gray-2 text-lg;
104
+ }
105
+
106
+ &__maxselections {
107
+ @apply flex items-center justify-between gap-2 text-gray-2;
108
+ }
109
+
110
+ &__answer {
111
+ @apply flex flex-col items-start gap-4 py-8 text-gray-2 border-t-2 border-background;
112
+
113
+ &-option {
114
+ @apply flex items-center justify-between w-full text-lg;
115
+ }
116
+ }
117
+
118
+ &__ballot {
119
+ @apply flex flex-col items-start gap-2 py-8 border-t-2 border-background text-lg text-gray-2;
120
+ }
121
+
122
+ &__modal {
123
+ &-explanation {
124
+ @apply space-y-4;
125
+ }
126
+
127
+ &-grid {
128
+ @apply grid grid-cols-2 gap-4;
129
+ }
130
+
131
+ img {
132
+ @apply aspect-video object-cover h-full w-full;
133
+ }
134
+
135
+ ul {
136
+ @apply list-disc;
137
+ }
138
+
139
+ li {
140
+ @apply ml-4;
141
+ }
142
+
143
+ a {
144
+ @apply text-secondary;
145
+ }
146
+ }
147
+ }
148
+
149
+ .election-trustee {
150
+ &__container {
151
+ @apply space-y-6 [&_p]:text-gray-2;
152
+ }
153
+
154
+ &__list {
155
+ @apply list-disc pl-4 text-gray-2;
156
+ }
157
+
158
+ &__table {
159
+ @apply text-left w-full border-2 border-background;
160
+
161
+ th,
162
+ td {
163
+ @apply px-4 py-2;
164
+ }
165
+
166
+ th {
167
+ @apply bg-background;
168
+ }
169
+
170
+ tr:nth-child(even) td {
171
+ @apply bg-gray-3;
172
+ }
173
+
174
+ a {
175
+ @apply text-secondary underline;
176
+ }
177
+
178
+ .step_status {
179
+ span {
180
+ @apply hidden;
181
+ }
182
+
183
+ &[data-step-status="pending"] .pending,
184
+ &[data-step-status="processing"] .processing,
185
+ &[data-step-status="completed"] .completed {
186
+ @apply block;
187
+ }
188
+ }
189
+ }
190
+
191
+ &__submit {
192
+ @apply p-4 border-4 border-background space-y-4 rounded;
193
+ }
194
+
195
+ &__buttons {
196
+ @apply flex items-center gap-4;
197
+
198
+ [hidden] {
199
+ @apply hidden;
200
+ }
201
+ }
8
202
  }
@@ -1,12 +1,12 @@
1
- .ballot-style__question--checked{
1
+ .ballot-style__question--checked {
2
2
  color: green;
3
3
  }
4
4
 
5
- .ballot-style__question--unchecked{
5
+ .ballot-style__question--unchecked {
6
6
  color: red;
7
7
  }
8
8
 
9
- .ballot-style__question-header{
9
+ .ballot-style__question-header {
10
10
  max-width: 100px;
11
11
  display: table-cell;
12
12
  overflow: hidden;
@@ -1,9 +1,9 @@
1
- .polling_station_closure_certificate_results{
1
+ .polling_station_closure_certificate_results {
2
2
  display: grid;
3
3
  grid-template-columns: 1fr 1fr;
4
4
  align-items: center;
5
5
 
6
- @media only screen and (max-width: 900px){
6
+ @media only screen and (max-width: 900px) {
7
7
  grid-template-columns: 1fr;
8
8
  }
9
9
  }
@@ -1,3 +1,3 @@
1
- .result.not_answer td:first-child{
1
+ .result.not_answer td:first-child {
2
2
  font-style: italic;
3
3
  }
@@ -1,3 +1,23 @@
1
1
  @import "stylesheets/decidim/votings/admin/votings/ballot-styles";
2
2
  @import "stylesheets/decidim/votings/admin/votings/monitoring-committee-polling-station-closures";
3
3
  @import "stylesheets/decidim/votings/admin/votings/results";
4
+ @import "tom-select/dist/scss/tom-select";
5
+
6
+ /* overwrite tom-select defaults */
7
+ .ts {
8
+ &-control {
9
+ @apply border-gray text-md min-h-[40px];
10
+
11
+ input {
12
+ @apply font-normal text-black text-md;
13
+ }
14
+ }
15
+
16
+ &-dropdown {
17
+ @apply text-md text-gray-2 font-normal;
18
+
19
+ .active {
20
+ @apply text-white bg-secondary;
21
+ }
22
+ }
23
+ }
@@ -1,2 +1,53 @@
1
- @import "stylesheets/decidim/votings/votings/polling-stations-cell";
2
- @import "stylesheets/decidim/votings/votings/voting-description-cell";
1
+ .voting {
2
+ &__map {
3
+ @apply flex flex-col-reverse md:flex-row items-start gap-4 only:[&>*]:grow first:[&>*]:min-w-[40%];
4
+
5
+ & > :last-child:not(:only-child) {
6
+ @apply aspect-[4/3] w-full rounded overflow-hidden;
7
+ }
8
+
9
+ &-address {
10
+ @apply border-4 border-background rounded p-4 mt-4 first:mt-0;
11
+ }
12
+ }
13
+
14
+ &__polling-station {
15
+ @apply space-y-4 py-4;
16
+
17
+ & > * {
18
+ @apply flex items-center gap-2;
19
+ }
20
+
21
+ &__accordion {
22
+ @apply border-4 border-background rounded p-4;
23
+
24
+ &-trigger {
25
+ @apply flex justify-between items-center w-full text-secondary hover:underline;
26
+ }
27
+
28
+ &-arrow {
29
+ @apply w-8 h-8 text-secondary fill-current first-of-type:block last-of-type:hidden;
30
+ }
31
+
32
+ [role="button"][aria-expanded="true"] &-arrow {
33
+ @apply first-of-type:hidden last-of-type:block;
34
+ }
35
+
36
+ &-panel {
37
+ @apply border-t border-gray-3 mt-4 pt-4;
38
+
39
+ a {
40
+ @apply hover:underline;
41
+ }
42
+ }
43
+
44
+ & + & {
45
+ @apply mt-4;
46
+ }
47
+ }
48
+
49
+ & + & {
50
+ @apply mt-4 border-t border-background;
51
+ }
52
+ }
53
+ }
@@ -140,11 +140,11 @@ module Decidim
140
140
  end
141
141
 
142
142
  def user_monitoring_committee?
143
- Decidim::Votings::MonitoringCommitteeMember.exists?(user: user)
143
+ Decidim::Votings::MonitoringCommitteeMember.exists?(user:)
144
144
  end
145
145
 
146
146
  def user_monitoring_committee_for_voting?
147
- Decidim::Votings::MonitoringCommitteeMember.exists?(user: user, voting: voting)
147
+ Decidim::Votings::MonitoringCommitteeMember.exists?(user:, voting:)
148
148
  end
149
149
 
150
150
  def voting
@@ -6,8 +6,8 @@ module Decidim
6
6
  # This class holds the logic to present a `Decidim::Election`
7
7
  # for the `AdminLog` log.
8
8
  #
9
- # Usage should be automatic and you shouldn't need to call this class
10
- # directly, but here's an example:
9
+ # Usage should be automatic and you should not need to call this class
10
+ # directly, but here is an example:
11
11
  #
12
12
  # action_log = Decidim::ActionLog.last
13
13
  # view_helpers # => this comes from the views