decidim-decidim_awesome 0.12.0 → 0.12.3

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 (132) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -0
  3. data/README.md +24 -14
  4. data/Rakefile +12 -0
  5. data/app/cells/concerns/decidim/decidim_awesome/global_menu_cell_override.rb +14 -2
  6. data/app/cells/concerns/decidim/decidim_awesome/proposal_l_cell_override.rb +5 -4
  7. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/show.erb +3 -3
  8. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/vote_block_for.erb +1 -1
  9. data/app/controllers/concerns/decidim/decidim_awesome/admin/maintenance_context.rb +0 -28
  10. data/app/controllers/concerns/decidim/decidim_awesome/needs_hashcash.rb +41 -0
  11. data/app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb +2 -2
  12. data/app/controllers/decidim/decidim_awesome/admin/admin_authorizations_controller.rb +2 -2
  13. data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +0 -4
  14. data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +2 -1
  15. data/app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb +1 -2
  16. data/app/controllers/decidim/decidim_awesome/admin/hashcash_controller.rb +39 -0
  17. data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +1 -1
  18. data/app/controllers/decidim/decidim_awesome/admin/{maintenance_controller.rb → private_data_controller.rb} +9 -9
  19. data/app/controllers/decidim/decidim_awesome/utils_controller.rb +17 -0
  20. data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb +7 -1
  21. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +13 -0
  22. data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +1 -1
  23. data/app/helpers/decidim/decidim_awesome/map_helper.rb +4 -2
  24. data/app/models/decidim/decidim_awesome/paper_trail_version.rb +1 -1
  25. data/app/overrides/decidim/devise/registrations/new/add_hashcash.html.erb.deface +3 -0
  26. data/app/overrides/decidim/devise/sessions/new/add_hashcash.html.erb.deface +3 -0
  27. data/app/overrides/layouts/decidim/_head/add_awesome_custom_styles.html.erb.deface +3 -0
  28. data/app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface +0 -2
  29. data/app/packs/entrypoints/decidim_decidim_awesome_hashcash.js +4 -0
  30. data/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +10 -6
  31. data/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js +4 -2
  32. data/app/packs/src/decidim/decidim_awesome/admin/verifications.js +6 -3
  33. data/app/packs/src/decidim/decidim_awesome/awesome_map/api/proposals_fetcher.js +1 -1
  34. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/controller.js +1 -1
  35. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/proposals_controller.js +1 -1
  36. data/app/packs/src/decidim/decidim_awesome/awesome_map/controls_ui.js +6 -6
  37. data/app/packs/src/decidim/decidim_awesome/awesome_map/load_map.js +1 -1
  38. data/app/packs/src/decidim/decidim_awesome/forms/autosave.js +3 -3
  39. data/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +1 -113
  40. data/app/packs/src/decidim/decidim_awesome/proposals/images.js +1 -1
  41. data/app/packs/src/vendor/form_builder_langs/ar-SA.lang +111 -0
  42. data/app/packs/src/vendor/form_builder_langs/ar-TN.lang +94 -0
  43. data/app/packs/src/vendor/form_builder_langs/ca-ES.lang +110 -0
  44. data/app/packs/src/vendor/form_builder_langs/cs-CZ.lang +105 -0
  45. data/app/packs/src/vendor/form_builder_langs/da-DK.lang +110 -0
  46. data/app/packs/src/vendor/form_builder_langs/de-DE.lang +109 -0
  47. data/app/packs/src/vendor/form_builder_langs/el-GR.lang +110 -0
  48. data/app/packs/src/vendor/form_builder_langs/en-US.lang +117 -0
  49. data/app/packs/src/vendor/form_builder_langs/es-ES.lang +103 -0
  50. data/app/packs/src/vendor/form_builder_langs/fa-IR.lang +108 -0
  51. data/app/packs/src/vendor/form_builder_langs/fi-FI.lang +107 -0
  52. data/app/packs/src/vendor/form_builder_langs/fr-FR.lang +117 -0
  53. data/app/packs/src/vendor/form_builder_langs/he-IL.lang +108 -0
  54. data/app/packs/src/vendor/form_builder_langs/hi-IN.lang +110 -0
  55. data/app/packs/src/vendor/form_builder_langs/hu-HU.lang +108 -0
  56. data/app/packs/src/vendor/form_builder_langs/id-ID.lang +110 -0
  57. data/app/packs/src/vendor/form_builder_langs/it-IT.lang +107 -0
  58. data/app/packs/src/vendor/form_builder_langs/ja-JP.lang +108 -0
  59. data/app/packs/src/vendor/form_builder_langs/my-MM.lang +108 -0
  60. data/app/packs/src/vendor/form_builder_langs/nb-NO.lang +94 -0
  61. data/app/packs/src/vendor/form_builder_langs/nl-NL.lang +94 -0
  62. data/app/packs/src/vendor/form_builder_langs/pl-PL.lang +122 -0
  63. data/app/packs/src/vendor/form_builder_langs/pt-BR.lang +110 -0
  64. data/app/packs/src/vendor/form_builder_langs/pu-IN.lang +110 -0
  65. data/app/packs/src/vendor/form_builder_langs/qz-MM.lang +108 -0
  66. data/app/packs/src/vendor/form_builder_langs/ro-RO.lang +94 -0
  67. data/app/packs/src/vendor/form_builder_langs/ru-RU.lang +110 -0
  68. data/app/packs/src/vendor/form_builder_langs/sl-SI.lang +110 -0
  69. data/app/packs/src/vendor/form_builder_langs/th-TH.lang +111 -0
  70. data/app/packs/src/vendor/form_builder_langs/tr-TR.lang +115 -0
  71. data/app/packs/src/vendor/form_builder_langs/uk-UA.lang +108 -0
  72. data/app/packs/src/vendor/form_builder_langs/vi-VN.lang +94 -0
  73. data/app/packs/src/vendor/form_builder_langs/zh-CN.lang +100 -0
  74. data/app/packs/src/vendor/form_builder_langs/zh-TW.lang +94 -0
  75. data/app/packs/src/vendor/hashcash.js +83 -0
  76. data/app/packs/src/vendor/sha1.js +143 -0
  77. data/app/packs/src/vendor/stamp.js +50 -0
  78. data/app/packs/stylesheets/decidim/decidim_awesome/forms/autosave.scss +2 -12
  79. data/app/presenters/decidim/decidim_awesome/private_data_presenter.rb +2 -2
  80. data/app/views/decidim/decidim_awesome/admin/admin_accountability/index.html.erb +4 -4
  81. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/callout.html.erb +2 -2
  82. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/conflict.html.erb +4 -4
  83. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb +6 -5
  84. data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +6 -6
  85. data/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +2 -2
  86. data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +3 -3
  87. data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +4 -3
  88. data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +1 -1
  89. data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +4 -4
  90. data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_styles.html.erb +3 -3
  91. data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +40 -2
  92. data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +1 -1
  93. data/app/views/decidim/decidim_awesome/admin/hashcash/_filters.html.erb +55 -0
  94. data/app/views/decidim/decidim_awesome/admin/hashcash/index.html.erb +33 -0
  95. data/app/views/decidim/decidim_awesome/admin/hashcash/ip_addresses.html.erb +29 -0
  96. data/app/views/decidim/decidim_awesome/admin/hashcash/show.html.erb +42 -0
  97. data/app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb +2 -2
  98. data/app/views/decidim/decidim_awesome/admin/{maintenance → private_data}/_private_data.html.erb +2 -2
  99. data/app/views/decidim/decidim_awesome/admin/{maintenance/show.html.erb → private_data/index.html.erb} +2 -3
  100. data/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb +1 -1
  101. data/app/views/decidim/decidim_awesome/amendments/_modal.html.erb +2 -2
  102. data/app/views/decidim/decidim_awesome/hashcash/_hidden_field.html.erb +5 -0
  103. data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +2 -2
  104. data/app/views/layouts/decidim/decidim_awesome/admin/maintenance.html.erb +2 -11
  105. data/config/assets.rb +1 -0
  106. data/config/i18n-tasks.yml +1 -0
  107. data/config/locales/ca.yml +69 -30
  108. data/config/locales/cs.yml +68 -29
  109. data/config/locales/de.yml +67 -28
  110. data/config/locales/en.yml +81 -32
  111. data/config/locales/es.yml +68 -29
  112. data/config/locales/eu.yml +31 -31
  113. data/config/locales/fr.yml +82 -31
  114. data/config/locales/ja.yml +31 -31
  115. data/lib/decidim/decidim_awesome/admin_engine.rb +8 -5
  116. data/lib/decidim/decidim_awesome/awesome.rb +29 -7
  117. data/lib/decidim/decidim_awesome/checksums.yml +15 -40
  118. data/lib/decidim/decidim_awesome/engine.rb +11 -2
  119. data/lib/decidim/decidim_awesome/menu.rb +151 -138
  120. data/lib/decidim/decidim_awesome/test/initializer.rb +4 -1
  121. data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +1 -3
  122. data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +2 -1
  123. data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +8 -1
  124. data/lib/decidim/decidim_awesome/version.rb +1 -1
  125. data/lib/tasks/decidim_awesome_upgrade_tasks.rake +4 -1
  126. data/package.json +3 -4
  127. metadata +68 -10
  128. data/config/rubocop/disabled.yml +0 -11
  129. data/config/rubocop/faker.yml +0 -480
  130. data/config/rubocop/rails.yml +0 -88
  131. data/config/rubocop/rspec.yml +0 -65
  132. data/config/rubocop/ruby.yml +0 -1210
@@ -4,162 +4,166 @@ module Decidim
4
4
  module DecidimAwesome
5
5
  class Menu
6
6
  class << self
7
- def register_awesome_admin_menu!
8
- Decidim.menu :awesome_admin_menu do |menu|
9
- menu.add_item :editors,
10
- I18n.t("menu.editors", scope: "decidim.decidim_awesome.admin"),
11
- decidim_admin_decidim_awesome.config_path(:editors),
12
- position: 1,
13
- icon_name: "editors-text",
14
- if: menus[:editors]
15
-
16
- menu.add_item :proposals,
17
- I18n.t("menu.proposals", scope: "decidim.decidim_awesome.admin"),
18
- decidim_admin_decidim_awesome.config_path(:proposals),
19
- position: 2,
20
- icon_name: "documents",
21
- if: menus[:proposals]
22
-
23
- menu.add_item :surveys,
24
- I18n.t("menu.surveys", scope: "decidim.decidim_awesome.admin"),
25
- decidim_admin_decidim_awesome.config_path(:surveys),
26
- position: 3,
27
- icon_name: "surveys",
28
- if: menus[:surveys]
29
-
30
- menu.add_item :styles,
31
- I18n.t("menu.styles", scope: "decidim.decidim_awesome.admin"),
32
- decidim_admin_decidim_awesome.config_path(:scoped_styles),
33
- position: 4,
34
- icon_name: "brush",
35
- if: menus[:styles],
36
- submenu: { target_menu: :custom_styles_submenu }
37
-
38
- menu.add_item :custom_fields,
39
- I18n.t("menu.proposal_custom_fields", scope: "decidim.decidim_awesome.admin"),
40
- decidim_admin_decidim_awesome.config_path(menus[:proposal_custom_fields] ? :proposal_custom_fields : :proposal_private_custom_fields),
41
- position: 5,
42
- icon_name: "layers",
43
- active: is_active_link?(decidim_admin_decidim_awesome.config_path(:proposal_custom_fields)) ||
44
- is_active_link?(decidim_admin_decidim_awesome.config_path(:proposal_private_custom_fields)),
45
- if: menus[:custom_fields],
46
- submenu: { target_menu: :custom_fields_submenu }
47
-
48
- menu.add_item :admins,
49
- I18n.t("menu.admins", scope: "decidim.decidim_awesome.admin"),
50
- decidim_admin_decidim_awesome.config_path(:admins),
51
- position: 6,
52
- icon_name: "group-line",
53
- if: menus[:admins]
54
-
55
- menu.add_item :menu_hacks,
56
- I18n.t("menu.menu_hacks", scope: "decidim.decidim_awesome.admin"),
57
- decidim_admin_decidim_awesome.menu_hacks_path(menus[:menu_hacks_menu] ? :menu : :home_content_block_menu),
58
- position: 7,
59
- icon_name: "menu-line",
60
- if: menus[:menu_hacks],
61
- active: is_active_link?(decidim_admin_decidim_awesome.menu_hacks_path(:menu)) ||
62
- is_active_link?(decidim_admin_decidim_awesome.menu_hacks_path(:home_content_block_menu)),
63
- submenu: { target_menu: :menu_hacks_submenu }
64
-
65
- menu.add_item :custom_redirects,
66
- I18n.t("menu.custom_redirects", scope: "decidim.decidim_awesome.admin"),
67
- decidim_admin_decidim_awesome.custom_redirects_path,
68
- position: 8,
69
- icon_name: "external-link-line",
70
- if: menus[:custom_redirects]
71
-
72
- menu.add_item :livechat,
73
- I18n.t("menu.livechat", scope: "decidim.decidim_awesome.admin"),
74
- decidim_admin_decidim_awesome.config_path(:livechat),
75
- position: 9,
76
- icon_name: "chat-1-line",
77
- if: menus[:livechat]
78
-
79
- menu.add_item :verifications,
80
- I18n.t("menu.verifications", scope: "decidim.decidim_awesome.admin"),
81
- decidim_admin_decidim_awesome.config_path(:verifications),
82
- position: 10,
83
- icon_name: "fingerprint-line",
84
- if: menus[:verifications]
85
-
86
- menu.add_item :maintenance,
87
- I18n.t("maintenance", scope: "decidim.decidim_awesome.admin.menu.maintenance"),
88
- decidim_admin_decidim_awesome.maintenance_path(:private_data),
89
- position: 11,
90
- icon_name: "tools-line",
91
- active: is_active_link?(decidim_admin_decidim_awesome.maintenance_path(:private_data)) ||
92
- is_active_link?(decidim_admin_decidim_awesome.checks_maintenance_index_path),
93
- submenu: { target_menu: :maintenance_submenu }
7
+ def register_simple_entry(menu_registry, name, position, icon, options = {})
8
+ return if menus[name].blank?
9
+
10
+ Decidim.menu menu_registry do |menu|
11
+ i18n_key = options[:i18n_key].presence || "menu.#{name}"
12
+ extra = {}.tap do |hash|
13
+ hash[:submenu] = options[:submenu] if options[:submenu].present?
14
+ if options[:active].present?
15
+ hash[:active] = false
16
+ options[:active].each do |active_path|
17
+ hash[:active] ||= is_active_link?(decidim_admin_decidim_awesome.send(active_path[0], *active_path[1..]))
18
+ end
19
+ end
20
+ end
21
+ path = main_path_for(name)
22
+ menu.add_item name,
23
+ I18n.t(i18n_key, scope: "decidim.decidim_awesome.admin"),
24
+ decidim_admin_decidim_awesome.send(path[0], path[1]),
25
+ position:,
26
+ icon_name: icon,
27
+ **extra
94
28
  end
95
29
  end
96
30
 
31
+ def main_path_for(config_var)
32
+ case config_var.to_sym
33
+ when :styles
34
+ [:config_path, [menus[:styles]]]
35
+ when :custom_fields
36
+ [:config_path, [menus[:custom_fields]]]
37
+ when :menu_hacks
38
+ [:menu_hacks_path, [menus[:menu_hacks]]]
39
+ when :custom_redirects
40
+ [:custom_redirects_path, []]
41
+ when :maintenance
42
+ [:checks_path, []]
43
+ else
44
+ [:config_path, [config_var]]
45
+ end
46
+ end
47
+
48
+ def register_awesome_admin_menu!
49
+ register_simple_entry(:awesome_admin_menu, :editors, 1, "editors-text")
50
+ register_simple_entry(:awesome_admin_menu, :proposals, 2, "documents")
51
+ register_simple_entry(:awesome_admin_menu, :surveys, 3, "surveys")
52
+ register_simple_entry(:awesome_admin_menu, :styles, 4, "brush",
53
+ submenu: { target_menu: :custom_styles_submenu },
54
+ active: [[:config_path, :scoped_styles], [:config_path, :scoped_admin_styles]])
55
+
56
+ register_simple_entry(:awesome_admin_menu, :custom_fields, 5, "layers",
57
+ i18n_key: "menu.proposal_custom_fields",
58
+ submenu: { target_menu: :custom_fields_submenu },
59
+ active: [[:config_path, :proposal_custom_fields], [:config_path, :proposal_private_custom_fields]])
60
+
61
+ register_simple_entry(:awesome_admin_menu, :admins, 6, "group-line")
62
+
63
+ register_simple_entry(:awesome_admin_menu, :menu_hacks, 7, "menu-line",
64
+ submenu: { target_menu: :menu_hacks_submenu },
65
+ active: [[:menu_hacks_path, :menu], [:menu_hacks_path, :mobile_menu], [:menu_hacks_path, :home_content_block_menu]])
66
+
67
+ register_simple_entry(:awesome_admin_menu, :custom_redirects, 8, "external-link-line")
68
+ register_simple_entry(:awesome_admin_menu, :livechat, 9, "chat-1-line")
69
+ register_simple_entry(:awesome_admin_menu, :verifications, 10, "fingerprint-line")
70
+
71
+ register_simple_entry(:awesome_admin_menu, :maintenance, 11, "tools-line",
72
+ i18n_key: "menu.maintenance.maintenance",
73
+ submenu: { target_menu: :maintenance_submenu },
74
+ active: [[:private_data_path], [:hashcashes_path], [:checks_path]])
75
+ end
76
+
97
77
  def register_custom_fields_submenu!
98
78
  Decidim.menu :custom_fields_submenu do |menu|
99
- menu.add_item :proposal_custom_fields,
100
- I18n.t("menu.title", scope: "decidim.decidim_awesome.admin.proposal_custom_fields"),
101
- decidim_admin_decidim_awesome.config_path(:proposal_custom_fields),
102
- position: 5.1,
103
- icon_name: "draft-line",
104
- if: menus[:proposal_custom_fields]
105
-
106
- menu.add_item :proposal_private_custom_fields,
107
- I18n.t("proposal_private_custom_fields", scope: "decidim.decidim_awesome.admin.proposal_custom_fields"),
108
- decidim_admin_decidim_awesome.config_path(:proposal_private_custom_fields),
109
- position: 5.2,
110
- icon_name: "spy",
111
- if: menus[:proposal_private_custom_fields]
79
+ if menus[:proposal_custom_fields].present?
80
+ menu.add_item :proposal_custom_fields,
81
+ I18n.t("menu.title", scope: "decidim.decidim_awesome.admin.proposal_custom_fields"),
82
+ decidim_admin_decidim_awesome.config_path(:proposal_custom_fields),
83
+ position: 5.1,
84
+ icon_name: "draft-line"
85
+ end
86
+
87
+ if menus[:proposal_private_custom_fields].present?
88
+ menu.add_item :proposal_private_custom_fields,
89
+ I18n.t("proposal_private_custom_fields", scope: "decidim.decidim_awesome.admin.proposal_custom_fields"),
90
+ decidim_admin_decidim_awesome.config_path(:proposal_private_custom_fields),
91
+ position: 5.2,
92
+ icon_name: "spy"
93
+ end
112
94
  end
113
95
  end
114
96
 
115
97
  def register_custom_styles_submenu!
116
98
  Decidim.menu :custom_styles_submenu do |menu|
117
- menu.add_item :scoped_styles,
118
- I18n.t("menu.title", scope: "decidim.decidim_awesome.admin.scoped_styles"),
119
- decidim_admin_decidim_awesome.config_path(:scoped_styles),
120
- position: 4.1,
121
- icon_name: "computer-line",
122
- if: config_enabled?(:scoped_styles)
123
-
124
- menu.add_item :scoped_admin_styles,
125
- I18n.t("menu.title", scope: "decidim.decidim_awesome.admin.scoped_admin_styles"),
126
- decidim_admin_decidim_awesome.config_path(:scoped_admin_styles),
127
- position: 4.2,
128
- icon_name: "file-settings-line",
129
- if: config_enabled?(:scoped_admin_styles)
99
+ if menus[:scoped_styles].present?
100
+ menu.add_item :scoped_styles,
101
+ I18n.t("menu.title", scope: "decidim.decidim_awesome.admin.scoped_styles"),
102
+ decidim_admin_decidim_awesome.config_path(:scoped_styles),
103
+ position: 4.1,
104
+ icon_name: "computer-line"
105
+ end
106
+
107
+ if menus[:scoped_admin_styles].present?
108
+ menu.add_item :scoped_admin_styles,
109
+ I18n.t("menu.title", scope: "decidim.decidim_awesome.admin.scoped_admin_styles"),
110
+ decidim_admin_decidim_awesome.config_path(:scoped_admin_styles),
111
+ position: 4.2,
112
+ icon_name: "file-settings-line"
113
+ end
130
114
  end
131
115
  end
132
116
 
133
117
  def register_menu_hacks_submenu!
134
118
  Decidim.menu :menu_hacks_submenu do |menu|
135
- menu.add_item :main_menu,
136
- I18n.t("menu.title", scope: "decidim.decidim_awesome.admin.menu_hacks.index"),
137
- decidim_admin_decidim_awesome.menu_hacks_path(:menu),
138
- position: 7.1,
139
- icon_name: "global-line",
140
- if: menus[:menu_hacks_menu]
141
-
142
- menu.add_item :content_block_main_menu,
143
- I18n.t("home_content_block_menu.title", scope: "decidim.decidim_awesome.admin.menu_hacks.index"),
144
- decidim_admin_decidim_awesome.menu_hacks_path(:home_content_block_menu),
145
- position: 7.2,
146
- icon_name: "layout-masonry-line",
147
- if: menus[:menu_hacks_home_content_block_menu]
119
+ if menus[:menu_hacks_menu].present?
120
+ menu.add_item :main_menu,
121
+ I18n.t("menu.title", scope: "decidim.decidim_awesome.admin.menu_hacks.index"),
122
+ decidim_admin_decidim_awesome.menu_hacks_path(:menu),
123
+ position: 7.1,
124
+ icon_name: "global-line"
125
+ end
126
+
127
+ if menus[:menu_hacks_mobile_menu].present?
128
+ menu.add_item :mobile_menu,
129
+ I18n.t("mobile_menu.title", scope: "decidim.decidim_awesome.admin.menu_hacks.index"),
130
+ decidim_admin_decidim_awesome.menu_hacks_path(:mobile_menu),
131
+ position: 7.2,
132
+ icon_name: "smartphone"
133
+ end
134
+
135
+ if menus[:menu_hacks_home_content_block_menu].present?
136
+ menu.add_item :content_block_main_menu,
137
+ I18n.t("home_content_block_menu.title", scope: "decidim.decidim_awesome.admin.menu_hacks.index"),
138
+ decidim_admin_decidim_awesome.menu_hacks_path(:home_content_block_menu),
139
+ position: 7.3,
140
+ icon_name: "layout-masonry-line"
141
+ end
148
142
  end
149
143
  end
150
144
 
151
145
  def register_maintenance_admin_menu!
152
146
  Decidim.menu :maintenance_submenu do |menu|
153
- menu.add_item :private_data,
154
- I18n.t("private_data", scope: "decidim.decidim_awesome.admin.menu.maintenance"),
155
- decidim_admin_decidim_awesome.maintenance_path(:private_data),
156
- position: 10,
157
- icon_name: "spy-line"
147
+ if config_enabled?(:proposal_private_custom_fields)
148
+ menu.add_item :private_data,
149
+ I18n.t("private_data", scope: "decidim.decidim_awesome.admin.menu.maintenance"),
150
+ decidim_admin_decidim_awesome.private_data_path,
151
+ position: 10.1,
152
+ icon_name: "spy-line"
153
+ end
154
+
155
+ if config_enabled?(:hashcash_signup, :hashcash_login)
156
+ menu.add_item :hashcash,
157
+ I18n.t("hashcash", scope: "decidim.decidim_awesome.admin.menu.maintenance"),
158
+ decidim_admin_decidim_awesome.hashcashes_path,
159
+ position: 10.2,
160
+ icon_name: "hashtag"
161
+ end
158
162
 
159
163
  menu.add_item :checks,
160
164
  I18n.t("checks", scope: "decidim.decidim_awesome.admin.menu.maintenance"),
161
- decidim_admin_decidim_awesome.checks_maintenance_index_path,
162
- position: 10,
165
+ decidim_admin_decidim_awesome.checks_path,
166
+ position: 10.3,
163
167
  icon_name: "pulse"
164
168
  end
165
169
  end
@@ -174,23 +178,32 @@ module Decidim
174
178
  :validate_body_min_length, :validate_body_max_caps_percent,
175
179
  :validate_body_max_marks_together, :validate_body_start_with_caps
176
180
  ),
177
- surveys: config_enabled?(:auto_save_forms, :user_timezone),
178
- styles: config_enabled?(:scoped_styles, :scoped_admin_styles),
181
+ surveys: config_enabled?(:auto_save_forms, :user_timezone, :hashcash_signup, :hashcash_login),
182
+ styles: first_enabled(:scoped_styles, :scoped_admin_styles),
179
183
  scoped_styles: config_enabled?(:scoped_styles),
180
184
  scoped_admin_styles: config_enabled?(:scoped_admin_styles),
181
- custom_fields: config_enabled?(:proposal_custom_fields, :proposal_private_custom_fields),
185
+ custom_fields: first_enabled(:proposal_custom_fields, :proposal_private_custom_fields),
182
186
  proposal_custom_fields: config_enabled?(:proposal_custom_fields),
183
187
  proposal_private_custom_fields: config_enabled?(:proposal_private_custom_fields),
184
188
  admins: config_enabled?(:scoped_admins),
185
- menu_hacks: config_enabled?(:menu, :home_content_block_menu),
189
+ menu_hacks: first_enabled(:menu, :mobile_menu, :home_content_block_menu),
186
190
  menu_hacks_menu: config_enabled?(:menu),
191
+ menu_hacks_mobile_menu: config_enabled?(:mobile_menu),
187
192
  menu_hacks_home_content_block_menu: config_enabled?(:home_content_block_menu),
188
193
  custom_redirects: config_enabled?(:custom_redirects),
189
194
  livechat: config_enabled?(:intergram_for_admins, :intergram_for_public),
190
- verifications: config_enabled?(:force_authorization_after_login)
195
+ verifications: config_enabled?(:force_authorization_after_login),
196
+ maintenance: true
191
197
  }
192
198
  end
193
199
 
200
+ def first_enabled(*vars)
201
+ vars.each do |var|
202
+ return var if config_enabled?(var)
203
+ end
204
+ nil
205
+ end
206
+
194
207
  # ensure boolean value
195
208
  def config_enabled?(*vars)
196
209
  DecidimAwesome.enabled?(*vars)
@@ -17,6 +17,7 @@ Decidim::DecidimAwesome.configure do |config|
17
17
  :proposal_custom_fields,
18
18
  :proposal_private_custom_fields,
19
19
  :menu,
20
+ :mobile_menu,
20
21
  :home_content_block_menu,
21
22
  :scoped_admins,
22
23
  :custom_redirects,
@@ -31,7 +32,9 @@ Decidim::DecidimAwesome.configure do |config|
31
32
  :weighted_proposal_voting,
32
33
  :additional_proposal_sortings,
33
34
  :allow_limiting_amendments,
34
- :proposal_private_custom_fields
35
+ :proposal_private_custom_fields,
36
+ :hashcash_signup,
37
+ :hashcash_login
35
38
  ].each do |conf|
36
39
  config.send("#{conf}=", :disabled)
37
40
  end
@@ -5,7 +5,7 @@ shared_examples "javascript config vars" do
5
5
  expect(page.body).to have_content("window.DecidimAwesome")
6
6
  expect(page.body).to have_content("window.DecidimAwesome.version")
7
7
  expect(page.body).to have_content("window.DecidimAwesome.editorUploaderPath")
8
- expect(page.body).to have_content("window.DecidimAwesome.texts")
8
+ expect(page.body).to have_content("window.DecidimAwesome.i18n")
9
9
  end
10
10
  end
11
11
 
@@ -29,7 +29,6 @@ end
29
29
 
30
30
  shared_examples "forbids disabled feature without redirect" do
31
31
  render_views
32
- let(:feature) { :menu }
33
32
  let(:features) { [feature] }
34
33
  before do
35
34
  features.each do |feat|
@@ -46,7 +45,6 @@ end
46
45
 
47
46
  shared_examples "forbids disabled feature with redirect" do
48
47
  render_views
49
- let(:feature) { :menu }
50
48
  let(:features) { [feature] }
51
49
  before do
52
50
  features.each do |feat|
@@ -46,6 +46,7 @@ shared_examples "has drag and drop" do
46
46
  sleep 1
47
47
  last_image = Decidim::DecidimAwesome::EditorImage.last
48
48
  expect(last_image).to be_present
49
+ sleep 1 # some time to transform the image objectid to the signed id
49
50
  content = page.execute_script("return document.querySelector('#{editor_selector}').value")
50
51
  expect(content).to include(last_image.attached_uploader(:file).path)
51
52
  within "form.edit_proposal" do
@@ -54,6 +55,6 @@ shared_examples "has drag and drop" do
54
55
  fill_in :proposal_title, with: "This is a test proposal"
55
56
  click_on "Send"
56
57
  end
57
- expect(proposal.reload.body["en"]).to include(last_image.attached_uploader(:file).path)
58
+ expect(proposal.reload.body["en"]).to include(last_image.file.blob.to_gid.to_s)
58
59
  end
59
60
  end
@@ -65,6 +65,8 @@ shared_examples "activated concerns" do |enabled|
65
65
  expect(Decidim::System::UpdateOrganization.included_modules).to include(Decidim::DecidimAwesome::System::UpdateOrganizationOverride)
66
66
  expect(Decidim::System::CreateOrganization.included_modules).to include(Decidim::DecidimAwesome::System::CreateOrganizationOverride)
67
67
  expect(Decidim::AdminLog::UserPresenter.included_modules).to include(Decidim::DecidimAwesome::AdminLog::UserPresenterOverride)
68
+ expect(Decidim::Devise::SessionsController.included_modules).to include(Decidim::DecidimAwesome::NeedsHashcash)
69
+ expect(Decidim::Devise::RegistrationsController.included_modules).to include(Decidim::DecidimAwesome::NeedsHashcash)
68
70
  end
69
71
 
70
72
  else
@@ -103,6 +105,9 @@ shared_examples "activated concerns" do |enabled|
103
105
  expect(Decidim::DecidimAwesome::AwesomeHelpers.included_modules).not_to include(Decidim::DecidimAwesome::AwesomeHelpers)
104
106
  expect(Decidim::DecidimAwesome::ContentSecurityPolicy.included_modules).not_to include(Decidim::DecidimAwesome::ContentSecurityPolicy)
105
107
  expect(Decidim::DecidimAwesome::UserOverride.included_modules).not_to include(Decidim::DecidimAwesome::UserOverride)
108
+ expect(Decidim::AdminLog::UserPresenter.included_modules).not_to include(Decidim::DecidimAwesome::AdminLog::UserPresenterOverride)
109
+ expect(Decidim::Devise::SessionsController.included_modules).not_to include(Decidim::DecidimAwesome::NeedsHashcash)
110
+ expect(Decidim::Devise::RegistrationsController.included_modules).not_to include(Decidim::DecidimAwesome::NeedsHashcash)
106
111
  end
107
112
  end
108
113
  end
@@ -242,9 +247,11 @@ shared_examples "basic rendering" do |enabled|
242
247
  "config/proposal_custom_fields",
243
248
  "config/admins",
244
249
  "menus/menu/hacks",
250
+ "menus/mobile_menu/hacks",
245
251
  "menus/home_content_block_menu/hacks",
246
252
  "custom_redirects",
247
- "config/livechat"
253
+ "config/livechat",
254
+ "maintenance/hashcash"
248
255
  ]
249
256
  end
250
257
 
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  # This holds the decidim-decidim_awesome version.
5
5
  module DecidimAwesome
6
- VERSION = "0.12.0"
6
+ VERSION = "0.12.3"
7
7
  COMPAT_DECIDIM_VERSION = [">= 0.29.1", "< 0.30"].freeze
8
8
  end
9
9
  end
@@ -5,5 +5,8 @@ Rake::Task["decidim:webpacker:install"].enhance do
5
5
  end
6
6
 
7
7
  Rake::Task["decidim:choose_target_plugins"].enhance do
8
- ENV["FROM"] = "#{ENV.fetch("FROM", nil)},decidim_decidim_awesome"
8
+ unless ENV["FROM"].to_s.include?("decidim_decidim_awesome")
9
+ ENV["FROM"] = "#{ENV.fetch("FROM", nil)},decidim_decidim_awesome"
10
+ ENV["FROM"] = "#{ENV.fetch("FROM", nil)},active_hashcash" if Decidim::DecidimAwesome.enabled?(:hashcash_signup, :hashcash_login)
11
+ end
9
12
  end
data/package.json CHANGED
@@ -38,14 +38,13 @@
38
38
  "@decidim/eslint-config": "0.29.1",
39
39
  "@decidim/prettier-config": "0.29.1",
40
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"
41
+ "postcss-scss": "^4.0.9"
44
42
  },
45
43
  "dependencies": {
46
44
  "codemirror": "^5.65.16",
47
45
  "form-storage": "^1.3.5",
48
- "formBuilder": "^3.19.12",
46
+ "formBuilder": "^3.20.0",
47
+ "formbuilder-languages": "^1.2.0",
49
48
  "inline-attacher": "^0.0.7",
50
49
  "jsrender": "^1.0.9",
51
50
  "leaflet.featuregroup.subgroup": "^1.0.2",
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-decidim_awesome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.12.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Vergés
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-11 00:00:00.000000000 Z
11
+ date: 2025-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: active_hashcash
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.4.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.4.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: decidim-admin
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -137,6 +151,7 @@ files:
137
151
  - app/controllers/concerns/decidim/decidim_awesome/content_security_policy.rb
138
152
  - app/controllers/concerns/decidim/decidim_awesome/limit_pending_amendments.rb
139
153
  - app/controllers/concerns/decidim/decidim_awesome/needs_awesome_config.rb
154
+ - app/controllers/concerns/decidim/decidim_awesome/needs_hashcash.rb
140
155
  - app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb
141
156
  - app/controllers/concerns/decidim/decidim_awesome/proposals/memoize_extra_fields.rb
142
157
  - app/controllers/concerns/decidim/decidim_awesome/proposals/orderable_override.rb
@@ -149,8 +164,9 @@ files:
149
164
  - app/controllers/decidim/decidim_awesome/admin/config_controller.rb
150
165
  - app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb
151
166
  - app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb
152
- - app/controllers/decidim/decidim_awesome/admin/maintenance_controller.rb
167
+ - app/controllers/decidim/decidim_awesome/admin/hashcash_controller.rb
153
168
  - app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb
169
+ - app/controllers/decidim/decidim_awesome/admin/private_data_controller.rb
154
170
  - app/controllers/decidim/decidim_awesome/admin/proposal_custom_fields_controller.rb
155
171
  - app/controllers/decidim/decidim_awesome/admin/scoped_admins_controller.rb
156
172
  - app/controllers/decidim/decidim_awesome/admin/scoped_styles_controller.rb
@@ -160,6 +176,7 @@ files:
160
176
  - app/controllers/decidim/decidim_awesome/iframe_component/iframe_controller.rb
161
177
  - app/controllers/decidim/decidim_awesome/map_component/map_controller.rb
162
178
  - app/controllers/decidim/decidim_awesome/required_authorizations_controller.rb
179
+ - app/controllers/decidim/decidim_awesome/utils_controller.rb
163
180
  - app/forms/concerns/decidim/decidim_awesome/account_form_override.rb
164
181
  - app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_customizations.rb
165
182
  - app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb
@@ -192,6 +209,8 @@ files:
192
209
  - app/overrides/decidim/admin/officializations/index/add_modal.html.erb.deface
193
210
  - app/overrides/decidim/admin/officializations/index/add_td.html.erb.deface
194
211
  - app/overrides/decidim/admin/officializations/index/add_th.html.erb.deface
212
+ - app/overrides/decidim/devise/registrations/new/add_hashcash.html.erb.deface
213
+ - app/overrides/decidim/devise/sessions/new/add_hashcash.html.erb.deface
195
214
  - app/overrides/decidim/proposals/admin/proposals/_form/replace_editor.html.erb.deface
196
215
  - app/overrides/decidim/proposals/admin/proposals/show/add_private_body.html.erb.deface
197
216
  - app/overrides/decidim/proposals/admin/proposals/show/replace_body.html.erb.deface
@@ -200,6 +219,7 @@ files:
200
219
  - app/overrides/decidim/proposals/proposals/_votes_count/replace_counter.html.erb.deface
201
220
  - app/overrides/decidim/system/organizations/_advanced_settings/add_awesome_config.html.erb.deface
202
221
  - app/overrides/layouts/decidim/_decidim_javascript/add_awesome_tags.html.erb.deface
222
+ - app/overrides/layouts/decidim/_head/add_awesome_custom_styles.html.erb.deface
203
223
  - app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface
204
224
  - app/overrides/layouts/decidim/admin/_header/add_awesome_custom_styles.html.erb.deface
205
225
  - app/overrides/layouts/decidim/admin/_header/add_awesome_tags.html.erb.deface
@@ -211,6 +231,7 @@ files:
211
231
  - app/packs/entrypoints/decidim_decidim_awesome.js
212
232
  - app/packs/entrypoints/decidim_decidim_awesome.scss
213
233
  - app/packs/entrypoints/decidim_decidim_awesome_custom_fields.js
234
+ - app/packs/entrypoints/decidim_decidim_awesome_hashcash.js
214
235
  - app/packs/entrypoints/decidim_decidim_awesome_iframe.scss
215
236
  - app/packs/entrypoints/decidim_decidim_awesome_map.js
216
237
  - app/packs/entrypoints/decidim_decidim_awesome_map.scss
@@ -250,7 +271,44 @@ files:
250
271
  - app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js
251
272
  - app/packs/src/decidim/decidim_awesome/proposals/images.js
252
273
  - app/packs/src/decidim/decidim_awesome/voting/voting_cards.js
274
+ - app/packs/src/vendor/form_builder_langs/ar-SA.lang
275
+ - app/packs/src/vendor/form_builder_langs/ar-TN.lang
276
+ - app/packs/src/vendor/form_builder_langs/ca-ES.lang
277
+ - app/packs/src/vendor/form_builder_langs/cs-CZ.lang
278
+ - app/packs/src/vendor/form_builder_langs/da-DK.lang
279
+ - app/packs/src/vendor/form_builder_langs/de-DE.lang
280
+ - app/packs/src/vendor/form_builder_langs/el-GR.lang
281
+ - app/packs/src/vendor/form_builder_langs/en-US.lang
282
+ - app/packs/src/vendor/form_builder_langs/es-ES.lang
283
+ - app/packs/src/vendor/form_builder_langs/fa-IR.lang
284
+ - app/packs/src/vendor/form_builder_langs/fi-FI.lang
285
+ - app/packs/src/vendor/form_builder_langs/fr-FR.lang
286
+ - app/packs/src/vendor/form_builder_langs/he-IL.lang
287
+ - app/packs/src/vendor/form_builder_langs/hi-IN.lang
288
+ - app/packs/src/vendor/form_builder_langs/hu-HU.lang
289
+ - app/packs/src/vendor/form_builder_langs/id-ID.lang
290
+ - app/packs/src/vendor/form_builder_langs/it-IT.lang
291
+ - app/packs/src/vendor/form_builder_langs/ja-JP.lang
292
+ - app/packs/src/vendor/form_builder_langs/my-MM.lang
293
+ - app/packs/src/vendor/form_builder_langs/nb-NO.lang
294
+ - app/packs/src/vendor/form_builder_langs/nl-NL.lang
295
+ - app/packs/src/vendor/form_builder_langs/pl-PL.lang
296
+ - app/packs/src/vendor/form_builder_langs/pt-BR.lang
297
+ - app/packs/src/vendor/form_builder_langs/pu-IN.lang
298
+ - app/packs/src/vendor/form_builder_langs/qz-MM.lang
299
+ - app/packs/src/vendor/form_builder_langs/ro-RO.lang
300
+ - app/packs/src/vendor/form_builder_langs/ru-RU.lang
301
+ - app/packs/src/vendor/form_builder_langs/sl-SI.lang
302
+ - app/packs/src/vendor/form_builder_langs/th-TH.lang
303
+ - app/packs/src/vendor/form_builder_langs/tr-TR.lang
304
+ - app/packs/src/vendor/form_builder_langs/uk-UA.lang
305
+ - app/packs/src/vendor/form_builder_langs/vi-VN.lang
306
+ - app/packs/src/vendor/form_builder_langs/zh-CN.lang
307
+ - app/packs/src/vendor/form_builder_langs/zh-TW.lang
308
+ - app/packs/src/vendor/hashcash.js
253
309
  - app/packs/src/vendor/jquery.truncate.js
310
+ - app/packs/src/vendor/sha1.js
311
+ - app/packs/src/vendor/stamp.js
254
312
  - app/packs/stylesheets/decidim/decidim_awesome/admin/admin_accountability.scss
255
313
  - app/packs/stylesheets/decidim/decidim_awesome/admin/auto_edits.scss
256
314
  - app/packs/stylesheets/decidim/decidim_awesome/admin/check_redirections.scss
@@ -322,8 +380,10 @@ files:
322
380
  - app/views/decidim/decidim_awesome/admin/custom_redirects/edit.html.erb
323
381
  - app/views/decidim/decidim_awesome/admin/custom_redirects/index.html.erb
324
382
  - app/views/decidim/decidim_awesome/admin/custom_redirects/new.html.erb
325
- - app/views/decidim/decidim_awesome/admin/maintenance/_private_data.html.erb
326
- - app/views/decidim/decidim_awesome/admin/maintenance/show.html.erb
383
+ - app/views/decidim/decidim_awesome/admin/hashcash/_filters.html.erb
384
+ - app/views/decidim/decidim_awesome/admin/hashcash/index.html.erb
385
+ - app/views/decidim/decidim_awesome/admin/hashcash/ip_addresses.html.erb
386
+ - app/views/decidim/decidim_awesome/admin/hashcash/show.html.erb
327
387
  - app/views/decidim/decidim_awesome/admin/menu_hacks/_form.html.erb
328
388
  - app/views/decidim/decidim_awesome/admin/menu_hacks/edit.html.erb
329
389
  - app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb
@@ -331,11 +391,14 @@ files:
331
391
  - app/views/decidim/decidim_awesome/admin/officializations/_participants_td.html.erb
332
392
  - app/views/decidim/decidim_awesome/admin/officializations/_participants_th.html.erb
333
393
  - app/views/decidim/decidim_awesome/admin/officializations/_verification_modal.html.erb
394
+ - app/views/decidim/decidim_awesome/admin/private_data/_private_data.html.erb
395
+ - app/views/decidim/decidim_awesome/admin/private_data/index.html.erb
334
396
  - app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb
335
397
  - app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb
336
398
  - app/views/decidim/decidim_awesome/admin/shared/_filters_with_date.html.erb
337
399
  - app/views/decidim/decidim_awesome/amendments/_modal.html.erb
338
400
  - app/views/decidim/decidim_awesome/custom_fields/_form_render.html.erb
401
+ - app/views/decidim/decidim_awesome/hashcash/_hidden_field.html.erb
339
402
  - app/views/decidim/decidim_awesome/iframe_component/iframe/show.html.erb
340
403
  - app/views/decidim/decidim_awesome/map_component/map/_api_ready.html.erb
341
404
  - app/views/decidim/decidim_awesome/map_component/map/_map_template.html.erb
@@ -372,11 +435,6 @@ files:
372
435
  - config/locales/pt.yml
373
436
  - config/locales/ro-RO.yml
374
437
  - config/locales/sv.yml
375
- - config/rubocop/disabled.yml
376
- - config/rubocop/faker.yml
377
- - config/rubocop/rails.yml
378
- - config/rubocop/rspec.yml
379
- - config/rubocop/ruby.yml
380
438
  - db/migrate/20200324170000_create_decidim_awesome_config.rb
381
439
  - db/migrate/20200324230936_create_awesome_editor_images.rb
382
440
  - db/migrate/20200403142257_create_decidim_awesome_config_constraints.rb