decidim-decidim_awesome 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -6
  3. data/app/assets/stylesheets/decidim/decidim_awesome/admin.scss +4 -0
  4. data/app/awesome_overrides/presenters/decidim/menu_presenter_override.rb +31 -0
  5. data/app/commands/decidim/decidim_awesome/admin/create_menu_hack.rb +51 -0
  6. data/app/commands/decidim/decidim_awesome/admin/destroy_menu_hack.rb +47 -0
  7. data/app/commands/decidim/decidim_awesome/admin/update_config.rb +1 -1
  8. data/app/commands/decidim/decidim_awesome/admin/update_menu_hack.rb +47 -0
  9. data/app/controllers/decidim/decidim_awesome/admin/application_controller.rb +4 -3
  10. data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +9 -0
  11. data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +13 -0
  12. data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +116 -0
  13. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +5 -7
  14. data/app/forms/decidim/decidim_awesome/admin/constraint_form.rb +0 -2
  15. data/app/forms/decidim/decidim_awesome/admin/intergram_form.rb +0 -2
  16. data/app/forms/decidim/decidim_awesome/admin/menu_form.rb +39 -0
  17. data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +5 -1
  18. data/app/permissions/decidim/decidim_awesome/admin/permissions.rb +19 -0
  19. data/app/permissions/decidim/decidim_awesome/permissions.rb +2 -0
  20. data/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +0 -1
  21. data/app/views/decidim/decidim_awesome/admin/menu_hacks/_form.html.erb +7 -0
  22. data/app/views/decidim/decidim_awesome/admin/menu_hacks/edit.html.erb +13 -0
  23. data/app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb +44 -0
  24. data/app/views/decidim/decidim_awesome/admin/menu_hacks/new.html.erb +13 -0
  25. data/app/views/layouts/decidim/admin/decidim_awesome.html.erb +5 -0
  26. data/config/locales/ca.yml +45 -4
  27. data/config/locales/cs.yml +46 -5
  28. data/config/locales/en.yml +47 -4
  29. data/config/locales/es.yml +45 -4
  30. data/config/locales/eu.yml +45 -4
  31. data/config/locales/fr.yml +45 -4
  32. data/config/locales/nl.yml +212 -0
  33. data/config/locales/sv.yml +45 -4
  34. data/lib/decidim/decidim_awesome.rb +15 -0
  35. data/lib/decidim/decidim_awesome/admin_engine.rb +1 -0
  36. data/lib/decidim/decidim_awesome/checksums.yml +6 -0
  37. data/lib/decidim/decidim_awesome/engine.rb +1 -1
  38. data/lib/decidim/decidim_awesome/menu_hacker.rb +88 -0
  39. data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +4 -2
  40. data/lib/decidim/decidim_awesome/test/shared_examples/menu_hack_contexts.rb +71 -0
  41. data/lib/decidim/decidim_awesome/version.rb +1 -1
  42. metadata +16 -2
@@ -24,6 +24,12 @@ sv:
24
24
  component_manifest: Only in components of type
25
25
  participatory_space_manifest: Apply to participatory spaces of type
26
26
  participatory_space_slug: Only in
27
+ menu:
28
+ position: Position
29
+ raw_label: Label
30
+ target: Opens in
31
+ url: URL
32
+ visibility: Visibility
27
33
  decidim:
28
34
  admin:
29
35
  menu:
@@ -78,10 +84,10 @@ sv:
78
84
  title: 'Applicable only in these cases:'
79
85
  create_scoped_style:
80
86
  error: Error creating a new CSS box! %{error}
81
- success: CSS box %{key} created successfully!
87
+ success: CSS box %{key} created successfully
82
88
  destroy_scoped_style:
83
89
  error: Error removing CSS box! %{error}
84
- success: CSS box %{key} removed successfully!
90
+ success: CSS box %{key} removed successfully
85
91
  experimental: Experimental options
86
92
  form:
87
93
  help:
@@ -107,7 +113,7 @@ sv:
107
113
  system: Everywhere except participatory spaces
108
114
  update:
109
115
  error: Error updating configuration! %{error}
110
- success: Configuration updated successfully!
116
+ success: Configuration updated successfully
111
117
  constraints:
112
118
  create:
113
119
  error: Error creating condition case
@@ -132,9 +138,44 @@ sv:
132
138
  checks: System compatibility
133
139
  editors: Editor hacks
134
140
  livechat: Live Chat
141
+ menu_hacks: Menu tweaks
135
142
  proposals: Proposals hacks
136
143
  styles: Custom styles
137
144
  surveys: Surveys & forms
145
+ menu_hacks:
146
+ create:
147
+ error: Error creating menu item! %{error}
148
+ success: Menu item created successfully
149
+ destroy:
150
+ error: Error removing menu item! %{error}
151
+ success: Menu item removed successfully
152
+ edit:
153
+ save: Save
154
+ title: Edit menu item
155
+ form:
156
+ label_help: Translations aren't automatically detected, be sure to fill in all the fields!
157
+ target:
158
+ blank: New window
159
+ self: Same window
160
+ visibility:
161
+ default: Visible
162
+ hidden: Always hidden
163
+ logged: Only visible for logged users
164
+ non_logged: Only visible for non-logged users
165
+ index:
166
+ confirm_destroy: Are you sure to remove this customization?
167
+ edit: Edit
168
+ new: New item
169
+ remove: Remove addition
170
+ remove_hack: Remove customization
171
+ title: Main menu
172
+ new:
173
+ save: Save
174
+ title: New menu item
175
+ update:
176
+ error: Error updating menu item! %{error}
177
+ success: Menu item updated successfully
178
+ url_exists: The same URL is already configured, please edit that instead of creating it again.
138
179
  config:
139
180
  intergram:
140
181
  auto_no_response: It seems that no one is available to answer right now. Please tell us how we can contact you, and we will get back to you as soon as we can.
@@ -146,7 +187,7 @@ sv:
146
187
  editor_images:
147
188
  create:
148
189
  error: Error uploading image!
149
- success: Image uploaded successfully!
190
+ success: Image uploaded successfully
150
191
  map_component:
151
192
  map:
152
193
  error:
@@ -18,6 +18,7 @@ module Decidim
18
18
  autoload :SystemChecker, "decidim/decidim_awesome/system_checker"
19
19
  autoload :ContentRenderes, "decidim/decidim_awesome/content_renderers"
20
20
  autoload :ContextAnalyzers, "decidim/decidim_awesome/context_analyzers"
21
+ autoload :MenuHacker, "decidim/decidim_awesome/menu_hacker"
21
22
 
22
23
  # Boolean configuration options
23
24
  #
@@ -71,6 +72,20 @@ module Decidim
71
72
  {}
72
73
  end
73
74
 
75
+ # allows to keep modifications for the main menu
76
+ # can return :disabled to completly remove this feature
77
+ # otherwise it should be an array (some overrides can be specified by default):
78
+ # [
79
+ # {
80
+ # url: "/a-new-link",
81
+ # label: { "en" => "The label to show in the menu" },
82
+ # position: 10
83
+ # }
84
+ # ]
85
+ config_accessor :menu do
86
+ []
87
+ end
88
+
74
89
  # these settings do not follow the :disabled convention but
75
90
  # depends on the previous intergram configurations
76
91
  config_accessor :intergram_url do
@@ -12,6 +12,7 @@ module Decidim
12
12
  routes do
13
13
  # Add admin engine routes here
14
14
  resources :constraints
15
+ resources :menu_hacks, except: [:show]
15
16
  resources :config, param: :var, only: [:show, :update]
16
17
  post :new_scoped_style, to: "config#new_scoped_style"
17
18
  post :destroy_scoped_style, param: :key, to: "config#destroy_scoped_style"
@@ -10,6 +10,12 @@ decidim-core:
10
10
  decidim-0.22: 797d0ec1c9e79453cf6718f82d2fdd27
11
11
  decidim-0.23: cb059b8ff0ffc62c67eb99d8d7a6637b
12
12
  decidim-0.23.1: 4787f73f0f33661e3897404f10019d26
13
+ /app/presenters/decidim/menu_presenter.rb:
14
+ decidim-0.22: 042743c44a2aff284b493c7bebbccbb3
15
+ decidim-0.23: 042743c44a2aff284b493c7bebbccbb3
16
+ /app/presenters/decidim/menu_item_presenter.rb:
17
+ decidim-0.22: 70db39954b5840924530bf94d2a0a73a
18
+ decidim-0.23: 70db39954b5840924530bf94d2a0a73a
13
19
  decidim-proposals:
14
20
  /app/presenters/decidim/proposals/proposal_presenter.rb:
15
21
  decidim-0.22: 7d60c8310d7fa4e38d9a27080c22b12c
@@ -20,7 +20,7 @@ module Decidim
20
20
 
21
21
  initializer "decidim_decidim_awesome.assets" do |app|
22
22
  app.config.assets.precompile += %w(decidim_decidim_awesome_manifest.js decidim_decidim_awesome_manifest.css)
23
- # add to precompile any present
23
+ # add to precompile any present theme asset
24
24
  Dir.glob(Rails.root.join("app", "assets", "themes", "*.*")).each do |path|
25
25
  app.config.assets.precompile << path
26
26
  end
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ class MenuHacker
6
+ include Decidim::TranslatableAttributes
7
+ def initialize(name, view)
8
+ @name = name
9
+ @organization = view.try(:current_organization)
10
+ @user = view.try(:current_user)
11
+ @view = view
12
+ end
13
+
14
+ # returns a combined array of the Decidim defined menu and the hacked stored as config vars
15
+ def items(include_invisible = false)
16
+ return @items if @items
17
+
18
+ @items = default_items
19
+ menu_overrides.each do |item|
20
+ default = default_items.find { |i| i.url.gsub(/\?.*/, "") == item.url }
21
+ if default
22
+ item.send("overrided?=", true)
23
+ @items.reject! { |i| i.url.gsub(/\?.*/, "") == item.url }
24
+ end
25
+ @items << item if include_invisible || visible?(item)
26
+ end
27
+
28
+ @items.sort_by!(&:position)
29
+ end
30
+
31
+ private
32
+
33
+ attr_accessor :organization, :user
34
+ attr_reader :name, :view
35
+
36
+ def visible?(item)
37
+ case item.visibility
38
+ when "hidden"
39
+ false
40
+ when "logged"
41
+ user.present?
42
+ when "non_logged"
43
+ user.blank?
44
+ else
45
+ true
46
+ end
47
+ end
48
+
49
+ def default_items
50
+ @default_items ||= build_menu.instance_variable_get(:@items).map do |item|
51
+ item.instance_variable_set(:@active, method(:activate?)) unless item.active == :exact
52
+ item
53
+ end
54
+ end
55
+
56
+ def build_menu
57
+ menu = Decidim::Menu.new(name)
58
+ menu.build_for(view)
59
+ menu
60
+ end
61
+
62
+ def menu_overrides
63
+ @menu_overrides ||= current_config.map do |item|
64
+ OpenStruct.new(
65
+ label: translated_attribute(item["label"], organization),
66
+ raw_label: item["label"],
67
+ url: item["url"],
68
+ position: item["position"] || 1,
69
+ # see options in https://github.com/comfy/active_link_to
70
+ active: method(:activate?),
71
+ visibility: item["visibility"],
72
+ target: item["target"],
73
+ overrided?: false
74
+ )
75
+ end
76
+ end
77
+
78
+ def activate?(url, view)
79
+ urls = @items.map(&:url).sort_by(&:length).reverse
80
+ url == urls.find { |u| view.request.original_fullpath.start_with?(u) }
81
+ end
82
+
83
+ def current_config
84
+ @current_config ||= (AwesomeConfig.find_by(var: name, organization: organization)&.value || []).filter { |i| i.is_a? Hash }
85
+ end
86
+ end
87
+ end
88
+ end
@@ -9,17 +9,19 @@ shared_examples "javascript config vars" do
9
9
  end
10
10
 
11
11
  shared_examples "has menu link" do |item|
12
+ let(:prefix) { "config/" }
12
13
  it "shows the feature link" do
13
14
  within ".secondary-nav" do
14
- expect(page).to have_link(href: "/admin/decidim_awesome/config/#{item}")
15
+ expect(page).to have_link(href: "/admin/decidim_awesome/#{prefix}#{item}")
15
16
  end
16
17
  end
17
18
  end
18
19
 
19
20
  shared_examples "do not have menu link" do |item|
21
+ let(:prefix) { "config/" }
20
22
  it "do not show the feature link" do
21
23
  within ".secondary-nav" do
22
- expect(page).not_to have_link(href: "/admin/decidim_awesome/config/#{item}")
24
+ expect(page).not_to have_link(href: "/admin/decidim_awesome/#{prefix}#{item}")
23
25
  end
24
26
  end
25
27
  end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ shared_context "with menu hacks params" do
4
+ let(:organization) { create(:organization) }
5
+ let(:context) do
6
+ {
7
+ current_user: create(:user, organization: organization),
8
+ current_organization: organization
9
+ }
10
+ end
11
+ let(:params) do
12
+ {
13
+ raw_label: label,
14
+ url: url,
15
+ position: position,
16
+ target: target,
17
+ visibility: visibility
18
+ }
19
+ end
20
+ let(:attributes) do
21
+ {
22
+ "label" => label,
23
+ "url" => url,
24
+ "position" => position,
25
+ "target" => target,
26
+ "visibility" => visibility
27
+ }
28
+ end
29
+ let(:label) do
30
+ {
31
+ "en" => "Menu english",
32
+ "ca" => "Menu catalan"
33
+ }
34
+ end
35
+ let(:url) { "/some-path" }
36
+ let(:position) { 2 }
37
+ let(:target) { "_blank" }
38
+ let(:visibility) { "hidden" }
39
+ let(:menu_name) { "menu" }
40
+
41
+ let(:another_params) do
42
+ {
43
+ allow_images_in_full_editor: true,
44
+ allow_images_in_small_editor: true
45
+ }
46
+ end
47
+ let(:form) do
48
+ Decidim::DecidimAwesome::Admin::MenuForm.from_params(params).with_context(context)
49
+ end
50
+ let(:another_form) do
51
+ Decidim::DecidimAwesome::Admin::ConfigForm.from_params(another_params).with_context(context)
52
+ end
53
+ let(:another_config) { Decidim::DecidimAwesome::Admin::UpdateConfig.new(another_form) }
54
+ end
55
+
56
+ shared_examples "forbids disabled feature" do
57
+ let(:feature) { :menu }
58
+ let(:features) { [feature] }
59
+ before do
60
+ features.each do |feat|
61
+ allow(Decidim::DecidimAwesome.config).to receive(feat).and_return(:disabled)
62
+ end
63
+ end
64
+
65
+ it "redirects with error" do
66
+ action
67
+
68
+ expect(flash[:alert]).not_to be_empty
69
+ expect(response).to redirect_to("/admin/")
70
+ end
71
+ end
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  # This holds the decidim-decidim_awesome version.
5
5
  module DecidimAwesome
6
- VERSION = "0.6.4"
6
+ VERSION = "0.6.5"
7
7
  COMPAT_DECIDIM_VERSION = [">= 0.22.0", "< 0.24"].freeze
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-decidim_awesome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.5
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: 2021-02-17 00:00:00.000000000 Z
11
+ date: 2021-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim-admin
@@ -139,19 +139,24 @@ files:
139
139
  - app/assets/stylesheets/decidim/decidim_awesome/editors/markdown_view.scss
140
140
  - app/assets/stylesheets/decidim/decidim_awesome/editors/quill_editor.scss
141
141
  - app/assets/stylesheets/decidim/decidim_awesome/forms/autosave.scss
142
+ - app/awesome_overrides/presenters/decidim/menu_presenter_override.rb
142
143
  - app/awesome_overrides/presenters/decidim/proposals/proposal_presenter_override.rb
143
144
  - app/commands/decidim/decidim_awesome/admin/create_constraint.rb
145
+ - app/commands/decidim/decidim_awesome/admin/create_menu_hack.rb
144
146
  - app/commands/decidim/decidim_awesome/admin/create_scoped_style.rb
145
147
  - app/commands/decidim/decidim_awesome/admin/destroy_constraint.rb
148
+ - app/commands/decidim/decidim_awesome/admin/destroy_menu_hack.rb
146
149
  - app/commands/decidim/decidim_awesome/admin/destroy_scoped_style.rb
147
150
  - app/commands/decidim/decidim_awesome/admin/update_config.rb
148
151
  - app/commands/decidim/decidim_awesome/admin/update_constraint.rb
152
+ - app/commands/decidim/decidim_awesome/admin/update_menu_hack.rb
149
153
  - app/commands/decidim/decidim_awesome/create_editor_image.rb
150
154
  - app/controllers/concerns/decidim/decidim_awesome/needs_awesome_config.rb
151
155
  - app/controllers/decidim/decidim_awesome/admin/application_controller.rb
152
156
  - app/controllers/decidim/decidim_awesome/admin/checks_controller.rb
153
157
  - app/controllers/decidim/decidim_awesome/admin/config_controller.rb
154
158
  - app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb
159
+ - app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb
155
160
  - app/controllers/decidim/decidim_awesome/application_controller.rb
156
161
  - app/controllers/decidim/decidim_awesome/editor_images_controller.rb
157
162
  - app/controllers/decidim/decidim_awesome/iframe_component/application_controller.rb
@@ -161,6 +166,7 @@ files:
161
166
  - app/forms/decidim/decidim_awesome/admin/config_form.rb
162
167
  - app/forms/decidim/decidim_awesome/admin/constraint_form.rb
163
168
  - app/forms/decidim/decidim_awesome/admin/intergram_form.rb
169
+ - app/forms/decidim/decidim_awesome/admin/menu_form.rb
164
170
  - app/forms/decidim/decidim_awesome/editor_image_form.rb
165
171
  - app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb
166
172
  - app/helpers/decidim/decidim_awesome/map_helper.rb
@@ -168,6 +174,7 @@ files:
168
174
  - app/models/decidim/decidim_awesome/awesome_config.rb
169
175
  - app/models/decidim/decidim_awesome/config_constraint.rb
170
176
  - app/models/decidim/decidim_awesome/editor_image.rb
177
+ - app/permissions/decidim/decidim_awesome/admin/permissions.rb
171
178
  - app/permissions/decidim/decidim_awesome/permissions.rb
172
179
  - app/uploaders/decidim/decidim_awesome/image_uploader.rb
173
180
  - app/views/decidim/decidim_awesome/admin/checks/index.html.erb
@@ -182,6 +189,10 @@ files:
182
189
  - app/views/decidim/decidim_awesome/admin/constraints/_form.html.erb
183
190
  - app/views/decidim/decidim_awesome/admin/constraints/new.html.erb
184
191
  - app/views/decidim/decidim_awesome/admin/constraints/show.html.erb
192
+ - app/views/decidim/decidim_awesome/admin/menu_hacks/_form.html.erb
193
+ - app/views/decidim/decidim_awesome/admin/menu_hacks/edit.html.erb
194
+ - app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb
195
+ - app/views/decidim/decidim_awesome/admin/menu_hacks/new.html.erb
185
196
  - app/views/decidim/decidim_awesome/iframe_component/iframe/show.html.erb
186
197
  - app/views/decidim/decidim_awesome/map_component/map/error.erb
187
198
  - app/views/decidim/decidim_awesome/map_component/map/show.html.erb
@@ -202,6 +213,7 @@ files:
202
213
  - config/locales/es.yml
203
214
  - config/locales/eu.yml
204
215
  - config/locales/fr.yml
216
+ - config/locales/nl.yml
205
217
  - config/locales/sv.yml
206
218
  - db/migrate/20200324170000_create_decidim_awesome_config.rb
207
219
  - db/migrate/20200324230936_create_awesome_editor_images.rb
@@ -224,12 +236,14 @@ files:
224
236
  - lib/decidim/decidim_awesome/iframe_component/engine.rb
225
237
  - lib/decidim/decidim_awesome/map_component/component.rb
226
238
  - lib/decidim/decidim_awesome/map_component/engine.rb
239
+ - lib/decidim/decidim_awesome/menu_hacker.rb
227
240
  - lib/decidim/decidim_awesome/system_checker.rb
228
241
  - lib/decidim/decidim_awesome/test/factories.rb
229
242
  - lib/decidim/decidim_awesome/test/layouts/decidim/_head.html.erb
230
243
  - lib/decidim/decidim_awesome/test/layouts/decidim/admin/_header.html.erb
231
244
  - lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb
232
245
  - lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb
246
+ - lib/decidim/decidim_awesome/test/shared_examples/menu_hack_contexts.rb
233
247
  - lib/decidim/decidim_awesome/test/themes/css.lvh.me.css
234
248
  - lib/decidim/decidim_awesome/test/themes/erb.lvh.me.scss.erb
235
249
  - lib/decidim/decidim_awesome/test/themes/scss.lvh.me.scss