decidim-decidim_awesome 0.8.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +363 -0
  3. data/README.md +375 -100
  4. data/Rakefile +2 -1
  5. data/app/cells/concerns/decidim/decidim_awesome/global_menu_cell_override.rb +20 -0
  6. data/app/cells/concerns/decidim/decidim_awesome/proposal_l_cell_override.rb +26 -0
  7. data/app/cells/decidim/decidim_awesome/content_blocks/map/show.erb +5 -12
  8. data/app/cells/decidim/decidim_awesome/content_blocks/map_cell.rb +7 -7
  9. data/app/cells/decidim/decidim_awesome/voting/proposal_metadata_cell.rb +69 -0
  10. data/app/cells/decidim/decidim_awesome/voting/voting_cards_base_cell.rb +40 -0
  11. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/modal.erb +18 -0
  12. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/show.erb +40 -0
  13. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/vote_block_for.erb +16 -0
  14. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal_cell.rb +90 -0
  15. data/app/commands/concerns/decidim/decidim_awesome/admin/needs_constraint_helpers.rb +2 -2
  16. data/app/commands/concerns/decidim/decidim_awesome/proposals/admin/update_proposal_override.rb +31 -0
  17. data/app/commands/concerns/decidim/decidim_awesome/proposals/create_collaborative_draft_override.rb +27 -0
  18. data/app/commands/concerns/decidim/decidim_awesome/proposals/create_proposal_override.rb +27 -0
  19. data/app/commands/concerns/decidim/decidim_awesome/proposals/update_collaborative_draft_override.rb +27 -0
  20. data/app/commands/concerns/decidim/decidim_awesome/proposals/update_proposal_override.rb +26 -0
  21. data/app/commands/concerns/decidim/decidim_awesome/system/create_organization_override.rb +29 -0
  22. data/app/commands/concerns/decidim/decidim_awesome/system/update_organization_override.rb +35 -0
  23. data/app/commands/concerns/decidim/decidim_awesome/update_account_override.rb +30 -0
  24. data/app/commands/decidim/decidim_awesome/admin/create_constraint.rb +3 -3
  25. data/app/commands/decidim/decidim_awesome/admin/create_custom_redirect.rb +1 -1
  26. data/app/commands/decidim/decidim_awesome/admin/create_menu_hack.rb +1 -1
  27. data/app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb +5 -4
  28. data/app/commands/decidim/decidim_awesome/admin/create_scoped_admin.rb +1 -1
  29. data/app/commands/decidim/decidim_awesome/admin/create_scoped_style.rb +4 -3
  30. data/app/commands/decidim/decidim_awesome/admin/destroy_constraint.rb +1 -1
  31. data/app/commands/decidim/decidim_awesome/admin/destroy_custom_redirect.rb +2 -2
  32. data/app/commands/decidim/decidim_awesome/admin/destroy_menu_hack.rb +2 -2
  33. data/app/commands/decidim/decidim_awesome/admin/destroy_proposal_custom_field.rb +7 -4
  34. data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_admin.rb +1 -1
  35. data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_style.rb +7 -5
  36. data/app/commands/decidim/decidim_awesome/admin/rename_scope_label.rb +2 -2
  37. data/app/commands/decidim/decidim_awesome/admin/update_config.rb +2 -3
  38. data/app/commands/decidim/decidim_awesome/admin/update_constraint.rb +3 -3
  39. data/app/commands/decidim/decidim_awesome/admin/update_custom_redirect.rb +3 -3
  40. data/app/commands/decidim/decidim_awesome/admin/update_menu_hack.rb +1 -1
  41. data/app/commands/decidim/decidim_awesome/command.rb +8 -0
  42. data/app/commands/decidim/decidim_awesome/create_editor_image.rb +2 -2
  43. data/app/controllers/concerns/decidim/decidim_awesome/admin/maintenance_context.rb +43 -0
  44. data/app/controllers/concerns/decidim/decidim_awesome/admin_accountability/admin/filterable.rb +67 -0
  45. data/app/controllers/concerns/decidim/decidim_awesome/admin_accountability/admin/filterable_helper.rb +38 -0
  46. data/app/controllers/concerns/decidim/decidim_awesome/check_login_authorizations.rb +60 -0
  47. data/app/controllers/concerns/decidim/decidim_awesome/content_security_policy.rb +34 -0
  48. data/app/controllers/concerns/decidim/decidim_awesome/limit_pending_amendments.rb +35 -0
  49. data/app/controllers/concerns/decidim/decidim_awesome/needs_awesome_config.rb +0 -2
  50. data/app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb +3 -3
  51. data/app/controllers/concerns/decidim/decidim_awesome/proposals/memoize_extra_fields.rb +23 -0
  52. data/app/controllers/concerns/decidim/decidim_awesome/proposals/orderable_override.rb +94 -0
  53. data/app/controllers/concerns/decidim/decidim_awesome/proposals/proposal_votes_controller_override.rb +64 -0
  54. data/app/controllers/concerns/decidim/decidim_awesome/use_user_time_zone.rb +32 -0
  55. data/app/controllers/decidim/decidim_awesome/admin/admin_accountability_controller.rb +72 -0
  56. data/app/controllers/decidim/decidim_awesome/admin/admin_authorizations_controller.rb +122 -0
  57. data/app/controllers/decidim/decidim_awesome/admin/application_controller.rb +2 -0
  58. data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +21 -17
  59. data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +17 -8
  60. data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +27 -20
  61. data/app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb +6 -8
  62. data/app/controllers/decidim/decidim_awesome/admin/maintenance_controller.rb +76 -0
  63. data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +6 -8
  64. data/app/controllers/decidim/decidim_awesome/admin/proposal_custom_fields_controller.rb +14 -6
  65. data/app/controllers/decidim/decidim_awesome/admin/scoped_admins_controller.rb +2 -2
  66. data/app/controllers/decidim/decidim_awesome/admin/scoped_styles_controller.rb +14 -6
  67. data/app/controllers/decidim/decidim_awesome/blank_component_controller.rb +8 -3
  68. data/app/controllers/decidim/decidim_awesome/editor_images_controller.rb +3 -5
  69. data/app/controllers/decidim/decidim_awesome/iframe_component/iframe_controller.rb +18 -5
  70. data/app/controllers/decidim/decidim_awesome/required_authorizations_controller.rb +58 -0
  71. data/app/forms/concerns/decidim/decidim_awesome/account_form_override.rb +25 -0
  72. data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_customizations.rb +57 -0
  73. data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb +21 -0
  74. data/app/forms/concerns/decidim/decidim_awesome/system/organization_form_override.rb +34 -0
  75. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +88 -20
  76. data/app/forms/decidim/decidim_awesome/admin/custom_redirect_form.rb +3 -3
  77. data/app/forms/decidim/decidim_awesome/admin/intergram_form.rb +4 -0
  78. data/app/forms/decidim/decidim_awesome/admin/menu_form.rb +5 -5
  79. data/app/helpers/concerns/decidim/decidim_awesome/amendments_helper_override.rb +65 -0
  80. data/app/helpers/concerns/decidim/decidim_awesome/breadcrumb_helper_override.rb +23 -0
  81. data/app/helpers/concerns/decidim/decidim_awesome/proposals/application_helper_override.rb +110 -0
  82. data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +12 -29
  83. data/app/helpers/decidim/decidim_awesome/admin/system_checker_helpers.rb +4 -0
  84. data/app/helpers/decidim/decidim_awesome/map_helper.rb +38 -52
  85. data/app/jobs/decidim/decidim_awesome/destroy_private_data_job.rb +22 -0
  86. data/app/jobs/decidim/decidim_awesome/export_admin_actions_job.rb +28 -0
  87. data/app/models/concerns/decidim/decidim_awesome/has_proposal_extra_fields.rb +80 -0
  88. data/app/models/concerns/decidim/decidim_awesome/has_vote_weight.rb +30 -0
  89. data/app/models/decidim/decidim_awesome/awesome_config.rb +1 -2
  90. data/app/models/decidim/decidim_awesome/config_constraint.rb +0 -2
  91. data/app/models/decidim/decidim_awesome/editor_image.rb +0 -3
  92. data/app/models/decidim/decidim_awesome/paper_trail_version.rb +117 -0
  93. data/app/models/decidim/decidim_awesome/proposal_extra_field.rb +45 -0
  94. data/app/models/decidim/decidim_awesome/vote_weight.rb +30 -0
  95. data/app/overrides/decidim/account/show/add_timezone_select.html.erb.deface +3 -0
  96. data/app/overrides/decidim/admin/officializations/index/add_modal.html.erb.deface +3 -0
  97. data/app/overrides/decidim/admin/officializations/index/add_td.html.erb.deface +5 -0
  98. data/app/overrides/decidim/admin/officializations/index/add_th.html.erb.deface +5 -0
  99. data/app/overrides/decidim/proposals/admin/proposals/_form/replace_editor.html.erb.deface +3 -0
  100. data/app/overrides/decidim/proposals/admin/proposals/show/add_private_body.html.erb.deface +7 -0
  101. data/app/overrides/decidim/proposals/admin/proposals/show/replace_body.html.erb.deface +5 -0
  102. data/app/overrides/decidim/proposals/proposals/_proposal_aside/limit_amendments_modal.html.erb.deface +5 -0
  103. data/app/overrides/decidim/proposals/proposals/_vote_button/replace_vote_button.html.erb.deface +7 -0
  104. data/app/overrides/decidim/proposals/proposals/_votes_count/replace_counter.html.erb.deface +10 -0
  105. data/app/overrides/decidim/system/organizations/_advanced_settings/add_awesome_config.html.erb.deface +9 -0
  106. data/app/{views/layouts/decidim/_head.html.erb → overrides/layouts/decidim/_decidim_javascript/add_awesome_tags.html.erb.deface} +2 -1
  107. data/app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface +7 -0
  108. data/app/overrides/layouts/decidim/admin/_header/add_awesome_custom_styles.html.erb.deface +3 -0
  109. data/app/overrides/layouts/decidim/admin/_header/add_awesome_tags.html.erb.deface +10 -0
  110. data/app/packs/entrypoints/decidim_admin_decidim_awesome.js +2 -2
  111. data/app/packs/entrypoints/decidim_admin_decidim_awesome_global.js +4 -0
  112. data/app/packs/entrypoints/decidim_admin_decidim_awesome_global.scss +1 -0
  113. data/app/packs/entrypoints/decidim_admin_decidim_awesome_search_form.scss +1 -0
  114. data/app/packs/entrypoints/decidim_decidim_awesome.js +2 -2
  115. data/app/packs/entrypoints/decidim_decidim_awesome_map.scss +1 -1
  116. data/app/packs/entrypoints/decidim_editor.js +14 -0
  117. data/app/packs/images/decidim/decidim_awesome/handcard.svg +14 -0
  118. data/app/packs/images/decidim/decidim_awesome/handcheck.svg +17 -0
  119. data/app/packs/images/decidim/decidim_awesome/pokecode-logo.png +0 -0
  120. data/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +96 -69
  121. data/app/packs/src/decidim/decidim_awesome/admin/check_redirections.js +46 -41
  122. data/app/packs/src/decidim/decidim_awesome/admin/codemirror.js +3 -3
  123. data/app/packs/src/decidim/decidim_awesome/admin/constraint_form_events.js +115 -0
  124. data/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js +19 -14
  125. data/app/packs/src/decidim/decidim_awesome/admin/form_exit_warn.js +23 -11
  126. data/app/packs/src/decidim/decidim_awesome/admin/proposal_sortings.js +26 -0
  127. data/app/packs/src/decidim/decidim_awesome/admin/tabs_change.js +31 -0
  128. data/app/packs/src/decidim/decidim_awesome/admin/user_picker.js +34 -20
  129. data/app/packs/src/decidim/decidim_awesome/admin/verification_selects.js +21 -0
  130. data/app/packs/src/decidim/decidim_awesome/admin/verifications.js +43 -0
  131. data/app/packs/src/decidim/decidim_awesome/amendments/show_modal_on_limits.js +28 -0
  132. data/app/packs/src/decidim/decidim_awesome/awesome_admin.js +7 -16
  133. data/app/packs/src/decidim/decidim_awesome/awesome_admin_global.js +2 -0
  134. data/app/packs/src/decidim/decidim_awesome/awesome_application.js +2 -15
  135. data/app/packs/src/decidim/decidim_awesome/awesome_map/api/fetcher.js +48 -23
  136. data/app/packs/src/decidim/decidim_awesome/awesome_map/api/meetings_fetcher.js +9 -12
  137. data/app/packs/src/decidim/decidim_awesome/awesome_map/api/proposals_fetcher.js +28 -0
  138. data/app/packs/src/decidim/decidim_awesome/awesome_map/awesome_map.js +15 -15
  139. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/controller.js +70 -37
  140. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/meetings_controller.js +11 -7
  141. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/proposals_controller.js +9 -16
  142. data/app/packs/src/decidim/decidim_awesome/awesome_map/controls_ui.js +75 -45
  143. data/app/packs/src/decidim/decidim_awesome/awesome_map/load_map.js +28 -18
  144. data/app/packs/src/decidim/decidim_awesome/editor/index.js +94 -0
  145. data/app/packs/src/decidim/decidim_awesome/forms/autosave.js +29 -28
  146. data/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +55 -42
  147. data/app/packs/src/decidim/decidim_awesome/forms/rich_text_plugin.js +30 -32
  148. data/app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js +32 -16
  149. data/app/packs/src/decidim/decidim_awesome/proposals/images.js +16 -10
  150. data/app/packs/src/decidim/decidim_awesome/voting/voting_cards.js +72 -0
  151. data/app/packs/stylesheets/decidim/decidim_awesome/admin/admin_accountability.scss +67 -0
  152. data/app/packs/stylesheets/decidim/decidim_awesome/admin/auto_edits.scss +11 -12
  153. data/app/packs/stylesheets/decidim/decidim_awesome/admin/check_redirections.scss +15 -0
  154. data/app/packs/stylesheets/decidim/decidim_awesome/admin/codemirror.scss +24 -12
  155. data/app/packs/stylesheets/decidim/decidim_awesome/admin/constraints.scss +49 -29
  156. data/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss +28 -71
  157. data/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_styles.scss +48 -0
  158. data/app/packs/stylesheets/decidim/decidim_awesome/admin/intergram_fixes.scss +11 -0
  159. data/app/packs/stylesheets/decidim/decidim_awesome/admin/user_picker.scss +17 -26
  160. data/app/packs/stylesheets/decidim/decidim_awesome/admin/verifications.scss +99 -0
  161. data/app/packs/stylesheets/decidim/decidim_awesome/amendments/modal.scss +5 -0
  162. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_admin.scss +14 -49
  163. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_admin_global.scss +20 -0
  164. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_application.scss +4 -18
  165. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_iframe/iframe.scss +1 -1
  166. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_map/map.scss +41 -35
  167. data/app/packs/stylesheets/decidim/decidim_awesome/forms/autosave.scss +6 -6
  168. data/app/packs/stylesheets/decidim/decidim_awesome/forms/custom_fields.scss +118 -0
  169. data/app/packs/stylesheets/decidim/decidim_awesome/shared/spinner.scss +26 -0
  170. data/app/packs/stylesheets/decidim/decidim_awesome/voting/voting_cards.scss +205 -0
  171. data/app/permissions/decidim/decidim_awesome/admin/permissions.rb +57 -1
  172. data/app/permissions/decidim/decidim_awesome/permissions.rb +11 -6
  173. data/app/presenters/concerns/decidim/decidim_awesome/breadcrumb_root_menu_item_presenter_override.rb +23 -0
  174. data/app/presenters/{decidim → concerns/decidim}/decidim_awesome/menu_item_presenter_override.rb +10 -2
  175. data/app/presenters/{decidim → concerns/decidim}/decidim_awesome/menu_presenter_override.rb +8 -0
  176. data/app/presenters/concerns/decidim/decidim_awesome/proposals/proposal_presenter_override.rb +20 -0
  177. data/app/presenters/decidim/decidim_awesome/admin_log/component_presenter_override.rb +28 -0
  178. data/app/presenters/decidim/decidim_awesome/admin_log/user_presenter_override.rb +46 -0
  179. data/app/presenters/decidim/decidim_awesome/paper_trail_base_presenter.rb +28 -0
  180. data/app/presenters/decidim/decidim_awesome/participatory_space_role_presenter.rb +45 -0
  181. data/app/presenters/decidim/decidim_awesome/private_data_presenter.rb +70 -0
  182. data/app/presenters/decidim/decidim_awesome/role_base_presenter.rb +102 -0
  183. data/app/presenters/decidim/decidim_awesome/user_entity_presenter.rb +50 -0
  184. data/app/queries/decidim/decidim_awesome/private_data_finder.rb +19 -0
  185. data/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_methods.rb +72 -0
  186. data/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_override.rb +38 -0
  187. data/app/serializers/decidim/decidim_awesome/paper_trail_version_serializer.rb +37 -0
  188. data/app/serializers/decidim/decidim_awesome/proposals/private_proposal_serializer.rb +34 -0
  189. data/app/types/concerns/decidim/decidim_awesome/add_proposal_type_custom_fields.rb +59 -0
  190. data/app/types/concerns/decidim/decidim_awesome/add_proposal_type_vote_weights.rb +20 -0
  191. data/app/uploaders/decidim/decidim_awesome/image_uploader.rb +12 -0
  192. data/app/validators/concerns/decidim/decidim_awesome/etiquette_validator_override.rb +41 -0
  193. data/app/views/decidim/decidim_awesome/account/_timezone_select.html.erb +3 -0
  194. data/app/views/decidim/decidim_awesome/admin/admin_accountability/index.html.erb +71 -0
  195. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/authorization.html.erb +20 -0
  196. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/callout.html.erb +3 -0
  197. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/conflict.html.erb +5 -0
  198. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb +41 -0
  199. data/app/views/decidim/decidim_awesome/admin/checks/_assets_tester.html.erb +2 -0
  200. data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +51 -48
  201. data/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +7 -2
  202. data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +25 -18
  203. data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +7 -6
  204. data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +12 -16
  205. data/app/views/decidim/decidim_awesome/admin/config/_form_livechat.html.erb +39 -23
  206. data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +35 -17
  207. data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_private_custom_fields.html.erb +1 -0
  208. data/app/views/decidim/decidim_awesome/admin/config/_form_proposals.html.erb +92 -6
  209. data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_admin_styles.html.erb +1 -0
  210. data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_styles.html.erb +48 -0
  211. data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +16 -6
  212. data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +15 -0
  213. data/app/views/decidim/decidim_awesome/admin/config/show.html.erb +22 -12
  214. data/app/views/decidim/decidim_awesome/admin/constraints/_form.html.erb +1 -49
  215. data/app/views/decidim/decidim_awesome/admin/constraints/new.html.erb +14 -9
  216. data/app/views/decidim/decidim_awesome/admin/constraints/no_permissions.html.erb +6 -0
  217. data/app/views/decidim/decidim_awesome/admin/constraints/show.html.erb +14 -9
  218. data/app/views/decidim/decidim_awesome/admin/custom_redirects/_form.html.erb +20 -5
  219. data/app/views/decidim/decidim_awesome/admin/custom_redirects/edit.html.erb +5 -5
  220. data/app/views/decidim/decidim_awesome/admin/custom_redirects/index.html.erb +14 -13
  221. data/app/views/decidim/decidim_awesome/admin/custom_redirects/new.html.erb +5 -5
  222. data/app/views/decidim/decidim_awesome/admin/maintenance/_private_data.html.erb +44 -0
  223. data/app/views/decidim/decidim_awesome/admin/maintenance/show.html.erb +44 -0
  224. data/app/views/decidim/decidim_awesome/admin/menu_hacks/_form.html.erb +6 -6
  225. data/app/views/decidim/decidim_awesome/admin/menu_hacks/edit.html.erb +21 -12
  226. data/app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb +39 -42
  227. data/app/views/decidim/decidim_awesome/admin/menu_hacks/new.html.erb +21 -12
  228. data/app/views/decidim/decidim_awesome/admin/officializations/_participants_td.html.erb +25 -0
  229. data/app/views/decidim/decidim_awesome/admin/officializations/_participants_th.html.erb +1 -0
  230. data/app/views/decidim/decidim_awesome/admin/officializations/_verification_modal.html.erb +9 -0
  231. data/app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb +8 -5
  232. data/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb +20 -0
  233. data/app/views/decidim/decidim_awesome/admin/shared/_filters_with_date.html.erb +61 -0
  234. data/app/views/decidim/decidim_awesome/amendments/_modal.html.erb +23 -0
  235. data/app/views/decidim/decidim_awesome/custom_fields/_form_render.html.erb +8 -2
  236. data/app/views/decidim/decidim_awesome/iframe_component/iframe/show.html.erb +7 -12
  237. data/app/views/decidim/decidim_awesome/map_component/map/_map_template.html.erb +53 -37
  238. data/app/views/decidim/decidim_awesome/map_component/map/show.html.erb +14 -5
  239. data/app/views/decidim/decidim_awesome/required_authorizations/index.html.erb +66 -0
  240. data/app/views/decidim/decidim_awesome/system/organizations/_admin_allowed_authorizations.html.erb +5 -0
  241. data/app/views/decidim/decidim_awesome/voting/voting_cards/_show_vote_button.html.erb +3 -0
  242. data/app/views/decidim/decidim_awesome/voting/voting_cards/_show_votes_count.html.erb +1 -0
  243. data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +11 -8
  244. data/app/views/layouts/decidim/decidim_awesome/_custom_styles.html.erb +1 -1
  245. data/app/views/layouts/decidim/decidim_awesome/_intergram_widget.html.erb +9 -6
  246. data/app/views/layouts/decidim/decidim_awesome/admin/_base.html.erb +12 -0
  247. data/app/views/layouts/decidim/decidim_awesome/admin/_custom_styles.html.erb +3 -0
  248. data/app/views/layouts/decidim/decidim_awesome/admin/admin_authorizations.html.erb +7 -0
  249. data/app/views/layouts/decidim/decidim_awesome/admin/application.html.erb +3 -0
  250. data/app/views/layouts/decidim/decidim_awesome/admin/maintenance.html.erb +19 -0
  251. data/config/assets.rb +5 -34
  252. data/config/i18n-tasks.yml +30 -0
  253. data/config/locales/ca.yml +335 -26
  254. data/config/locales/cs.yml +331 -22
  255. data/config/locales/de.yml +642 -0
  256. data/config/locales/en.yml +403 -33
  257. data/config/locales/es.yml +333 -24
  258. data/config/locales/eu.yml +623 -20
  259. data/config/locales/fr.yml +282 -23
  260. data/config/locales/hu.yml +268 -0
  261. data/config/locales/it.yml +155 -24
  262. data/config/locales/ja.yml +334 -25
  263. data/config/locales/lt.yml +94 -0
  264. data/config/locales/nl.yml +20 -19
  265. data/config/locales/pt-BR.yml +31 -24
  266. data/config/locales/ro-RO.yml +152 -0
  267. data/config/locales/sv.yml +28 -12
  268. data/config/rubocop/disabled.yml +11 -0
  269. data/config/rubocop/faker.yml +480 -0
  270. data/config/rubocop/rails.yml +88 -0
  271. data/config/rubocop/rspec.yml +65 -0
  272. data/config/rubocop/ruby.yml +1210 -0
  273. data/db/migrate/20231006113837_create_decidim_awesome_vote_weights.rb +13 -0
  274. data/db/migrate/20231006113841_create_decidim_awesome_proposal_extra_fields.rb +14 -0
  275. data/db/migrate/20240306175331_rename_editor_images_awesome_config.rb +18 -0
  276. data/db/migrate/20240531224204_add_decidim_awesome_proposal_private_fields.rb +29 -0
  277. data/db/migrate/20240729164227_add_decidim_awesome_proposal_private_fields_date.rb +20 -0
  278. data/db/seeds.rb +4 -4
  279. data/lib/decidim/decidim_awesome/admin_engine.rb +41 -6
  280. data/lib/decidim/decidim_awesome/api/types/localized_custom_fields_type.rb +22 -0
  281. data/lib/decidim/decidim_awesome/api/types/translated_custom_fields_type.rb +51 -0
  282. data/lib/decidim/decidim_awesome/authorizator.rb +34 -0
  283. data/lib/decidim/decidim_awesome/awesome.rb +236 -29
  284. data/lib/decidim/decidim_awesome/awesome_helpers.rb +57 -17
  285. data/lib/decidim/decidim_awesome/checksums.yml +95 -20
  286. data/lib/decidim/decidim_awesome/config.rb +25 -17
  287. data/lib/decidim/decidim_awesome/context_analyzers/request_analyzer.rb +3 -3
  288. data/lib/decidim/decidim_awesome/custom_fields.rb +13 -5
  289. data/lib/decidim/decidim_awesome/engine.rb +250 -19
  290. data/lib/decidim/decidim_awesome/iframe_component/component.rb +4 -4
  291. data/lib/decidim/decidim_awesome/lock.rb +47 -0
  292. data/lib/decidim/decidim_awesome/map_component/component.rb +2 -2
  293. data/lib/decidim/decidim_awesome/menu.rb +201 -0
  294. data/lib/decidim/decidim_awesome/menu_hacker.rb +7 -5
  295. data/{app/middleware/decidim/decidim_awesome → lib/decidim/decidim_awesome/middleware}/current_config.rb +5 -3
  296. data/lib/decidim/decidim_awesome/request_memoizer.rb +16 -0
  297. data/lib/decidim/decidim_awesome/system_checker.rb +6 -2
  298. data/lib/decidim/decidim_awesome/test/factories.rb +31 -9
  299. data/lib/decidim/decidim_awesome/test/initializer.rb +22 -6
  300. data/lib/decidim/decidim_awesome/test/layouts/decidim/_head.html.erb +2 -2
  301. data/lib/decidim/decidim_awesome/test/layouts/decidim/admin/_header.html.erb +2 -2
  302. data/lib/decidim/decidim_awesome/test/shared_examples/action_log_presenter_examples.rb +61 -0
  303. data/lib/decidim/decidim_awesome/test/shared_examples/{box_label_editor.rb → box_label_editor_examples.rb} +22 -22
  304. data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +24 -6
  305. data/lib/decidim/decidim_awesome/test/shared_examples/custom_fields_examples.rb +155 -0
  306. data/lib/decidim/decidim_awesome/test/shared_examples/custom_redirects_contexts.rb +7 -7
  307. data/lib/decidim/decidim_awesome/test/shared_examples/custom_styles_examples.rb +156 -0
  308. data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +42 -58
  309. data/lib/decidim/decidim_awesome/test/shared_examples/menu_hack_contexts.rb +9 -8
  310. data/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb +40 -29
  311. data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +129 -38
  312. data/lib/decidim/decidim_awesome/version.rb +2 -2
  313. data/lib/decidim/decidim_awesome/voting_manifest.rb +55 -0
  314. data/lib/decidim/decidim_awesome.rb +1 -3
  315. data/lib/tasks/decidim_awesome_upgrade_tasks.rake +9 -0
  316. data/lib/tasks/decidim_awesome_webpacker_tasks.rake +2 -0
  317. data/package.json +54 -0
  318. metadata +192 -86
  319. data/app/forms/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb +0 -38
  320. data/app/helpers/decidim/decidim_awesome/amendments_helper_override.rb +0 -48
  321. data/app/helpers/decidim/decidim_awesome/proposals/application_helper_override.rb +0 -78
  322. data/app/jobs/decidim/decidim_awesome/migrate_legacy_images_job.rb +0 -106
  323. data/app/packs/entrypoints/decidim_admin_decidim_awesome_custom_fields.js +0 -2
  324. data/app/packs/entrypoints/decidim_decidim_awesome_admin_form_exit_warn.js +0 -1
  325. data/app/packs/images/decidim/decidim_awesome/platoniq-logo.png +0 -0
  326. data/app/packs/src/decidim/decidim_awesome/admin/constraints.js +0 -55
  327. data/app/packs/src/decidim/decidim_awesome/editors/editor.js +0 -190
  328. data/app/packs/src/decidim/decidim_awesome/editors/tabs_focus.js +0 -22
  329. data/app/packs/src/vendor/image-resize.min.js +0 -1
  330. data/app/packs/src/vendor/image-upload.min.js +0 -6
  331. data/app/packs/src/vendor/leaflet.featuregroup.subgroup.js +0 -184
  332. data/app/packs/stylesheets/decidim/decidim_awesome/editors/markdown_editor.scss +0 -19
  333. data/app/packs/stylesheets/decidim/decidim_awesome/editors/quill_editor.scss +0 -58
  334. data/app/packs/stylesheets/vendor/select2-foundation-theme.scss +0 -348
  335. data/app/uploaders/decidim/cw/decidim_awesome/image_uploader.rb +0 -26
  336. data/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +0 -26
  337. data/app/views/decidim/decidim_awesome/admin/config/_modal.html.erb +0 -11
  338. data/app/views/decidim/proposals/admin/proposals/_form.html.erb +0 -101
  339. data/app/views/decidim/proposals/collaborative_drafts/_edit_form_fields.html.erb +0 -83
  340. data/app/views/decidim/proposals/collaborative_drafts/show.html.erb +0 -1
  341. data/app/views/layouts/decidim/admin/_header.html.erb +0 -5
  342. data/app/views/layouts/decidim/admin/decidim_awesome.html.erb +0 -75
  343. data/app/views/v0.25/decidim/proposals/collaborative_drafts/_show.html.erb +0 -128
  344. data/app/views/v0.25/layouts/decidim/_head.html.erb +0 -41
  345. data/app/views/v0.25/layouts/decidim/admin/_header.html.erb +0 -11
  346. data/app/views/v0.26/decidim/proposals/collaborative_drafts/_show.html.erb +0 -128
  347. data/app/views/v0.26/layouts/decidim/_head.html.erb +0 -45
  348. data/app/views/v0.26/layouts/decidim/admin/_header.html.erb +0 -11
  349. data/lib/decidim/decidim_awesome/content_parsers/editor_images_parser.rb +0 -39
  350. data/lib/tasks/decidim_awesome_active_storage_migrations_tasks.rake +0 -37
  351. /data/app/models/{decidim → concerns/decidim}/decidim_awesome/user_override.rb +0 -0
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ welcome_text = "Dashboard"
4
+
3
5
  shared_examples "redirects to index" do |_link|
4
6
  it "display index page" do
5
7
  expect(page).to have_content("You are not authorized to perform this action")
6
- expect(page).to have_content("Welcome to the Decidim Admin Panel.")
8
+ expect(page).to have_content(welcome_text)
7
9
  expect(page).to have_current_path(decidim_admin.root_path, ignore_query: true)
8
10
  end
9
11
  end
@@ -11,7 +13,7 @@ end
11
13
  shared_examples "forbids awesome access" do
12
14
  it "does not have awesome link" do
13
15
  visit decidim_admin.root_path
14
- expect(page).not_to have_content("Decidim awesome")
16
+ expect(page).to have_no_content("Decidim awesome")
15
17
  end
16
18
 
17
19
  describe "forbids module access" do
@@ -31,7 +33,7 @@ shared_examples "allows awesome access" do
31
33
 
32
34
  it "allows module access" do
33
35
  visit decidim_admin_decidim_awesome.config_path(:editors)
34
- expect(page).to have_content("Tweaks for editors")
36
+ expect(page).to have_content("Tweaks for Editor Hacks")
35
37
  end
36
38
  end
37
39
 
@@ -85,7 +87,7 @@ shared_examples "allows external accesses" do
85
87
 
86
88
  it "shows participants access" do
87
89
  visit decidim_admin.users_path
88
- expect(page).to have_content("New user")
90
+ expect(page).to have_content("New admin")
89
91
  end
90
92
 
91
93
  it "shows pages access" do
@@ -107,20 +109,23 @@ end
107
109
  shared_examples "allows all admin routes" do
108
110
  before do
109
111
  visit decidim_admin.root_path
112
+ # this is a workaround to wait for the page to load
113
+ # it seems that the test might fail randomly otherwise
114
+ # underlaying issue is unknown, maybe capybara is faster clicking than ruby is at storing class variables?
115
+ sleep 0.1
110
116
  end
111
117
 
112
118
  it "allows the admin root page" do
113
- expect(page).to have_content("Welcome to the Decidim Admin Panel.")
119
+ expect(page).to have_content(welcome_text)
114
120
  end
115
121
 
116
122
  it "allows the assemblies page" do
117
- click_link "Assemblies"
118
-
123
+ click_link_or_button "Assemblies"
119
124
  expect(page).to have_content("New assembly")
120
125
  end
121
126
 
122
127
  it "allows the processes page" do
123
- click_link "Processes"
128
+ click_link_or_button "Processes"
124
129
 
125
130
  expect(page).to have_content("New process")
126
131
  end
@@ -129,43 +134,44 @@ end
129
134
  shared_examples "allows scoped admin routes" do
130
135
  before do
131
136
  visit decidim_admin.root_path
137
+ sleep 0.1
132
138
  end
133
139
 
134
140
  it "allows the admin root page" do
135
- expect(page).to have_content("Welcome to the Decidim Admin Panel.")
141
+ expect(page).to have_content(welcome_text)
136
142
  end
137
143
 
138
144
  it "allows the assemblies page" do
139
- click_link "Assemblies"
145
+ click_link_or_button "Assemblies"
140
146
 
141
147
  expect(page).to have_content("New assembly")
142
148
  end
143
149
 
144
150
  describe "forbids processes" do
145
151
  before do
146
- click_link "Processes"
152
+ click_link_or_button "Processes"
147
153
  end
148
154
 
149
155
  it_behaves_like "redirects to index"
150
156
 
151
157
  it "is not a process page" do
152
- expect(page).not_to have_content("New process")
158
+ expect(page).to have_no_content("New process")
153
159
  end
154
160
  end
155
161
  end
156
162
 
157
163
  shared_examples "has admin link" do
158
164
  it "has menu link" do
159
- within ".topbar__dropmenu.topbar__user__logged" do
160
- expect(page).to have_selector("#user-menu li", text: "Admin dashboard", visible: :hidden)
165
+ within "header" do
166
+ expect(page).to have_css("#admin-bar", text: "Admin dashboard")
161
167
  end
162
168
  end
163
169
  end
164
170
 
165
171
  shared_examples "has no admin link" do
166
- it "has menu link" do
167
- within ".topbar__dropmenu.topbar__user__logged" do
168
- expect(page).not_to have_selector("#user-menu li", text: "Admin dashboard", visible: :hidden)
172
+ it "has no menu link" do
173
+ within "header" do
174
+ expect(page).to have_no_css("#admin-bar", text: "Admin dashboard")
169
175
  end
170
176
  end
171
177
  end
@@ -197,7 +203,7 @@ shared_examples "shows partial admin links in the frontend" do
197
203
 
198
204
  it_behaves_like "has no admin link"
199
205
  it "has no Edit button" do
200
- expect(page).not_to have_link(href: "/admin/processes")
206
+ expect(page).to have_no_link(href: "/admin/processes")
201
207
  end
202
208
  end
203
209
  end
@@ -213,7 +219,7 @@ shared_examples "can edit assembly" do
213
219
  ca: "Assamblea editada",
214
220
  es: "Asamblea editada"
215
221
  )
216
- find("*[type=submit]").click
222
+ click_link_or_button "Update"
217
223
  expect(page).to have_admin_callout("successfully")
218
224
  end
219
225
  end
@@ -262,7 +268,7 @@ shared_examples "can manage component" do
262
268
  expect(page).to have_content("Title")
263
269
  expect(page).to have_content(proposal.title["en"])
264
270
 
265
- click_link "Edit proposal"
271
+ click_link_or_button "Edit proposal"
266
272
  expect(page).to have_content("Update proposal")
267
273
  fill_in_i18n(
268
274
  :proposal_title,
@@ -271,14 +277,14 @@ shared_examples "can manage component" do
271
277
  ca: "Proposta editada",
272
278
  es: "Propuesta editada"
273
279
  )
274
- find("*[type=submit]").click
280
+ click_link_or_button "Update"
275
281
  expect(page).to have_admin_callout("successfully")
276
282
  end
277
283
 
278
284
  it "can create a proposal" do
279
285
  visit manage_component_path(component)
280
286
 
281
- click_link "New proposal"
287
+ click_link_or_button "New proposal"
282
288
  expect(page).to have_content("Create proposal")
283
289
  fill_in_i18n(
284
290
  :proposal_title,
@@ -294,7 +300,7 @@ shared_examples "can manage component" do
294
300
  ca: "Body creat",
295
301
  es: "Body creat"
296
302
  )
297
- find("*[type=submit]").click
303
+ click_link_or_button "Create"
298
304
  expect(page).to have_admin_callout("successfully")
299
305
  end
300
306
  end
@@ -302,6 +308,7 @@ end
302
308
  shared_examples "edits allowed components" do
303
309
  before do
304
310
  visit decidim_admin.root_path
311
+ sleep 0.1
305
312
  end
306
313
 
307
314
  it_behaves_like "can manage component"
@@ -351,7 +358,7 @@ shared_examples "shows component partial admin links in the frontend" do
351
358
 
352
359
  it_behaves_like "has no admin link"
353
360
  it "has no Edit button" do
354
- expect(page).not_to have_link(href: manage_component_path(another_component))
361
+ expect(page).to have_no_link(href: manage_component_path(another_component))
355
362
  end
356
363
  end
357
364
  end
@@ -362,8 +369,10 @@ shared_examples "allows access to group processes" do
362
369
  end
363
370
 
364
371
  it "shows the list of processes" do
365
- expect(page).to have_content("Participatory processes")
366
- expect(page).to have_content(participatory_process.title["en"])
372
+ within("[data-content]") do
373
+ expect(page).to have_content("Processes")
374
+ expect(page).to have_content(participatory_process.title["en"])
375
+ end
367
376
  end
368
377
 
369
378
  describe "forbids editing processes" do
@@ -380,8 +389,10 @@ shared_examples "allows access to group processes" do
380
389
  end
381
390
 
382
391
  it "shows the list of groups" do
383
- expect(page).to have_content("Participatory process groups")
384
- expect(page).to have_content(process_group.title["en"])
392
+ within("[data-content]") do
393
+ expect(page).to have_content("Process groups")
394
+ expect(page).to have_content(process_group.title["en"])
395
+ end
385
396
  end
386
397
  end
387
398
  end
@@ -400,7 +411,7 @@ shared_examples "allows edit any group process" do
400
411
  ca: "Proces grup editat",
401
412
  es: "Grupo de procesos editado"
402
413
  )
403
- find("*[type=submit]").click
414
+ click_link_or_button "Update"
404
415
  expect(page).to have_admin_callout("successfully")
405
416
  end
406
417
  end
@@ -25,31 +25,135 @@ end
25
25
  shared_examples "activated concerns" do |enabled|
26
26
  it "common concerns are registered" do
27
27
  expect(ActionView::Base.included_modules).to include(Decidim::DecidimAwesome::AwesomeHelpers)
28
- expect(Decidim::MenuPresenter.included_modules).to include(Decidim::DecidimAwesome::MenuPresenterOverride)
29
- expect(Decidim::MenuItemPresenter.included_modules).to include(Decidim::DecidimAwesome::MenuItemPresenterOverride)
28
+ expect(Decidim::ViewModel.included_modules).to include(Decidim::DecidimAwesome::AwesomeHelpers)
29
+ expect(Decidim::ApplicationController.included_modules).to include(Decidim::DecidimAwesome::ContentSecurityPolicy)
30
+ expect(Decidim::Admin::ApplicationController.included_modules).to include(Decidim::DecidimAwesome::ContentSecurityPolicy)
30
31
  end
31
32
 
32
33
  if enabled
33
34
  it "concerns are registered" do
34
35
  expect(Decidim::User.included_modules).to include(Decidim::DecidimAwesome::UserOverride)
36
+ expect(Decidim::MenuPresenter.included_modules).to include(Decidim::DecidimAwesome::MenuPresenterOverride)
37
+ expect(Decidim::MenuItemPresenter.included_modules).to include(Decidim::DecidimAwesome::MenuItemPresenterOverride)
35
38
  expect(Decidim::ErrorsController.included_modules).to include(Decidim::DecidimAwesome::NotFoundRedirect)
36
39
  expect(Decidim::Proposals::ApplicationHelper.included_modules).to include(Decidim::DecidimAwesome::Proposals::ApplicationHelperOverride)
37
- expect(Decidim::Proposals::ProposalWizardCreateStepForm.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalWizardCreateStepFormOverride)
40
+ expect(Decidim::Proposals::ProposalForm.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalFormCustomizations)
41
+ expect(Decidim::Proposals::ProposalForm.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride)
42
+ expect(Decidim::Proposals::Admin::ProposalForm.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride)
38
43
  expect(Decidim::AmendmentsHelper.included_modules).to include(Decidim::DecidimAwesome::AmendmentsHelperOverride)
44
+ expect(EtiquetteValidator.included_modules).to include(Decidim::DecidimAwesome::EtiquetteValidatorOverride)
45
+ expect(Decidim::Proposals::ProposalVote.included_modules).to include(Decidim::DecidimAwesome::HasVoteWeight)
46
+ expect(Decidim::Proposals::ProposalType.included_modules).to include(Decidim::DecidimAwesome::AddProposalTypeVoteWeights)
47
+ expect(Decidim::Proposals::ProposalType.included_modules).to include(Decidim::DecidimAwesome::AddProposalTypeCustomFields)
48
+ expect(Decidim::Proposals::ProposalLCell.included_modules).to include(Decidim::DecidimAwesome::ProposalLCellOverride)
49
+ expect(Decidim::Proposals::Proposal.included_modules).to include(Decidim::DecidimAwesome::HasProposalExtraFields)
50
+ expect(Decidim::Proposals::CollaborativeDraft.included_modules).to include(Decidim::DecidimAwesome::HasProposalExtraFields)
51
+ expect(Decidim::ContentBlocks::GlobalMenuCell.included_modules).to include(Decidim::DecidimAwesome::GlobalMenuCellOverride)
52
+ expect(Decidim::BreadcrumbHelper.included_modules).to include(Decidim::DecidimAwesome::BreadcrumbHelperOverride)
53
+ expect(Decidim::BreadcrumbRootMenuItemPresenter.included_modules).to include(Decidim::DecidimAwesome::BreadcrumbRootMenuItemPresenterOverride)
54
+ expect(Decidim::Proposals::ProposalSerializer.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalSerializerOverride)
55
+ expect(Decidim::Proposals::ProposalVotesController.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalVotesControllerOverride)
56
+ expect(Decidim::AmendmentsController.included_modules).to include(Decidim::DecidimAwesome::LimitPendingAmendments)
57
+ expect(Decidim::Proposals::ProposalsController.included_modules).to include(Decidim::DecidimAwesome::Proposals::OrderableOverride)
58
+ expect(Decidim::AdminLog::ComponentPresenter.included_modules).to include(Decidim::DecidimAwesome::AdminLog::ComponentPresenterOverride)
59
+ expect(Decidim::ApplicationController.included_modules).to include(Decidim::DecidimAwesome::CheckLoginAuthorizations)
60
+ expect(Decidim::ApplicationController.included_modules).to include(Decidim::DecidimAwesome::UseUserTimeZone)
61
+ expect(Decidim::AccountForm.included_modules).to include(Decidim::DecidimAwesome::AccountFormOverride)
62
+ expect(Decidim::UpdateAccount.included_modules).to include(Decidim::DecidimAwesome::UpdateAccountOverride)
63
+ expect(Decidim::System::RegisterOrganizationForm.included_modules).to include(Decidim::DecidimAwesome::System::OrganizationFormOverride)
64
+ expect(Decidim::System::UpdateOrganizationForm.included_modules).to include(Decidim::DecidimAwesome::System::OrganizationFormOverride)
65
+ expect(Decidim::System::UpdateOrganization.included_modules).to include(Decidim::DecidimAwesome::System::UpdateOrganizationOverride)
66
+ expect(Decidim::System::CreateOrganization.included_modules).to include(Decidim::DecidimAwesome::System::CreateOrganizationOverride)
67
+ expect(Decidim::AdminLog::UserPresenter.included_modules).to include(Decidim::DecidimAwesome::AdminLog::UserPresenterOverride)
39
68
  end
69
+
40
70
  else
41
71
  it "concerns are not registered" do
42
72
  expect(Decidim::User.included_modules).not_to include(Decidim::DecidimAwesome::UserOverride)
73
+ expect(Decidim::MenuPresenter.included_modules).not_to include(Decidim::DecidimAwesome::MenuPresenterOverride)
74
+ expect(Decidim::MenuItemPresenter.included_modules).not_to include(Decidim::DecidimAwesome::MenuItemPresenterOverride)
43
75
  expect(Decidim::ErrorsController.included_modules).not_to include(Decidim::DecidimAwesome::NotFoundRedirect)
44
76
  expect(Decidim::Proposals::ApplicationHelper.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ApplicationHelperOverride)
45
- expect(Decidim::Proposals::ProposalWizardCreateStepForm.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalWizardCreateStepFormOverride)
77
+ expect(Decidim::Proposals::ProposalForm.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalFormCustomizations)
78
+ expect(Decidim::Proposals::ProposalForm.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride)
79
+ expect(Decidim::Proposals::Admin::ProposalForm.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride)
46
80
  expect(Decidim::AmendmentsHelper.included_modules).not_to include(Decidim::DecidimAwesome::AmendmentsHelperOverride)
81
+ expect(EtiquetteValidator.included_modules).not_to include(Decidim::DecidimAwesome::EtiquetteValidatorOverride)
82
+ expect(Decidim::Proposals::ProposalVote.included_modules).not_to include(Decidim::DecidimAwesome::HasVoteWeight)
83
+ expect(Decidim::Proposals::ProposalType.included_modules).not_to include(Decidim::DecidimAwesome::AddProposalTypeVoteWeights)
84
+ expect(Decidim::Proposals::ProposalType.included_modules).not_to include(Decidim::DecidimAwesome::AddProposalTypeCustomFields)
85
+ expect(Decidim::Proposals::ProposalLCell.included_modules).not_to include(Decidim::DecidimAwesome::ProposalLCellOverride)
86
+ expect(Decidim::Proposals::Proposal.included_modules).not_to include(Decidim::DecidimAwesome::HasProposalExtraFields)
87
+ expect(Decidim::Proposals::CollaborativeDraft.included_modules).not_to include(Decidim::DecidimAwesome::HasProposalExtraFields)
88
+ expect(Decidim::ContentBlocks::GlobalMenuCell.included_modules).not_to include(Decidim::DecidimAwesome::GlobalMenuCellOverride)
89
+ expect(Decidim::BreadcrumbHelper.included_modules).not_to include(Decidim::DecidimAwesome::BreadcrumbHelperOverride)
90
+ expect(Decidim::BreadcrumbRootMenuItemPresenter.included_modules).not_to include(Decidim::DecidimAwesome::BreadcrumbRootMenuItemPresenterOverride)
91
+ expect(Decidim::Proposals::ProposalSerializer.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalSerializerOverride)
92
+ expect(Decidim::Proposals::ProposalVotesController.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalVotesControllerOverride)
93
+ expect(Decidim::AmendmentsController.included_modules).not_to include(Decidim::DecidimAwesome::LimitPendingAmendments)
94
+ expect(Decidim::Proposals::ProposalsController.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::OrderableOverride)
95
+ expect(Decidim::AdminLog::ComponentPresenter.included_modules).not_to include(Decidim::DecidimAwesome::AdminLog::ComponentPresenterOverride)
96
+ expect(Decidim::ApplicationController.included_modules).not_to include(Decidim::DecidimAwesome::CheckLoginAuthorizations)
97
+ expect(Decidim::ApplicationController.included_modules).not_to include(Decidim::DecidimAwesome::UseUserTimeZone)
98
+ expect(Decidim::AccountForm.included_modules).not_to include(Decidim::DecidimAwesome::AccountFormOverride)
99
+ expect(Decidim::UpdateAccount.included_modules).not_to include(Decidim::DecidimAwesome::UpdateAccountOverride)
100
+ expect(Decidim::System::RegisterOrganizationForm.included_modules).not_to include(Decidim::DecidimAwesome::System::OrganizationFormOverride)
101
+ expect(Decidim::System::UpdateOrganizationForm.included_modules).not_to include(Decidim::DecidimAwesome::System::OrganizationFormOverride)
102
+ expect(Decidim::System::UpdateOrganization.included_modules).not_to include(Decidim::DecidimAwesome::System::UpdateOrganizationOverride)
103
+ expect(Decidim::DecidimAwesome::AwesomeHelpers.included_modules).not_to include(Decidim::DecidimAwesome::AwesomeHelpers)
104
+ expect(Decidim::DecidimAwesome::ContentSecurityPolicy.included_modules).not_to include(Decidim::DecidimAwesome::ContentSecurityPolicy)
105
+ expect(Decidim::DecidimAwesome::UserOverride.included_modules).not_to include(Decidim::DecidimAwesome::UserOverride)
106
+ end
107
+ end
108
+ end
109
+
110
+ shared_examples "csp directives" do |enabled|
111
+ let(:organization) { create(:organization) }
112
+ let(:fonts) { controller.content_security_policy.send(:policy)["font-src"] }
113
+ let(:scripts) { controller.content_security_policy.send(:policy)["script-src"] }
114
+ let(:frames) { controller.content_security_policy.send(:policy)["frame-src"] }
115
+
116
+ shared_examples "controller directives" do
117
+ if enabled
118
+ it "has CSP directives" do
119
+ get :show do
120
+ expect(fonts).to eq(["'self'", "data:"])
121
+ expect(scripts).to eq(["'self'", "'unsafe-inline'", "'unsafe-eval'", "https://www.intergram.xyz"])
122
+ expect(frames).to eq(["'self'", "www.youtube-nocookie.com", "player.vimeo.com", "https://www.intergram.xyz"])
123
+ end
124
+ end
125
+ else
126
+ it "has no CSP directives" do
127
+ get :show do
128
+ expect(fonts).to eq(["'self'"])
129
+ expect(scripts).to eq(["'self'", "'unsafe-inline'", "'unsafe-eval'"])
130
+ expect(frames).to eq(["'self'", "www.youtube-nocookie.com", "player.vimeo.com"])
131
+ end
132
+ end
133
+ end
134
+ end
135
+
136
+ describe Decidim::HomepageController, type: :controller do
137
+ routes { Decidim::Core::Engine.routes }
138
+ before do
139
+ request.env["decidim.current_organization"] = user.organization
140
+ end
141
+
142
+ it_behaves_like "controller directives"
143
+ end
144
+
145
+ describe Decidim::Admin::DashboardController, type: :controller do
146
+ routes { Decidim::Admin::Engine.routes }
147
+
148
+ before do
149
+ request.env["decidim.current_organization"] = user.organization
47
150
  end
151
+
152
+ it_behaves_like "controller directives"
48
153
  end
49
154
  end
50
155
 
51
156
  shared_examples "custom menus" do |enabled|
52
- # rubocop:disable RSpec/EmptyExampleGroup
53
157
  describe Decidim::MenuPresenter, type: :helper do
54
158
  before do
55
159
  allow(view).to receive(:current_organization).and_return(organization)
@@ -66,22 +170,16 @@ shared_examples "custom menus" do |enabled|
66
170
  end
67
171
  end
68
172
  end
69
- # rubocop:enable RSpec/EmptyExampleGroup
70
173
  end
71
174
 
72
175
  shared_examples "basic rendering" do |enabled|
73
176
  describe "shows public pages", type: :system do
74
- let(:image_vars) do
177
+ let(:boolean_vars) do
75
178
  [
76
179
  :allow_images_in_proposals,
77
- :allow_images_in_small_editor,
78
- :allow_images_in_full_editor,
79
- :allow_images_in_proposals,
80
- :use_markdown_editor,
81
- :allow_images_in_markdown_editor,
82
- :auto_save_forms,
83
- :intergram_for_admins,
84
- :intergram_for_public
180
+ :allow_videos_in_editors,
181
+ :allow_images_in_editors,
182
+ :auto_save_forms
85
183
  ]
86
184
  end
87
185
 
@@ -91,7 +189,7 @@ shared_examples "basic rendering" do |enabled|
91
189
  end
92
190
 
93
191
  it "renders the home page" do
94
- expect(page).to have_content("Home")
192
+ expect(page).to have_css(".home")
95
193
  end
96
194
 
97
195
  it "has DecidimAwesome object" do
@@ -104,32 +202,32 @@ shared_examples "basic rendering" do |enabled|
104
202
  end
105
203
 
106
204
  if enabled
107
- it "has editor images configs enabled" do
108
- image_vars.each do |var|
205
+ it "has boolean configs enabled" do
206
+ boolean_vars.each do |var|
109
207
  expect(page.body).to have_content("\"#{var}\":true")
110
208
  end
111
209
  end
112
210
 
113
211
  it "has custom fields javascript" do
114
- expect(page).to have_xpath("//script[contains(@src,'decidim_decidim_awesome_proposals_custom_fields')]", visible: :all)
212
+ expect(page).to have_xpath("//script[contains(@src,'decidim_decidim_awesome_custom_fields')]", visible: :all)
115
213
  end
116
214
 
117
215
  it "has custom styles CSS" do
118
216
  expect(page.body).to have_content(styles)
119
217
  end
120
218
  else
121
- it "has editor images configs disabled" do
122
- image_vars.each do |var|
219
+ it "has boolean configs disabled" do
220
+ boolean_vars.each do |var|
123
221
  expect(page.body).to have_content("\"#{var}\":false")
124
222
  end
125
223
  end
126
224
 
127
225
  it "do not have custom fields javascript" do
128
- expect(page).not_to have_xpath("//script[contains(@src,'decidim_decidim_awesome_proposals_custom_fields')]", visible: :all)
226
+ expect(page).to have_no_xpath("//script[contains(@src,'decidim_decidim_awesome_custom_fields')]", visible: :all)
129
227
  end
130
228
 
131
229
  it "do not have custom styles CSS" do
132
- expect(page.body).not_to have_content(styles)
230
+ expect(page.body).to have_no_content(styles)
133
231
  end
134
232
  end
135
233
  end
@@ -140,10 +238,11 @@ shared_examples "basic rendering" do |enabled|
140
238
  "config/editors",
141
239
  "config/proposals",
142
240
  "config/surveys",
143
- "config/styles",
241
+ "config/scoped_styles",
144
242
  "config/proposal_custom_fields",
145
243
  "config/admins",
146
- "menu_hacks",
244
+ "menus/menu/hacks",
245
+ "menus/home_content_block_menu/hacks",
147
246
  "custom_redirects",
148
247
  "config/livechat"
149
248
  ]
@@ -167,33 +266,25 @@ shared_examples "basic rendering" do |enabled|
167
266
 
168
267
  if enabled
169
268
  it "renders the editors page" do
170
- expect(page).to have_content("Tweaks for editors")
171
- end
172
-
173
- it "has custom fields javascript" do
174
- expect(page).to have_xpath("//script[contains(@src,'decidim_admin_decidim_awesome_custom_fields')]", visible: :all)
269
+ expect(page).to have_content("Tweaks for Editor Hacks")
175
270
  end
176
271
 
177
272
  it "has all admin menus" do
178
273
  menus.each do |menu|
179
- within ".secondary-nav" do
274
+ within ".sidebar-menu" do
180
275
  expect(page).to have_link(href: "/admin/decidim_awesome/#{menu}")
181
276
  end
182
277
  end
183
278
  end
184
279
  else
185
280
  it "renders the compatibility checks page" do
186
- expect(page).to have_content("System compatibility checks")
187
- end
188
-
189
- it "do not have custom fields javascript" do
190
- expect(page).not_to have_xpath("//script[contains(@src,'decidim_admin_decidim_awesome_custom_fields')]", visible: :all)
281
+ expect(page).to have_content("Maintenance tools: System Compatibility Checks")
191
282
  end
192
283
 
193
284
  it "has no admin menus" do
194
285
  menus.each do |menu|
195
- within ".secondary-nav" do
196
- expect(page).not_to have_link(href: "/admin/decidim_awesome/#{menu}")
286
+ within ".sidebar-menu" do
287
+ expect(page).to have_no_link(href: "/admin/decidim_awesome/#{menu}")
197
288
  end
198
289
  end
199
290
  end
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  # This holds the decidim-decidim_awesome version.
5
5
  module DecidimAwesome
6
- VERSION = "0.8.0"
7
- COMPAT_DECIDIM_VERSION = [">= 0.25.0", "< 0.27"].freeze
6
+ VERSION = "0.12.0"
7
+ COMPAT_DECIDIM_VERSION = [">= 0.29.1", "< 0.30"].freeze
8
8
  end
9
9
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ class VotingManifest
6
+ include ActiveModel::Model
7
+ include Decidim::AttributeObject::Model
8
+
9
+ attribute :name, Symbol
10
+
11
+ # path to overriden views for the proposal show page vote button
12
+ # not defining it will use the original view from Decidim
13
+ # setting it to an empty string will hide the original content
14
+
15
+ # original is decidim-proposals/app/views/decidim/proposals/proposals/_vote_button.html.erb
16
+ attribute :show_vote_button_view, String
17
+ # original is decidim-proposals/app/views/decidim/proposals/proposals/_votes_count.html.erb
18
+ attribute :show_votes_count_view, String
19
+ # original is from decidim-proposals/app/cells/decidim/proposals/proposal_metadata_cell.rb
20
+ attribute :proposal_metadata_cell, String
21
+
22
+ # a callback that will be called by the method valid_weight?
23
+ # Do not access this parameter directly, use the weight_validator method to register a block
24
+ attribute :on_weight_validation, Proc, default: nil
25
+
26
+ validates :name, presence: true
27
+
28
+ # registers a weight validator
29
+ def weight_validator(&block)
30
+ @on_weight_validation = block
31
+ end
32
+
33
+ # validates the weight using the Proc defined by weight_validator
34
+ # Receives the weight and a context with the user and the proposal to be voted
35
+ def valid_weight?(weight, context = {})
36
+ return true unless @on_weight_validation
37
+
38
+ @on_weight_validation.call(weight, **context)
39
+ end
40
+
41
+ # registers an optional label generator block
42
+ def label_generator(&block)
43
+ @on_label_generation = block
44
+ end
45
+
46
+ # returns the label used in export or other places for a given weight
47
+ # defaults to a I18n key scoped under decidim_awesome
48
+ def label_for(weight, context = {})
49
+ return I18n.t("decidim.decidim_awesome.voting.#{name}.weights.weight_#{weight}", default: "weight_#{weight}") unless @on_label_generation
50
+
51
+ @on_label_generation.call(weight, **context)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -11,12 +11,10 @@ require "decidim/decidim_awesome/map_component/component"
11
11
  require "decidim/decidim_awesome/iframe_component/engine"
12
12
  require "decidim/decidim_awesome/iframe_component/admin_engine"
13
13
  require "decidim/decidim_awesome/iframe_component/component"
14
- require "decidim/decidim_awesome/content_parsers/editor_images_parser"
15
14
 
16
15
  # Engines to handle logic unrelated to participatory spaces or components
17
-
18
16
  Decidim.register_global_engine(
19
17
  :decidim_decidim_awesome, # this is the name of the global method to access engine routes
20
- ::Decidim::DecidimAwesome::Engine,
18
+ Decidim::DecidimAwesome::Engine,
21
19
  at: "/decidim_awesome"
22
20
  )
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ Rake::Task["decidim:webpacker:install"].enhance do
4
+ Rake::Task["decidim_decidim_awesome:webpacker:install"].invoke
5
+ end
6
+
7
+ Rake::Task["decidim:choose_target_plugins"].enhance do
8
+ ENV["FROM"] = "#{ENV.fetch("FROM", nil)},decidim_decidim_awesome"
9
+ end
@@ -20,6 +20,8 @@ namespace :decidim_decidim_awesome do
20
20
 
21
21
  def install_decidim_awesome_npm
22
22
  decidim_awesome_npm_dependencies.each do |type, packages|
23
+ puts "install NPM packages. You can also do this manually with this command:"
24
+ puts "npm i --save-#{type} #{packages.join(" ")}"
23
25
  system! "npm i --save-#{type} #{packages.join(" ")}"
24
26
  end
25
27
  end
data/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "decidim-module-decidim_awesome",
3
+ "version": "0.12.0",
4
+ "description": "Mods and tweaks for Decidim",
5
+ "main": "index.js",
6
+ "directories": {
7
+ "example": "examples",
8
+ "lib": "lib"
9
+ },
10
+ "scripts": {
11
+ "test": "echo \"Error: no test specified\" && exit 1",
12
+ "lint": "eslint -c .eslintrc.json --ext .js app/packs/",
13
+ "lint-fix": "eslint -c .eslintrc.json --ext .js app/packs/ --fix",
14
+ "stylelint": "stylelint **/*.scss",
15
+ "stylelint-fix": "stylelint **/*.scss --fix",
16
+ "prettier": "prettier --check '**/*.scss'",
17
+ "prettify": "prettier --write '**/*.scss'"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/decidim-ice/decidim-module-decidim_awesome.git"
22
+ },
23
+ "keywords": [
24
+ "decidim"
25
+ ],
26
+ "author": "ivan@pokecode.net",
27
+ "license": "AGPL-3.0-or-later",
28
+ "bugs": {
29
+ "url": "https://github.com/decidim-ice/decidim-module-decidim_awesome/issues"
30
+ },
31
+ "homepage": "https://github.com/decidim-ice/decidim-module-decidim_awesome#readme",
32
+ "stylelint": {
33
+ "extends": "@decidim/stylelint-config"
34
+ },
35
+ "prettier": "@decidim/prettier-config",
36
+ "devDependencies": {
37
+ "@decidim/dev": "0.29.1",
38
+ "@decidim/eslint-config": "0.29.1",
39
+ "@decidim/prettier-config": "0.29.1",
40
+ "@decidim/stylelint-config": "0.29.1",
41
+ "postcss-scss": "^4.0.9",
42
+ "sass-embedded": "^1.83.1",
43
+ "@tarekraafat/autocomplete.js": "^10.2.9"
44
+ },
45
+ "dependencies": {
46
+ "codemirror": "^5.65.16",
47
+ "form-storage": "^1.3.5",
48
+ "formBuilder": "^3.19.12",
49
+ "inline-attacher": "^0.0.7",
50
+ "jsrender": "^1.0.9",
51
+ "leaflet.featuregroup.subgroup": "^1.0.2",
52
+ "tom-select": "2.2.2"
53
+ }
54
+ }