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
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ class DestroyPrivateDataJob < ApplicationJob
6
+ queue_as :default
7
+
8
+ # Destroys private data associated with the resource
9
+ def perform(resource)
10
+ extra_fields = Decidim::DecidimAwesome::ProposalExtraField.where(
11
+ proposal: Decidim::Proposals::Proposal.where(component: resource)
12
+ ).where("private_body_updated_at < ?", DecidimAwesome.private_data_expiration_time.ago)
13
+
14
+ extra_fields.find_each do |extra_field|
15
+ extra_field.update(private_body: nil)
16
+ end
17
+
18
+ Lock.new(resource.organization).release!(resource)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ class ExportAdminActionsJob < ApplicationJob
6
+ queue_as :default
7
+
8
+ def perform(current_user, format, collection_ids)
9
+ collection = serialized_collection(collection_ids)
10
+
11
+ export_data = Exporters.find_exporter(format).new(collection).export
12
+
13
+ ExportMailer.export(current_user, "admin_actions", export_data).deliver_now
14
+ end
15
+
16
+ private
17
+
18
+ def serialized_collection(collection_ids)
19
+ @serialized_collection ||= begin
20
+ collection = PaperTrailVersion.where(id: collection_ids)
21
+ collection.map do |item|
22
+ PaperTrailVersionSerializer.new(item).serialize
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module HasProposalExtraFields
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ has_one :extra_fields, as: :proposal, foreign_key: "decidim_proposal_id", foreign_type: "decidim_proposal_type", class_name: "Decidim::DecidimAwesome::ProposalExtraField",
10
+ dependent: :destroy
11
+
12
+ after_save do |proposal|
13
+ if proposal.extra_fields && proposal.extra_fields.changed?
14
+ proposal.extra_fields.save
15
+ proposal.update_vote_weights
16
+ proposal.reload
17
+ end
18
+ end
19
+
20
+ delegate :private_body=, to: :safe_extra_fields
21
+
22
+ def private_body
23
+ extra_fields.private_body if extra_fields
24
+ end
25
+
26
+ def update_private_body!(private_body)
27
+ safe_extra_fields.private_body = private_body
28
+ safe_extra_fields.save!
29
+ self.extra_fields = safe_extra_fields
30
+ end
31
+
32
+ def weight_count(weight)
33
+ safe_extra_fields.vote_weight_totals[weight.to_s] || 0
34
+ end
35
+
36
+ def vote_weights
37
+ @vote_weights ||= all_vote_weights.to_h { |weight| [manifest&.label_for(weight) || weight.to_s, weight_count(weight)] }
38
+ end
39
+
40
+ def manifest
41
+ @manifest ||= DecidimAwesome.voting_registry.find(component.settings.awesome_voting_manifest)
42
+ end
43
+
44
+ def all_vote_weights
45
+ @all_vote_weights ||= self.class.all_vote_weights_for(component)
46
+ end
47
+
48
+ def update_vote_weights
49
+ votes = Decidim::Proposals::ProposalVote.where(proposal: self)
50
+ safe_extra_fields.vote_weight_totals = {}
51
+ votes.each do |vote|
52
+ safe_extra_fields.vote_weight_totals[vote.weight] ||= 0
53
+ safe_extra_fields.vote_weight_totals[vote.weight] += 1
54
+ end
55
+ @vote_weights = nil
56
+ @all_vote_weights = nil
57
+ end
58
+
59
+ def update_vote_weights!
60
+ update_vote_weights
61
+ safe_extra_fields.save!
62
+ self.extra_fields = safe_extra_fields
63
+ end
64
+
65
+ def safe_extra_fields
66
+ @safe_extra_fields ||= (persisted? && reload.extra_fields) || build_extra_fields(vote_weight_totals: {})
67
+ end
68
+
69
+ # collects all different weights stored along the different proposals in a different component
70
+ def self.all_vote_weights_for(component)
71
+ Decidim::DecidimAwesome::VoteWeight.where(
72
+ proposal_vote_id: Decidim::Proposals::ProposalVote.where(
73
+ proposal: Decidim::Proposals::Proposal.where(component:)
74
+ )
75
+ ).pluck(:weight)
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module HasVoteWeight
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ has_one :vote_weight, foreign_key: "proposal_vote_id", class_name: "Decidim::DecidimAwesome::VoteWeight", dependent: :destroy
10
+
11
+ delegate :weight, to: :vote_weight, allow_nil: true
12
+ delegate :update_vote_weight_totals!, to: :vote_weight, allow_nil: true
13
+
14
+ # this is necessary when vote changes from temporary to final
15
+ after_update :update_vote_weight!
16
+
17
+ def weight=(new_weight)
18
+ vote_weight = VoteWeight.find_or_initialize_by(vote: self)
19
+ vote_weight.weight = new_weight
20
+ vote_weight.save
21
+ reload
22
+ end
23
+
24
+ def update_vote_weight!
25
+ VoteWeight.find_by(vote: self)&.update_vote_weight_totals!
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -12,7 +12,6 @@ module Decidim
12
12
  class_name: "Decidim::DecidimAwesome::ConfigConstraint",
13
13
  dependent: :destroy
14
14
 
15
- validates :organization, presence: true
16
15
  validates :var, uniqueness: { scope: :decidim_organization_id }
17
16
 
18
17
  def additional_constraints
@@ -26,7 +25,7 @@ module Decidim
26
25
  end
27
26
 
28
27
  def self.for_organization(organization)
29
- where(organization: organization)
28
+ where(organization:)
30
29
  end
31
30
 
32
31
  # use this instead of "constraints" to evaluate dynamically added constants
@@ -6,8 +6,6 @@ module Decidim
6
6
  self.table_name = "decidim_awesome_config_constraints"
7
7
 
8
8
  belongs_to :awesome_config, foreign_key: :decidim_awesome_config_id, class_name: "Decidim::DecidimAwesome::AwesomeConfig"
9
-
10
- validates :awesome_config, presence: true
11
9
  end
12
10
  end
13
11
  end
@@ -10,9 +10,6 @@ module Decidim
10
10
  belongs_to :author, foreign_key: :decidim_author_id, class_name: "Decidim::User"
11
11
  belongs_to :organization, foreign_key: :decidim_organization_id, class_name: "Decidim::Organization"
12
12
 
13
- validates :organization, presence: true
14
- validates :author, presence: true
15
-
16
13
  has_one_attached :file
17
14
  validates_upload :file, uploader: Decidim::DecidimAwesome::ImageUploader
18
15
  end
@@ -0,0 +1,117 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ class PaperTrailVersion < PaperTrail::Version
6
+ default_scope { order("versions.created_at DESC") }
7
+
8
+ def self.safe_user_roles
9
+ DecidimAwesome.participatory_space_roles.filter(&:safe_constantize)
10
+ end
11
+
12
+ def self.safe_admin_role_type(admin_role)
13
+ Decidim.user_roles.find { |role| role == admin_role }
14
+ end
15
+
16
+ scope :space_role_actions, lambda { |organization|
17
+ role_changes = where(item_type: PaperTrailVersion.safe_user_roles, event: "create")
18
+ user_ids_from_object_changes = role_changes.pluck(:object_changes).map { |change| change.match(/decidim_user_id:\n- ?\n- (\d+)/)[1].to_i }
19
+ relevant_user_ids = Decidim::User.select(:id).where(id: user_ids_from_object_changes, organization:).pluck(:id)
20
+ # add users that might have been completly destroyed in any organization
21
+ relevant_user_ids += user_ids_from_object_changes - Decidim::User.select("id").where(id: user_ids_from_object_changes).pluck(:id)
22
+
23
+ role_changes.where("object_changes ~ ANY (array[?])", relevant_user_ids.map { |id| "decidim_user_id:\n- ?\n- #{id}" })
24
+ }
25
+
26
+ scope :in_organization, lambda { |organization|
27
+ joins("LEFT JOIN decidim_users ON decidim_users.id = item_id")
28
+ .where("item_type = 'Decidim::UserBaseEntity' AND decidim_users.decidim_organization_id = ?", organization.id)
29
+ .order("versions.created_at DESC")
30
+ }
31
+
32
+ def self.admin_role_actions(filter = nil)
33
+ base = where(item_type: "Decidim::UserBaseEntity", event: %w(create update))
34
+ case filter
35
+ when nil
36
+ base.where("object_changes LIKE '%\nroles:\n- []\n- - %' OR object_changes LIKE '%\nadmin:\n- false\n- true%'")
37
+ when "admin"
38
+ base.where("object_changes LIKE '%\nadmin:\n- false\n- true%'")
39
+ else
40
+ base.where("object_changes LIKE ?", "%\nroles:\n- []\n- - #{filter}\n%")
41
+ end
42
+ end
43
+
44
+ def present(html: true)
45
+ @present ||= if item_type == "Decidim::UserBaseEntity"
46
+ UserEntityPresenter.new(self, html:)
47
+ elsif item_type.in?(PaperTrailVersion.safe_user_roles)
48
+ ParticipatorySpaceRolePresenter.new(self, html:)
49
+ else
50
+ self
51
+ end
52
+ end
53
+
54
+ ransacker :role_type do
55
+ @role_type ||= begin
56
+ queries = PaperTrailVersion.safe_user_roles.map do |role_class|
57
+ table = role_class.safe_constantize.table_name
58
+ %{
59
+ SELECT ("#{table}"."role")::text FROM "#{table}"
60
+ WHERE "#{table}"."id" = "versions"."item_id"
61
+ AND item_type = '#{role_class}'
62
+ }
63
+ end
64
+ Arel.sql("(#{queries.join(" UNION ")})")
65
+ end
66
+ end
67
+
68
+ ransacker :participatory_space_type do
69
+ Arel.sql(%{("item_type")::text})
70
+ end
71
+
72
+ ransacker :user_email do
73
+ @user_email ||= begin
74
+ queries = PaperTrailVersion.safe_user_roles.map do |role_class|
75
+ table = role_class.safe_constantize.table_name
76
+ %(
77
+ SELECT decidim_users.email FROM decidim_users
78
+ JOIN #{table} ON decidim_users.id = #{table}.decidim_user_id
79
+ WHERE #{table}.id = versions.item_id
80
+ AND item_type = '#{role_class}'
81
+ )
82
+ end
83
+ queries << %(
84
+ SELECT decidim_users.email FROM decidim_users
85
+ WHERE decidim_users.id = versions.item_id
86
+ AND item_type = 'Decidim::UserBaseEntity'
87
+ )
88
+ Arel.sql("(#{queries.join(" UNION ")})")
89
+ end
90
+ end
91
+
92
+ ransacker :user_name do
93
+ @user_name ||= begin
94
+ queries = PaperTrailVersion.safe_user_roles.map do |role_class|
95
+ table = role_class.safe_constantize.table_name
96
+ %(
97
+ SELECT decidim_users.name FROM decidim_users
98
+ JOIN #{table} ON decidim_users.id = #{table}.decidim_user_id
99
+ WHERE #{table}.id = versions.item_id
100
+ AND item_type = '#{role_class}'
101
+ )
102
+ end
103
+ queries << %(
104
+ SELECT decidim_users.name FROM decidim_users
105
+ WHERE decidim_users.id = versions.item_id
106
+ AND item_type = 'Decidim::UserBaseEntity'
107
+ )
108
+ Arel.sql("(#{queries.join(" UNION ")})")
109
+ end
110
+ end
111
+
112
+ ransacker :created_at, type: :date do
113
+ Arel.sql("date(versions.created_at)")
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ # This class adds some attributes to the proposal model in a different table
6
+ # in particular, it adds a private_body field that should be encrypted
7
+ # private_body is not translatable, nor is intended to be as it won't be shown to the public
8
+ class ProposalExtraField < ApplicationRecord
9
+ include Decidim::RecordEncryptor
10
+
11
+ self.table_name = "decidim_awesome_proposal_extra_fields"
12
+
13
+ belongs_to :proposal, foreign_key: "decidim_proposal_id", foreign_type: "decidim_proposal_type", polymorphic: true
14
+
15
+ encrypt_attribute :private_body, type: :string
16
+
17
+ after_initialize :store_private_body
18
+ before_save :update_private_body_updated_at
19
+
20
+ # validate not more than one extra field can be associated to a proposal
21
+ # validates :proposal, uniqueness: true
22
+ validate :no_more_than_one_extra_field
23
+
24
+ private
25
+
26
+ def store_private_body
27
+ @initial_private_body = private_body
28
+ end
29
+
30
+ # using private_body_changed? does not sufice as the encrypted value is always updated on saving
31
+ def update_private_body_updated_at
32
+ if private_body != @initial_private_body
33
+ self.private_body_updated_at = Time.current
34
+ @initial_private_body = private_body
35
+ end
36
+ end
37
+
38
+ def no_more_than_one_extra_field
39
+ return unless ProposalExtraField.where(proposal:).where.not(id:).exists?
40
+
41
+ errors.add(:proposal, :invalid)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ class VoteWeight < ApplicationRecord
6
+ self.table_name = "decidim_awesome_vote_weights"
7
+ belongs_to :vote, foreign_key: "proposal_vote_id", class_name: "Decidim::Proposals::ProposalVote"
8
+
9
+ delegate :proposal, to: :vote
10
+
11
+ after_destroy :update_vote_weight_totals!
12
+ after_save :update_vote_weight_totals!
13
+
14
+ def update_vote_weight_totals!
15
+ extra = Decidim::DecidimAwesome::ProposalExtraField.find_or_initialize_by(proposal:)
16
+ extra.vote_weight_totals = extra.vote_weight_totals || {}
17
+
18
+ prev = weight_previous_change&.first
19
+ if prev.present?
20
+ extra.vote_weight_totals[prev.to_s] = Decidim::DecidimAwesome::VoteWeight.where(vote: proposal.votes, weight: prev).count
21
+ extra.vote_weight_totals.delete(prev.to_s) if extra.vote_weight_totals[prev.to_s].zero?
22
+ end
23
+ extra.vote_weight_totals[weight.to_s] = Decidim::DecidimAwesome::VoteWeight.where(vote: proposal.votes, weight:).count
24
+ extra.vote_weight_totals.delete(weight.to_s) if extra.vote_weight_totals[weight.to_s].zero?
25
+ extra.weight_total = extra.vote_weight_totals.inject(0) { |sum, (weight, count)| sum + (weight.to_i * count) }
26
+ extra.save!
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ <!-- insert_after 'erb[loud]:contains("@account.organization.available_locales")' -->
2
+
3
+ <%= render partial: "decidim/decidim_awesome/account/timezone_select", locals: { f: f } %>
@@ -0,0 +1,3 @@
1
+ <!-- insert_after "erb[loud]:contains('show_email_modal')" -->
2
+
3
+ <%= render "decidim/decidim_awesome/admin/officializations/verification_modal" %>
@@ -0,0 +1,5 @@
1
+ <!-- insert_before "td.table-list__actions" -->
2
+
3
+ <% if awesome_config[:admins_available_authorizations] %>
4
+ <%= render "decidim/decidim_awesome/admin/officializations/participants_td", user: %>
5
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <!-- insert_before "th:last" -->
2
+
3
+ <% if awesome_config[:admins_available_authorizations] %>
4
+ <%= render "decidim/decidim_awesome/admin/officializations/participants_th" %>
5
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <!-- replace "erb[loud]:contains('form.translated :editor, :body')" -->
2
+
3
+ <%= render partial: "decidim/decidim_awesome/admin/proposals/editor", locals: { form: form } %>
@@ -0,0 +1,7 @@
1
+ <!-- replace "erb[loud]:contains('simple_format(present(proposal).body(strip_tags: true))')" -->
2
+
3
+ <% if awesome_proposal_custom_fields.blank? %>
4
+ <%= simple_format(present(proposal).body(strip_tags: true)) %>
5
+ <% else %>
6
+ <%= render_proposal_body(proposal) %>
7
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <!-- insert_before "erb[silent]:contains('presented_endorsers = endorsers_presenters_for(proposal)')" -->
2
+
3
+ <% unless awesome_proposal_private_custom_fields.blank? %>
4
+ <%= render partial: "decidim/decidim_awesome/admin/proposals/private_body", locals: { proposal: proposal } %>
5
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <!-- replace "erb[loud]:contains('amend_button_for @proposal')" -->
2
+
3
+ <%= amend_button_for @proposal %>
4
+
5
+ <%= render "decidim/decidim_awesome/amendments/modal" if @proposal.emendations.not_hidden.where(decidim_amendments: { state: Decidim::Amendment.states["evaluating"] }).count.positive? && @proposal.amendable? %>
@@ -0,0 +1,7 @@
1
+ <!-- surround_contents "div[data-erb-id^=proposal-]" -->
2
+
3
+ <% if view = awesome_voting_manifest_for(current_component)&.show_vote_button_view %>
4
+ <%= render view, local_assigns if view.present? %>
5
+ <% else %>
6
+ <%= render_original %>
7
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <!-- replace "erb[silent]:contains('if !current_settings.votes_hidden?')" -->
2
+
3
+ <% if view = awesome_voting_manifest_for(current_component)&.show_votes_count_view %>
4
+ <% if view.present? %>
5
+ <%= render view, local_assigns %>
6
+ <% elsif !current_settings.votes_hidden? %>
7
+ <%# Hidden placeholder for votes count to avoid update_button_adn_counter.js.erb cause a javascript console error %>
8
+ <span style="display: none" id="proposal-<%= proposal.id %>-votes-count"><%= proposal.proposal_votes_count || 0 %></span>
9
+ <% end %>
10
+ <% elsif !current_settings.votes_hidden? && current_component.participatory_space.can_participate?(current_user) %>
@@ -0,0 +1,9 @@
1
+ <!-- insert_top '#advanced-settings-panel' -->
2
+
3
+ <% if Decidim::DecidimAwesome.enabled?(:admins_available_authorizations) %>
4
+ <div class="awesome_available_authorizations border-2 rounded border-background p-4 form__wrapper mt-8 first:mt-0 last:pb-4">
5
+ <h3 class="h4"><%= t "decidim.decidim_awesome.system.organizations.awesome_tweaks" %></h3>
6
+
7
+ <%= render partial: "decidim/decidim_awesome/system/organizations/admin_allowed_authorizations", locals: { f: f } %>
8
+ </div>
9
+ <% end %>
@@ -1,5 +1,6 @@
1
- <%= render partial: "#{version_prefix}/layouts/decidim/head" %>
1
+ <!-- insert_after "erb[loud]:contains('layouts/decidim/js_configuration')" -->
2
2
 
3
+ <%= render partial: "layouts/decidim/decidim_awesome/awesome_config" %>
3
4
  <% if show_public_intergram? %>
4
5
  <%= render partial: "layouts/decidim/decidim_awesome/intergram_widget", locals: { settings: organization_awesome_config[:intergram_for_public_settings] } %>
5
6
  <% end %>
@@ -0,0 +1,7 @@
1
+ <!-- insert_after "erb[loud]:contains('append_stylesheet_pack_tag')" -->
2
+
3
+ <% append_stylesheet_pack_tag "decidim_decidim_awesome", media: "all" %>
4
+ <%= render(partial: "layouts/decidim/decidim_awesome/custom_styles") if awesome_scoped_styles.present? %>
5
+
6
+ <% append_javascript_pack_tag "decidim_decidim_awesome", defer: false %>
7
+ <% append_javascript_pack_tag("decidim_decidim_awesome_custom_fields") if Decidim::DecidimAwesome.enabled?(:proposal_custom_fields) %>
@@ -0,0 +1,3 @@
1
+ <!-- insert_after "erb[loud]:contains('snippets.display(:head)')" -->
2
+
3
+ <%= render(partial: "layouts/decidim/decidim_awesome/admin/custom_styles") if awesome_scoped_admin_styles.present? %>
@@ -0,0 +1,10 @@
1
+ <!-- insert_after "erb[loud]:contains('append_stylesheet_pack_tag')" -->
2
+
3
+ <%= render partial: "layouts/decidim/decidim_awesome/awesome_config" %>
4
+ <% append_stylesheet_pack_tag("decidim_admin_decidim_awesome_global") %>
5
+ <% append_javascript_pack_tag("decidim_admin_decidim_awesome_global") %>
6
+
7
+ <% append_javascript_pack_tag("decidim_decidim_awesome_custom_fields") if Decidim::DecidimAwesome.enabled?(:proposal_custom_fields) %>
8
+ <% if awesome_config[:intergram_for_admins] %>
9
+ <%= render partial: "layouts/decidim/decidim_awesome/intergram_widget", locals: { settings: organization_awesome_config[:intergram_for_admins_settings] } %>
10
+ <% end %>
@@ -1,5 +1,5 @@
1
- import "src/decidim/decidim_awesome/awesome_admin"
2
- import "jquery-ui/ui/widgets/sortable" // This is needed by custom fields builder but if loader there duplicates the jQuery inclusion
1
+ // DO NOT include any javascript file here, but inside the following file instead
2
+ import "src/decidim/decidim_awesome/awesome_admin";
3
3
 
4
4
  // CSS
5
5
  import "entrypoints/decidim_admin_decidim_awesome.scss";
@@ -0,0 +1,4 @@
1
+ import "src/decidim/decidim_awesome/awesome_admin_global";
2
+
3
+ // CSS
4
+ import "entrypoints/decidim_admin_decidim_awesome_global.scss";
@@ -0,0 +1 @@
1
+ @import "stylesheets/decidim/decidim_awesome/awesome_admin_global";
@@ -0,0 +1 @@
1
+ @import "stylesheets/decidim/decidim_awesome/admin/admin_accountability";
@@ -1,9 +1,9 @@
1
1
  import "src/decidim/decidim_awesome/awesome_application.js"
2
2
 
3
- // Images
3
+ // // Images
4
4
  require.context("../images", true)
5
5
 
6
- // CSS
6
+ // // CSS
7
7
  import "entrypoints/decidim_decidim_awesome.scss";
8
8
 
9
9
 
@@ -1 +1 @@
1
- @import "stylesheets/decidim/decidim_awesome/awesome_map/map"
1
+ @import "stylesheets/decidim/decidim_awesome/awesome_map/map";
@@ -0,0 +1,14 @@
1
+ import createEditor from "src/decidim/decidim_awesome/editor";
2
+ import DecidimKit from "src/decidim/editor/extensions/decidim_kit";
3
+
4
+ // CSS
5
+ import "stylesheets/decidim/editor.scss"
6
+
7
+ window.DecidimKit = DecidimKit;
8
+ window.currentEditors = window.currentEditors || [];
9
+
10
+ window.createEditor = (container) => {
11
+ let editor = createEditor(container);
12
+ window.currentEditors.push(editor);
13
+ return editor;
14
+ }
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg version="1.1" viewBox="0 0 669.06268 969.54651" xml:space="preserve" id="handcard" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
3
+ <desc id="desc1">Created with Fabric.js 3.5.0</desc>
4
+ <defs id="defs1" />
5
+ <g transform="matrix(10.7728,0,0,10.7728,334.531,484.77376)" id="982417">
6
+ <path style="opacity:1;fill:#000000;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" transform="translate(-49.9993,-50.0003)"
7
+ d="M 80.938,56.066 C 80.579,52.743 79.386,49.587 77.709,46.711 74.703,41.554 70.207,37.346 65.427,33.849 64.044,32.838 62.615,31.854 61.124,31 c 0,-0.209 0,-0.418 0,-0.626 0,-5.312 0,-10.622 0,-15.933 0,-1.465 0,-2.932 0,-4.397 0,-2.024 -0.681,-4 -2.786,-4.753 -1.15,-0.412 -2.524,-0.265 -3.729,-0.265 -2.228,0 -4.455,0 -6.683,0 -5.787,0 -11.574,0 -17.363,0 -1.992,0 -3.984,0 -5.977,0 -1.823,0 -3.574,0.082 -4.797,1.724 -0.84,1.128 -0.843,2.358 -0.843,3.667 0,1.446 0,2.892 0,4.338 0,11.004 0,22.009 0,33.013 0,4.597 0,9.193 0,13.789 0,1.063 0,2.126 0,3.188 0,2.426 1.709,4.56 4.264,4.56 8.156,0 16.313,0 24.47,0 0.186,2.026 0.826,4.078 1.49,5.949 0.916,2.579 2.33,4.917 3.326,7.454 0.884,2.253 1.41,4.654 1.62,7.062 0.144,1.644 -0.204,3.627 1.431,4.653 0.861,0.54 1.828,0.577 2.807,0.577 2.412,0 4.824,0 7.237,0 2.574,0 5.148,0 7.723,0 1.755,0 3.438,-0.292 4.02,-2.279 0.387,-1.319 -0.104,-3.022 -0.21,-4.368 -0.145,-1.84 -0.189,-3.687 -0.165,-5.532 0.067,-5.036 0.778,-10.041 2.061,-14.91 0.584,-2.218 1.43,-4.356 1.788,-6.629 0.272,-1.73 0.32,-3.475 0.13,-5.216 z m -57.652,11.05 c -1.584,0 -2.151,-1.277 -2.151,-2.619 0,-3.297 0,-6.594 0,-9.891 0,-11.382 0,-22.763 0,-34.144 0,-3.47 0,-6.94 0,-10.41 0,-1.346 0.363,-2.839 2.075,-2.839 1.064,0 2.129,0 3.193,0 9.901,0 19.803,0 29.703,0 0.256,0 0.512,0 0.768,0 1.202,0 2.063,0.997 2.063,2.158 0,1 0,2 0,3 0,4.861 0,9.723 0,14.584 0,1.563 0,3.123 0,4.686 0,6.727 0,13.453 0,20.181 -0.247,-0.354 -0.494,-0.708 -0.741,-1.063 -0.357,-0.512 -0.703,-1.027 -1.065,-1.523 -0.552,-0.782 -1.157,-1.482 -1.889,-2.05 -0.065,-0.051 -0.133,-0.102 -0.2,-0.15 -0.04,-0.029 -0.079,-0.059 -0.12,-0.087 -0.22,-0.153 -0.452,-0.296 -0.7,-0.425 -1.724,-0.895 -3.705,-0.971 -5.468,-0.369 -0.278,0.091 -0.553,0.194 -0.823,0.314 -1.247,0.555 -2.22,1.473 -2.89,2.576 -0.857,1.356 -1.197,2.968 -1.027,4.537 0.108,1.127 0.481,2.229 1.141,3.188 0.008,0.011 0.014,0.021 0.02,0.031 2.402,3.438 4.803,6.876 7.204,10.314 -8.381,0 -16.764,0 -25.147,0 -1.317,0.001 -2.632,0.001 -3.946,0.001 z m 54.901,-4.058 c -0.726,2.635 -1.572,5.202 -2.125,7.887 -0.515,2.503 -0.861,5.042 -1.079,7.587 -0.325,3.791 -0.299,7.621 0.097,11.405 0.103,0.973 0.539,2.551 -0.503,2.844 -0.049,0.014 -0.08,0.023 -0.102,0.031 -0.016,-10e-4 -0.041,-10e-4 -0.08,0.001 -0.023,0 -0.047,0 -0.069,0 -0.222,0 -0.442,0 -0.664,0 -4.991,0 -9.983,0 -14.976,0 -0.554,0 -1.515,0.124 -1.96,-0.222 -0.503,-0.393 -0.331,-1.156 -0.353,-1.715 -0.04,-1.057 -0.161,-2.105 -0.311,-3.151 -0.368,-2.584 -1.153,-5.077 -2.242,-7.444 -1.081,-2.354 -2.255,-4.587 -3.029,-7.072 -0.401,-1.289 -0.767,-2.604 -0.912,-3.903 1.53,0 3.06,0 4.591,0 0.778,0 1.432,-0.949 0.944,-1.646 C 52.852,63.992 50.29,60.323 47.729,56.655 47.72,56.642 47.71,56.63 47.703,56.617 47.566,56.422 47.43,56.226 47.293,56.031 47.141,55.81 46.991,55.587 46.852,55.357 c -1.217,-2.139 -0.793,-4.683 1.099,-6.335 0.921,-0.757 2.11,-1.116 3.288,-1.063 1.083,0.078 2.15,0.51 2.996,1.216 0.531,0.491 0.952,1.087 1.383,1.703 0.436,0.624 0.871,1.247 1.306,1.87 0.002,0.003 0.003,0.005 0.005,0.007 0.72,1.03 1.439,2.061 2.158,3.091 0.006,0.008 0.013,0.015 0.019,0.022 1.585,2.27 3.17,4.538 4.755,6.808 0.801,1.147 2.698,0.056 1.889,-1.104 -1.541,-2.206 -3.082,-4.413 -4.623,-6.619 0,-7.136 0,-14.271 0,-21.405 2.207,1.357 4.299,2.944 6.261,4.608 4.684,3.972 8.976,8.925 10.741,14.916 0.963,3.27 0.962,6.701 0.058,9.986 z"
8
+ stroke-linecap="round" id="base" />
9
+ <path style="fill:#ffffff;stroke-width:2.1164"
10
+ d="m 594.70899,956.61376 c -3.28069,-3.2807 -4.2328,-7.05467 -4.2328,-16.77808 0,-32.11564 -9.83754,-74.34114 -25.60954,-109.92338 -26.95925,-60.82111 -31.6305,-72.2574 -36.42289,-89.17156 -2.80338,-9.89418 -5.6834,-21.08466 -6.40004,-24.86772 l -1.30298,-6.87831 h 25.9312 c 29.14115,0 35.40474,-2.18349 35.25312,-12.28931 -0.0589,-3.92805 -14.85858,-26.75473 -47.60495,-73.42498 -50.64801,-72.1837 -55.75178,-81.73001 -52.97606,-99.08843 2.08776,-13.05611 11.52456,-28.57643 21.58317,-35.49693 19.59236,-13.47989 44.84759,-12.01341 62.13882,3.60818 4.55252,4.11292 29.88304,38.42498 56.29006,76.24903 26.40701,37.82407 50.16106,70.17863 52.78676,71.89905 8.42428,5.51981 20.03703,-0.47898 20.03703,-10.3505 0,-1.63993 -11.90476,-20.0041 -26.45502,-40.80929 L 641.26984,551.46391 V 438.69492 c 0,-62.02294 0.5192,-112.76899 1.15378,-112.76899 2.60326,0 34.24198,22.50961 54.43477,38.72806 94.05661,75.54436 141.83302,162.75992 132.80692,242.43835 -1.16082,10.24728 -5.9989,32.36736 -10.7513,49.15577 -18.01143,63.62753 -24.50586,96.52031 -29.42743,149.04289 -2.93469,31.31895 -2.80074,82.23702 0.31386,119.30468 2.43431,28.97151 2.3662,30.55433 -1.4343,33.33333 -3.24663,2.37402 -21.26318,2.91755 -96.70716,2.91755 -89.89531,0 -92.84601,-0.12883 -96.94999,-4.2328 z" id="hand" transform="matrix(0.09282638,0,0,0.09282638,-48.375947,-46.413263)" />
11
+ <path style="stroke-width:2.1164"
12
+ d="m 225.39683,681.59712 c -2.32805,-0.95285 -6.13757,-3.8495 -8.46561,-6.43701 -4.18611,-4.65268 -4.23888,-8.07776 -4.7831,-310.46731 C 211.54624,30.27064 210.91004,48.349453 223.482,42.621285 c 3.82607,-1.743274 56.50183,-2.409645 190.4793,-2.409645 201.1158,0 193.91605,-0.418193 199.38327,11.581074 1.91052,4.193088 2.52845,61.467056 2.52845,234.350356 v 228.80101 l -13.95454,-19.5069 c -22.17785,-31.00215 -39.15059,-41.1936 -68.58515,-41.18268 -32.91354,0.0122 -58.2372,15.56946 -71.11346,43.68757 -5.20002,11.35535 -6.03318,15.79234 -6.04961,32.21666 -0.0255,25.49354 2.37816,30.28262 47.83916,95.31596 20.31255,29.05771 37.65727,54.02266 38.54383,55.47769 1.28415,2.1076 -30.36523,2.61822 -155.65586,2.51134 -86.49727,-0.0738 -159.17252,-0.91375 -161.50056,-1.8666 z" id="card" transform="matrix(0.09282638,0,0,0.09282638,-48.375947,-46.413263)" />
13
+ </g>
14
+ </svg>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg version="1.1" viewBox="0 0 669.06268 969.54651" xml:space="preserve" id="handcard" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
3
+ <desc id="desc1">Created with Fabric.js 3.5.0</desc>
4
+ <defs id="defs1" />
5
+ <g transform="matrix(10.7728,0,0,10.7728,334.531,484.77376)" id="982417">
6
+ <path style="opacity:1;fill:#000000;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" transform="translate(-49.9993,-50.0003)"
7
+ d="M 80.938,56.066 C 80.579,52.743 79.386,49.587 77.709,46.711 74.703,41.554 70.207,37.346 65.427,33.849 64.044,32.838 62.615,31.854 61.124,31 c 0,-0.209 0,-0.418 0,-0.626 0,-5.312 0,-10.622 0,-15.933 0,-1.465 0,-2.932 0,-4.397 0,-2.024 -0.681,-4 -2.786,-4.753 -1.15,-0.412 -2.524,-0.265 -3.729,-0.265 -2.228,0 -4.455,0 -6.683,0 -5.787,0 -11.574,0 -17.363,0 -1.992,0 -3.984,0 -5.977,0 -1.823,0 -3.574,0.082 -4.797,1.724 -0.84,1.128 -0.843,2.358 -0.843,3.667 0,1.446 0,2.892 0,4.338 0,11.004 0,22.009 0,33.013 0,4.597 0,9.193 0,13.789 0,1.063 0,2.126 0,3.188 0,2.426 1.709,4.56 4.264,4.56 8.156,0 16.313,0 24.47,0 0.186,2.026 0.826,4.078 1.49,5.949 0.916,2.579 2.33,4.917 3.326,7.454 0.884,2.253 1.41,4.654 1.62,7.062 0.144,1.644 -0.204,3.627 1.431,4.653 0.861,0.54 1.828,0.577 2.807,0.577 2.412,0 4.824,0 7.237,0 2.574,0 5.148,0 7.723,0 1.755,0 3.438,-0.292 4.02,-2.279 0.387,-1.319 -0.104,-3.022 -0.21,-4.368 -0.145,-1.84 -0.189,-3.687 -0.165,-5.532 0.067,-5.036 0.778,-10.041 2.061,-14.91 0.584,-2.218 1.43,-4.356 1.788,-6.629 0.272,-1.73 0.32,-3.475 0.13,-5.216 z m -57.652,11.05 c -1.584,0 -2.151,-1.277 -2.151,-2.619 0,-3.297 0,-6.594 0,-9.891 0,-11.382 0,-22.763 0,-34.144 0,-3.47 0,-6.94 0,-10.41 0,-1.346 0.363,-2.839 2.075,-2.839 1.064,0 2.129,0 3.193,0 9.901,0 19.803,0 29.703,0 0.256,0 0.512,0 0.768,0 1.202,0 2.063,0.997 2.063,2.158 0,1 0,2 0,3 0,4.861 0,9.723 0,14.584 0,1.563 0,3.123 0,4.686 0,6.727 0,13.453 0,20.181 -0.247,-0.354 -0.494,-0.708 -0.741,-1.063 -0.357,-0.512 -0.703,-1.027 -1.065,-1.523 -0.552,-0.782 -1.157,-1.482 -1.889,-2.05 -0.065,-0.051 -0.133,-0.102 -0.2,-0.15 -0.04,-0.029 -0.079,-0.059 -0.12,-0.087 -0.22,-0.153 -0.452,-0.296 -0.7,-0.425 -1.724,-0.895 -3.705,-0.971 -5.468,-0.369 -0.278,0.091 -0.553,0.194 -0.823,0.314 -1.247,0.555 -2.22,1.473 -2.89,2.576 -0.857,1.356 -1.197,2.968 -1.027,4.537 0.108,1.127 0.481,2.229 1.141,3.188 0.008,0.011 0.014,0.021 0.02,0.031 2.402,3.438 4.803,6.876 7.204,10.314 -8.381,0 -16.764,0 -25.147,0 -1.317,0.001 -2.632,0.001 -3.946,0.001 z m 54.901,-4.058 c -0.726,2.635 -1.572,5.202 -2.125,7.887 -0.515,2.503 -0.861,5.042 -1.079,7.587 -0.325,3.791 -0.299,7.621 0.097,11.405 0.103,0.973 0.539,2.551 -0.503,2.844 -0.049,0.014 -0.08,0.023 -0.102,0.031 -0.016,-10e-4 -0.041,-10e-4 -0.08,0.001 -0.023,0 -0.047,0 -0.069,0 -0.222,0 -0.442,0 -0.664,0 -4.991,0 -9.983,0 -14.976,0 -0.554,0 -1.515,0.124 -1.96,-0.222 -0.503,-0.393 -0.331,-1.156 -0.353,-1.715 -0.04,-1.057 -0.161,-2.105 -0.311,-3.151 -0.368,-2.584 -1.153,-5.077 -2.242,-7.444 -1.081,-2.354 -2.255,-4.587 -3.029,-7.072 -0.401,-1.289 -0.767,-2.604 -0.912,-3.903 1.53,0 3.06,0 4.591,0 0.778,0 1.432,-0.949 0.944,-1.646 C 52.852,63.992 50.29,60.323 47.729,56.655 47.72,56.642 47.71,56.63 47.703,56.617 47.566,56.422 47.43,56.226 47.293,56.031 47.141,55.81 46.991,55.587 46.852,55.357 c -1.217,-2.139 -0.793,-4.683 1.099,-6.335 0.921,-0.757 2.11,-1.116 3.288,-1.063 1.083,0.078 2.15,0.51 2.996,1.216 0.531,0.491 0.952,1.087 1.383,1.703 0.436,0.624 0.871,1.247 1.306,1.87 0.002,0.003 0.003,0.005 0.005,0.007 0.72,1.03 1.439,2.061 2.158,3.091 0.006,0.008 0.013,0.015 0.019,0.022 1.585,2.27 3.17,4.538 4.755,6.808 0.801,1.147 2.698,0.056 1.889,-1.104 -1.541,-2.206 -3.082,-4.413 -4.623,-6.619 0,-7.136 0,-14.271 0,-21.405 2.207,1.357 4.299,2.944 6.261,4.608 4.684,3.972 8.976,8.925 10.741,14.916 0.963,3.27 0.962,6.701 0.058,9.986 z"
8
+ stroke-linecap="round" id="base" />
9
+ <path style="fill:#ffffff;stroke-width:2.1164"
10
+ d="m 594.70899,956.61376 c -3.28069,-3.2807 -4.2328,-7.05467 -4.2328,-16.77808 0,-32.11564 -9.83754,-74.34114 -25.60954,-109.92338 -26.95925,-60.82111 -31.6305,-72.2574 -36.42289,-89.17156 -2.80338,-9.89418 -5.6834,-21.08466 -6.40004,-24.86772 l -1.30298,-6.87831 h 25.9312 c 29.14115,0 35.40474,-2.18349 35.25312,-12.28931 -0.0589,-3.92805 -14.85858,-26.75473 -47.60495,-73.42498 -50.64801,-72.1837 -55.75178,-81.73001 -52.97606,-99.08843 2.08776,-13.05611 11.52456,-28.57643 21.58317,-35.49693 19.59236,-13.47989 44.84759,-12.01341 62.13882,3.60818 4.55252,4.11292 29.88304,38.42498 56.29006,76.24903 26.40701,37.82407 50.16106,70.17863 52.78676,71.89905 8.42428,5.51981 20.03703,-0.47898 20.03703,-10.3505 0,-1.63993 -11.90476,-20.0041 -26.45502,-40.80929 L 641.26984,551.46391 V 438.69492 c 0,-62.02294 0.5192,-112.76899 1.15378,-112.76899 2.60326,0 34.24198,22.50961 54.43477,38.72806 94.05661,75.54436 141.83302,162.75992 132.80692,242.43835 -1.16082,10.24728 -5.9989,32.36736 -10.7513,49.15577 -18.01143,63.62753 -24.50586,96.52031 -29.42743,149.04289 -2.93469,31.31895 -2.80074,82.23702 0.31386,119.30468 2.43431,28.97151 2.3662,30.55433 -1.4343,33.33333 -3.24663,2.37402 -21.26318,2.91755 -96.70716,2.91755 -89.89531,0 -92.84601,-0.12883 -96.94999,-4.2328 z" id="hand" transform="matrix(0.09282638,0,0,0.09282638,-48.375947,-46.413263)" />
11
+ <path style="stroke-width:2.1164"
12
+ d="m 225.39683,681.59712 c -2.32805,-0.95285 -6.13757,-3.8495 -8.46561,-6.43701 -4.18611,-4.65268 -4.23888,-8.07776 -4.7831,-310.46731 C 211.54624,30.27064 210.91004,48.349453 223.482,42.621285 c 3.82607,-1.743274 56.50183,-2.409645 190.4793,-2.409645 201.1158,0 193.91605,-0.418193 199.38327,11.581074 1.91052,4.193088 2.52845,61.467056 2.52845,234.350356 v 228.80101 l -13.95454,-19.5069 c -22.17785,-31.00215 -39.15059,-41.1936 -68.58515,-41.18268 -32.91354,0.0122 -58.2372,15.56946 -71.11346,43.68757 -5.20002,11.35535 -6.03318,15.79234 -6.04961,32.21666 -0.0255,25.49354 2.37816,30.28262 47.83916,95.31596 20.31255,29.05771 37.65727,54.02266 38.54383,55.47769 1.28415,2.1076 -30.36523,2.61822 -155.65586,2.51134 -86.49727,-0.0738 -159.17252,-0.91375 -161.50056,-1.8666 z" id="card" transform="matrix(0.09282638,0,0,0.09282638,-48.375947,-46.413263)" />
13
+ <g transform="matrix(0.87618872,0,0,0.87618872,-9.9399602,-21.131679)" id="862203">
14
+ <path style="opacity:1;fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" vector-effect="non-scaling-stroke" transform="translate(-9.2,-6.3)" d="M 6,10.2 1.8,6 0.4,7.4 6,13 18,1 16.6,-0.4 Z" stroke-linecap="round" id="check" />
15
+ </g>
16
+ </g>
17
+ </svg>