decidim-decidim_awesome 0.11.4 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +47 -6
- data/README.md +33 -39
- data/Rakefile +12 -0
- data/app/cells/concerns/decidim/decidim_awesome/global_menu_cell_override.rb +14 -2
- data/app/cells/concerns/decidim/decidim_awesome/proposal_l_cell_override.rb +5 -4
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/show.erb +4 -4
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/vote_block_for.erb +1 -1
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal_cell.rb +3 -5
- data/app/commands/concerns/decidim/decidim_awesome/system/{register_organization_override.rb → create_organization_override.rb} +1 -1
- data/app/commands/concerns/decidim/decidim_awesome/update_account_override.rb +4 -4
- data/app/commands/decidim/decidim_awesome/admin/create_constraint.rb +1 -1
- data/app/commands/decidim/decidim_awesome/create_editor_image.rb +2 -2
- data/app/controllers/concerns/decidim/decidim_awesome/admin/maintenance_context.rb +0 -28
- data/app/controllers/concerns/decidim/decidim_awesome/needs_hashcash.rb +41 -0
- data/app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb +2 -2
- data/app/controllers/decidim/decidim_awesome/admin/admin_authorizations_controller.rb +2 -2
- data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +0 -10
- data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +2 -1
- data/app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb +1 -2
- data/app/controllers/decidim/decidim_awesome/admin/hashcash_controller.rb +39 -0
- data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +1 -1
- data/app/controllers/decidim/decidim_awesome/admin/{maintenance_controller.rb → private_data_controller.rb} +9 -9
- data/app/controllers/decidim/decidim_awesome/utils_controller.rb +17 -0
- data/app/forms/concerns/decidim/decidim_awesome/proposals/{proposal_wizard_create_step_form_override.rb → proposal_form_customizations.rb} +1 -1
- data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb +7 -1
- data/app/forms/concerns/decidim/decidim_awesome/system/organization_form_override.rb +2 -2
- data/app/forms/decidim/decidim_awesome/admin/config_form.rb +13 -0
- data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +1 -1
- data/app/helpers/decidim/decidim_awesome/map_helper.rb +4 -2
- data/app/models/decidim/decidim_awesome/paper_trail_version.rb +1 -1
- data/app/overrides/decidim/devise/registrations/new/add_hashcash.html.erb.deface +3 -0
- data/app/overrides/decidim/devise/sessions/new/add_hashcash.html.erb.deface +3 -0
- data/app/overrides/layouts/decidim/_head/add_awesome_custom_styles.html.erb.deface +3 -0
- data/app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface +0 -2
- data/app/packs/entrypoints/decidim_admin_decidim_awesome_search_form.scss +1 -0
- data/app/packs/entrypoints/decidim_decidim_awesome_hashcash.js +4 -0
- data/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +10 -6
- data/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js +4 -2
- data/app/packs/src/decidim/decidim_awesome/admin/verifications.js +6 -3
- data/app/packs/src/decidim/decidim_awesome/awesome_map/api/proposals_fetcher.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/controller.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/proposals_controller.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controls_ui.js +6 -6
- data/app/packs/src/decidim/decidim_awesome/awesome_map/load_map.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/forms/autosave.js +3 -3
- data/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +1 -113
- data/app/packs/src/decidim/decidim_awesome/proposals/images.js +1 -1
- data/app/packs/src/vendor/form_builder_langs/ar-SA.lang +111 -0
- data/app/packs/src/vendor/form_builder_langs/ar-TN.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/ca-ES.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/cs-CZ.lang +105 -0
- data/app/packs/src/vendor/form_builder_langs/da-DK.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/de-DE.lang +109 -0
- data/app/packs/src/vendor/form_builder_langs/el-GR.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/en-US.lang +117 -0
- data/app/packs/src/vendor/form_builder_langs/es-ES.lang +103 -0
- data/app/packs/src/vendor/form_builder_langs/fa-IR.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/fi-FI.lang +107 -0
- data/app/packs/src/vendor/form_builder_langs/fr-FR.lang +117 -0
- data/app/packs/src/vendor/form_builder_langs/he-IL.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/hi-IN.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/hu-HU.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/id-ID.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/it-IT.lang +107 -0
- data/app/packs/src/vendor/form_builder_langs/ja-JP.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/my-MM.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/nb-NO.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/nl-NL.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/pl-PL.lang +122 -0
- data/app/packs/src/vendor/form_builder_langs/pt-BR.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/pu-IN.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/qz-MM.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/ro-RO.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/ru-RU.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/sl-SI.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/th-TH.lang +111 -0
- data/app/packs/src/vendor/form_builder_langs/tr-TR.lang +115 -0
- data/app/packs/src/vendor/form_builder_langs/uk-UA.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/vi-VN.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/zh-CN.lang +100 -0
- data/app/packs/src/vendor/form_builder_langs/zh-TW.lang +94 -0
- data/app/packs/src/vendor/hashcash.js +83 -0
- data/app/packs/src/vendor/sha1.js +143 -0
- data/app/packs/src/vendor/stamp.js +50 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/admin_accountability.scss +67 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/forms/autosave.scss +2 -12
- data/app/permissions/decidim/decidim_awesome/permissions.rb +3 -2
- data/app/presenters/decidim/decidim_awesome/private_data_presenter.rb +2 -2
- data/app/uploaders/decidim/decidim_awesome/image_uploader.rb +12 -0
- data/app/views/decidim/decidim_awesome/admin/admin_accountability/index.html.erb +5 -4
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/callout.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/conflict.html.erb +4 -4
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb +6 -5
- data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +6 -6
- data/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +3 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +4 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +4 -4
- data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_styles.html.erb +3 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +40 -2
- data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/hashcash/_filters.html.erb +55 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/index.html.erb +33 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/ip_addresses.html.erb +29 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/show.html.erb +42 -0
- data/app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/{maintenance → private_data}/_private_data.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/{maintenance/show.html.erb → private_data/index.html.erb} +2 -3
- data/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/shared/_filters_with_date.html.erb +41 -32
- data/app/views/decidim/decidim_awesome/amendments/_modal.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/hashcash/_hidden_field.html.erb +5 -0
- data/app/views/decidim/decidim_awesome/map_component/map/_map_template.html.erb +1 -1
- data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +2 -2
- data/app/views/layouts/decidim/decidim_awesome/admin/maintenance.html.erb +2 -11
- data/config/assets.rb +3 -1
- data/config/i18n-tasks.yml +1 -0
- data/config/locales/ca.yml +69 -30
- data/config/locales/cs.yml +68 -29
- data/config/locales/de.yml +67 -28
- data/config/locales/en.yml +81 -32
- data/config/locales/es.yml +68 -29
- data/config/locales/eu.yml +31 -31
- data/config/locales/fr.yml +82 -31
- data/config/locales/ja.yml +31 -31
- data/lib/decidim/decidim_awesome/admin_engine.rb +8 -5
- data/lib/decidim/decidim_awesome/awesome.rb +49 -27
- data/lib/decidim/decidim_awesome/checksums.yml +47 -42
- data/lib/decidim/decidim_awesome/context_analyzers/request_analyzer.rb +2 -2
- data/lib/decidim/decidim_awesome/engine.rb +16 -6
- data/lib/decidim/decidim_awesome/menu.rb +151 -138
- data/lib/decidim/decidim_awesome/test/initializer.rb +4 -1
- data/lib/decidim/decidim_awesome/test/shared_examples/box_label_editor_examples.rb +14 -14
- data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +2 -4
- data/lib/decidim/decidim_awesome/test/shared_examples/custom_fields_examples.rb +8 -8
- data/lib/decidim/decidim_awesome/test/shared_examples/custom_styles_examples.rb +6 -6
- data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +5 -4
- data/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb +5 -5
- data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +16 -9
- data/lib/decidim/decidim_awesome/version.rb +2 -2
- data/lib/decidim/decidim_awesome.rb +0 -1
- data/lib/tasks/decidim_awesome_upgrade_tasks.rake +4 -5
- data/package.json +9 -18
- metadata +82 -26
- data/app/jobs/decidim/decidim_awesome/migrate_legacy_images_job.rb +0 -107
- data/app/uploaders/decidim/cw/decidim_awesome/image_uploader.rb +0 -26
- data/config/rubocop/disabled.yml +0 -11
- data/config/rubocop/faker.yml +0 -480
- data/config/rubocop/rails.yml +0 -88
- data/config/rubocop/rspec.yml +0 -65
- data/config/rubocop/ruby.yml +0 -1210
- data/lib/decidim/decidim_awesome/content_parsers/editor_images_parser.rb +0 -39
- data/lib/tasks/decidim_awesome_active_storage_migrations_tasks.rake +0 -35
- /data/{app/middleware/decidim/decidim_awesome → lib/decidim/decidim_awesome/middleware}/current_config.rb +0 -0
@@ -5,6 +5,8 @@ require "deface"
|
|
5
5
|
require "decidim/core"
|
6
6
|
require "decidim/decidim_awesome/awesome_helpers"
|
7
7
|
require "decidim/decidim_awesome/menu"
|
8
|
+
require "decidim/decidim_awesome/middleware/current_config"
|
9
|
+
require "active_hashcash" if Decidim::DecidimAwesome.enabled?(:hashcash_signup, :hashcash_login)
|
8
10
|
|
9
11
|
module Decidim
|
10
12
|
module DecidimAwesome
|
@@ -17,12 +19,18 @@ module Decidim
|
|
17
19
|
routes do
|
18
20
|
get :required_authorizations, to: "required_authorizations#index"
|
19
21
|
post :editor_images, to: "editor_images#create"
|
22
|
+
get "form_builder_i18n(/:lang)", to: "utils#form_builder_i18n", as: :form_builder_i18n
|
20
23
|
end
|
21
24
|
|
22
25
|
# Prepare a zone to create overrides
|
23
26
|
# https://edgeguides.rubyonrails.org/engines.html#overriding-models-and-controllers
|
24
27
|
# overrides
|
25
28
|
config.to_prepare do
|
29
|
+
if DecidimAwesome.enabled?(:hashcash_signup, :hashcash_login)
|
30
|
+
# Add hashcash to signup and login
|
31
|
+
Decidim::Devise::SessionsController.include(Decidim::DecidimAwesome::NeedsHashcash)
|
32
|
+
Decidim::Devise::RegistrationsController.include(Decidim::DecidimAwesome::NeedsHashcash)
|
33
|
+
end
|
26
34
|
# Include additional helpers globally
|
27
35
|
ActiveSupport.on_load(:action_view) { include Decidim::DecidimAwesome::AwesomeHelpers }
|
28
36
|
# Also for cells
|
@@ -47,11 +55,11 @@ module Decidim
|
|
47
55
|
:validate_body_max_caps_percent,
|
48
56
|
:validate_body_max_marks_together,
|
49
57
|
:validate_body_start_with_caps)
|
50
|
-
Decidim::Proposals::
|
58
|
+
Decidim::Proposals::ProposalForm.include(Decidim::DecidimAwesome::Proposals::ProposalFormCustomizations)
|
51
59
|
end
|
52
60
|
|
53
61
|
if DecidimAwesome.enabled?(:proposal_custom_fields, :proposal_private_custom_fields)
|
54
|
-
Decidim::Proposals::
|
62
|
+
Decidim::Proposals::ProposalForm.include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride)
|
55
63
|
Decidim::Proposals::Admin::ProposalForm.include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride)
|
56
64
|
Decidim::Proposals::ProposalPresenter.include(Decidim::DecidimAwesome::Proposals::ProposalPresenterOverride)
|
57
65
|
Decidim::Proposals::CreateProposal.include(Decidim::DecidimAwesome::Proposals::CreateProposalOverride)
|
@@ -67,7 +75,7 @@ module Decidim
|
|
67
75
|
Decidim::System::RegisterOrganizationForm.include(Decidim::DecidimAwesome::System::OrganizationFormOverride)
|
68
76
|
Decidim::System::UpdateOrganizationForm.include(Decidim::DecidimAwesome::System::OrganizationFormOverride)
|
69
77
|
Decidim::System::UpdateOrganization.include(Decidim::DecidimAwesome::System::UpdateOrganizationOverride)
|
70
|
-
Decidim::System::
|
78
|
+
Decidim::System::CreateOrganization.include(Decidim::DecidimAwesome::System::CreateOrganizationOverride)
|
71
79
|
end
|
72
80
|
|
73
81
|
if DecidimAwesome.enabled?(:proposal_custom_fields, :proposal_private_custom_fields, :weighted_proposal_voting)
|
@@ -91,8 +99,8 @@ module Decidim
|
|
91
99
|
# override user's admin property
|
92
100
|
Decidim::User.include(Decidim::DecidimAwesome::UserOverride) if DecidimAwesome.enabled?(:scoped_admins)
|
93
101
|
|
94
|
-
if DecidimAwesome.enabled?(:menu, :
|
95
|
-
Decidim::ContentBlocks::GlobalMenuCell.include(Decidim::DecidimAwesome::GlobalMenuCellOverride)
|
102
|
+
if DecidimAwesome.enabled?(:menu, :mobile_menu, :home_content_block_menu)
|
103
|
+
Decidim::ContentBlocks::GlobalMenuCell.include(Decidim::DecidimAwesome::GlobalMenuCellOverride) if DecidimAwesome.enabled?(:home_content_block_menu)
|
96
104
|
Decidim::BreadcrumbHelper.include(Decidim::DecidimAwesome::BreadcrumbHelperOverride)
|
97
105
|
Decidim::MenuPresenter.include(Decidim::DecidimAwesome::MenuPresenterOverride)
|
98
106
|
Decidim::MenuItemPresenter.include(Decidim::DecidimAwesome::MenuItemPresenterOverride)
|
@@ -229,7 +237,7 @@ module Decidim
|
|
229
237
|
component.settings(:global) do |settings|
|
230
238
|
DecidimAwesome.hash_append!(
|
231
239
|
settings.attributes,
|
232
|
-
:
|
240
|
+
:can_accumulate_votes_beyond_threshold,
|
233
241
|
:awesome_voting_manifest,
|
234
242
|
Decidim::SettingsManifest::Attribute.new(
|
235
243
|
type: :select,
|
@@ -290,6 +298,8 @@ module Decidim
|
|
290
298
|
Decidim.icons.register(name: "spy", icon: "spy-fill", category: "system", description: "", engine: :decidim_awesome)
|
291
299
|
Decidim.icons.register(name: "forbid-line", icon: "forbid-line", category: "system", description: "", engine: :decidim_awesome)
|
292
300
|
Decidim.icons.register(name: "file-settings-line", icon: "file-settings-line", category: "system", description: "", engine: :decidim_awesome)
|
301
|
+
Decidim.icons.register(name: "hashtag", icon: "hashtag", category: "system", description: "", engine: :decidim_awesome)
|
302
|
+
Decidim.icons.register(name: "smartphone", icon: "smartphone-line", category: "system", description: "", engine: :decidim_awesome)
|
293
303
|
end
|
294
304
|
end
|
295
305
|
end
|
@@ -4,162 +4,166 @@ module Decidim
|
|
4
4
|
module DecidimAwesome
|
5
5
|
class Menu
|
6
6
|
class << self
|
7
|
-
def
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
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
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
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
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
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
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
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.
|
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:
|
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:
|
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:
|
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,16 +5,16 @@ shared_examples "edits box label inline" do |test_case, key|
|
|
5
5
|
|
6
6
|
it "updates the label when no changes" do
|
7
7
|
link = find("[data-key=#{key}] a.awesome-auto-edit", match: :first)
|
8
|
-
expect(page).
|
8
|
+
expect(page).to have_no_field(class: "awesome-auto-edit")
|
9
9
|
link.click
|
10
10
|
expect(page).to have_field(class: "awesome-auto-edit")
|
11
11
|
find("body").click
|
12
|
-
expect(page).
|
12
|
+
expect(page).to have_no_field(class: "awesome-auto-edit")
|
13
13
|
link.click
|
14
14
|
input = find("[data-key=#{key}] input.awesome-auto-edit")
|
15
15
|
input.fill_in with: "A new làbel\n"
|
16
16
|
sleep 1
|
17
|
-
expect(page).
|
17
|
+
expect(page).to have_no_field(class: "awesome-auto-edit")
|
18
18
|
expect(page).to have_css("span.awesome-auto-edit[data-key=a_new_label]")
|
19
19
|
|
20
20
|
click_link_or_button "Update configuration"
|
@@ -24,14 +24,14 @@ shared_examples "edits box label inline" do |test_case, key|
|
|
24
24
|
when :fields
|
25
25
|
expect(page).to have_content("Occupation")
|
26
26
|
expect(page).to have_content("Street Sweeper")
|
27
|
-
expect(page).
|
27
|
+
expect(page).to have_no_content("Short Bio")
|
28
28
|
when :admins
|
29
|
-
expect(page).
|
29
|
+
expect(page).to have_no_content(user.name.to_s)
|
30
30
|
expect(page).to have_content(user2.name.to_s)
|
31
31
|
expect(page).to have_content(user3.name.to_s)
|
32
32
|
end
|
33
33
|
expect(page).to have_css("span.awesome-auto-edit[data-key=a_new_label]")
|
34
|
-
expect(page).
|
34
|
+
expect(page).to have_no_css("span.awesome-auto-edit[data-key=#{key}]")
|
35
35
|
end
|
36
36
|
|
37
37
|
it "updates the label with previous changes" do
|
@@ -48,16 +48,16 @@ shared_examples "edits box label inline" do |test_case, key|
|
|
48
48
|
end
|
49
49
|
|
50
50
|
link = find("[data-key=#{key}] a.awesome-auto-edit", match: :first)
|
51
|
-
expect(page).
|
51
|
+
expect(page).to have_no_field(class: "awesome-auto-edit")
|
52
52
|
link.click
|
53
53
|
expect(page).to have_field(class: "awesome-auto-edit")
|
54
54
|
find("body").click
|
55
|
-
expect(page).
|
55
|
+
expect(page).to have_no_field(class: "awesome-auto-edit")
|
56
56
|
link.click
|
57
57
|
input = find("[data-key=#{key}] input.awesome-auto-edit")
|
58
58
|
input.fill_in with: "A new làbel\n"
|
59
59
|
sleep 1
|
60
|
-
expect(page).
|
60
|
+
expect(page).to have_no_field(class: "awesome-auto-edit")
|
61
61
|
expect(page).to have_css("span.awesome-auto-edit[data-key=a_new_label]")
|
62
62
|
|
63
63
|
click_link_or_button "Update configuration"
|
@@ -73,21 +73,21 @@ shared_examples "edits box label inline" do |test_case, key|
|
|
73
73
|
expect(page).to have_content(user3.name.to_s)
|
74
74
|
end
|
75
75
|
expect(page).to have_css("span.awesome-auto-edit[data-key=a_new_label]")
|
76
|
-
expect(page).
|
76
|
+
expect(page).to have_no_css("span.awesome-auto-edit[data-key=#{key}]")
|
77
77
|
end
|
78
78
|
|
79
79
|
it "updates the label with post changes" do
|
80
80
|
link = find("[data-key=#{key}] a.awesome-auto-edit", match: :first)
|
81
|
-
expect(page).
|
81
|
+
expect(page).to have_no_field(class: "awesome-auto-edit")
|
82
82
|
link.click
|
83
83
|
expect(page).to have_field(class: "awesome-auto-edit")
|
84
84
|
find("body").click
|
85
|
-
expect(page).
|
85
|
+
expect(page).to have_no_field(class: "awesome-auto-edit")
|
86
86
|
link.click
|
87
87
|
input = find("[data-key=#{key}] input.awesome-auto-edit")
|
88
88
|
input.fill_in with: "A new làbel\n"
|
89
89
|
sleep 1
|
90
|
-
expect(page).
|
90
|
+
expect(page).to have_no_field(class: "awesome-auto-edit")
|
91
91
|
expect(page).to have_css("span.awesome-auto-edit[data-key=a_new_label]")
|
92
92
|
|
93
93
|
case test_case
|
@@ -111,6 +111,6 @@ shared_examples "edits box label inline" do |test_case, key|
|
|
111
111
|
expect(page).to have_content(user3.name.to_s)
|
112
112
|
end
|
113
113
|
expect(page).to have_css("span.awesome-auto-edit[data-key=a_new_label]")
|
114
|
-
expect(page).
|
114
|
+
expect(page).to have_no_css("span.awesome-auto-edit[data-key=#{key}]")
|
115
115
|
end
|
116
116
|
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.
|
8
|
+
expect(page.body).to have_content("window.DecidimAwesome.i18n")
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
@@ -22,14 +22,13 @@ shared_examples "do not have menu link" do |item|
|
|
22
22
|
let(:prefix) { "config/" }
|
23
23
|
it "do not show the feature link" do
|
24
24
|
within ".sidebar-menu" do
|
25
|
-
expect(page).
|
25
|
+
expect(page).to have_no_link(href: "/admin/decidim_awesome/#{prefix}#{item}")
|
26
26
|
end
|
27
27
|
end
|
28
28
|
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|
|
@@ -26,7 +26,7 @@ shared_examples "updates a box" do
|
|
26
26
|
expect(page).to have_content("Full Name")
|
27
27
|
expect(page).to have_content("Occupation")
|
28
28
|
expect(page).to have_content("Street Sweeper")
|
29
|
-
expect(page).
|
29
|
+
expect(page).to have_no_content("Short Bio")
|
30
30
|
|
31
31
|
page.execute_script("$('.proposal_custom_fields_container[data-key=\"foo\"] .proposal_custom_fields_editor')[0].FormBuilder.actions.setData(#{data})")
|
32
32
|
click_on "Update configuration"
|
@@ -34,8 +34,8 @@ shared_examples "updates a box" do
|
|
34
34
|
sleep 2
|
35
35
|
expect(page).to have_admin_callout("updated successfully")
|
36
36
|
expect(page).to have_content("Full Name")
|
37
|
-
expect(page).
|
38
|
-
expect(page).
|
37
|
+
expect(page).to have_no_content("Occupation")
|
38
|
+
expect(page).to have_no_content("Street Sweeper")
|
39
39
|
expect(page).to have_content("Short Bio")
|
40
40
|
end
|
41
41
|
end
|
@@ -53,7 +53,7 @@ shared_examples "removes a box" do |name|
|
|
53
53
|
expect(page).to have_content("Full Name")
|
54
54
|
expect(page).to have_content("Occupation")
|
55
55
|
expect(page).to have_content("Street Sweeper")
|
56
|
-
expect(page).
|
56
|
+
expect(page).to have_no_content("Short Bio")
|
57
57
|
|
58
58
|
within ".proposal_custom_fields_container[data-key=\"foo\"]" do
|
59
59
|
accept_confirm { click_on "Remove this \"#{name}\" box" }
|
@@ -61,10 +61,10 @@ shared_examples "removes a box" do |name|
|
|
61
61
|
|
62
62
|
sleep 2
|
63
63
|
expect(page).to have_admin_callout("removed successfully")
|
64
|
-
expect(page).
|
64
|
+
expect(page).to have_no_content("Full Name")
|
65
65
|
expect(page).to have_content("Occupation")
|
66
66
|
expect(page).to have_content("Street Sweeper")
|
67
|
-
expect(page).
|
67
|
+
expect(page).to have_no_content("Short Bio")
|
68
68
|
|
69
69
|
expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_foo")).not_to be_present
|
70
70
|
expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_bar")).to be_present
|
@@ -121,13 +121,13 @@ shared_examples "removes a constraint" do
|
|
121
121
|
end
|
122
122
|
|
123
123
|
within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do
|
124
|
-
expect(page).
|
124
|
+
expect(page).to have_no_content("Proposals")
|
125
125
|
end
|
126
126
|
|
127
127
|
visit decidim_admin_decidim_awesome.config_path("#{var_name}s")
|
128
128
|
|
129
129
|
within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do
|
130
|
-
expect(page).
|
130
|
+
expect(page).to have_no_content("Proposals")
|
131
131
|
end
|
132
132
|
|
133
133
|
expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_bar")).to be_present
|