decidim-decidim_awesome 0.5.1 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +30 -14
  3. data/Rakefile +6 -0
  4. data/app/assets/config/decidim_admin_decidim_awesome_manifest.js +1 -0
  5. data/app/assets/config/decidim_decidim_awesome_manifest.js +1 -0
  6. data/app/assets/javascripts/decidim/decidim_awesome/admin/form_exit_warn.js.es6 +30 -0
  7. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_map.js.es6 +225 -0
  8. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_proposals.js.es6 +82 -0
  9. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/map.js.es6 +20 -20
  10. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/meetings.js.es6 +15 -13
  11. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/proposals.js.es6 +29 -13
  12. data/app/assets/javascripts/decidim/decidim_awesome/editors/quill_editor.js.es6 +2 -4
  13. data/app/awesome_overrides/presenters/decidim/proposals/proposal_presenter_override.rb +39 -6
  14. data/app/commands/decidim/decidim_awesome/admin/create_scoped_style.rb +34 -0
  15. data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_style.rb +40 -0
  16. data/app/commands/decidim/decidim_awesome/create_editor_image.rb +5 -3
  17. data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +29 -1
  18. data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +29 -2
  19. data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +0 -2
  20. data/app/controllers/decidim/decidim_awesome/editor_images_controller.rb +1 -1
  21. data/app/controllers/decidim/decidim_awesome/map_component/map_controller.rb +8 -1
  22. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +11 -0
  23. data/app/forms/decidim/decidim_awesome/editor_image_form.rb +2 -0
  24. data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +4 -0
  25. data/app/helpers/decidim/decidim_awesome/map_helper.rb +37 -1
  26. data/app/models/decidim/decidim_awesome/editor_image.rb +4 -3
  27. data/app/uploaders/decidim/decidim_awesome/image_uploader.rb +9 -0
  28. data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +49 -7
  29. data/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +28 -0
  30. data/app/views/decidim/decidim_awesome/admin/config/show.html.erb +1 -1
  31. data/app/views/decidim/decidim_awesome/iframe_component/iframe/show.html.erb +6 -1
  32. data/app/views/decidim/decidim_awesome/map_component/map/show.html.erb +46 -20
  33. data/app/views/layouts/decidim/admin/decidim_awesome.html.erb +5 -0
  34. data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +1 -1
  35. data/app/views/layouts/decidim/decidim_awesome/_custom_styles.html.erb +3 -0
  36. data/app/views/v0.22/layouts/decidim/_head.html.erb +1 -0
  37. data/app/views/{v0.21 → v0.23}/layouts/decidim/_head.html.erb +5 -0
  38. data/app/views/{v0.21 → v0.23}/layouts/decidim/admin/_header.html.erb +3 -0
  39. data/config/locales/ca.yml +53 -7
  40. data/config/locales/cs.yml +47 -1
  41. data/config/locales/en.yml +32 -2
  42. data/config/locales/es.yml +84 -38
  43. data/config/locales/eu.yml +171 -0
  44. data/config/locales/fr.yml +47 -1
  45. data/config/locales/sv.yml +47 -1
  46. data/lib/decidim/decidim_awesome.rb +12 -0
  47. data/lib/decidim/decidim_awesome/admin_engine.rb +2 -0
  48. data/lib/decidim/decidim_awesome/awesome_helpers.rb +17 -3
  49. data/lib/decidim/decidim_awesome/checksums.yml +6 -4
  50. data/lib/decidim/decidim_awesome/config.rb +13 -12
  51. data/lib/decidim/decidim_awesome/iframe_component/component.rb +3 -3
  52. data/lib/decidim/decidim_awesome/map_component/component.rb +6 -0
  53. data/lib/decidim/decidim_awesome/test/factories.rb +1 -1
  54. data/lib/decidim/decidim_awesome/test/layouts/decidim/_head.html.erb +2 -0
  55. data/lib/decidim/decidim_awesome/test/layouts/decidim/admin/_header.html.erb +3 -0
  56. data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +71 -0
  57. data/lib/decidim/decidim_awesome/version.rb +2 -3
  58. data/vendor/assets/javascripts/jsrender.min.js +4 -0
  59. metadata +29 -18
  60. data/app/helpers/decidim/decidim_awesome/application_helper.rb +0 -10
@@ -10,8 +10,6 @@ module Decidim
10
10
 
11
11
  layout false
12
12
 
13
- # helper_method :participatory_space_manifests, :participatory_spaces_list, :translate_constraint_value
14
-
15
13
  def new
16
14
  @form = form(ConstraintForm).from_params(filtered_params, setting: current_setting)
17
15
  end
@@ -42,7 +42,7 @@ module Decidim
42
42
  {
43
43
  image: params[:image],
44
44
  author_id: current_user.id,
45
- path: request.original_fullpath
45
+ path: request.referer
46
46
  }
47
47
  end
48
48
  end
@@ -8,11 +8,18 @@ module Decidim
8
8
  helper_method :map_components
9
9
 
10
10
  def show
11
- render :error if Decidim.geocoder.blank?
11
+ render :error unless maps_enabled?
12
12
  end
13
13
 
14
14
  private
15
15
 
16
+ def maps_enabled?
17
+ return Decidim::Map.configured? if defined?(Decidim::Map)
18
+
19
+ # TODO: remove when 0.22 support is diched
20
+ Decidim.geocoder.present?
21
+ end
22
+
16
23
  def map_components
17
24
  @map_components ||= current_participatory_space.components.published.filter do |component|
18
25
  case component.manifest.name
@@ -12,10 +12,21 @@ module Decidim
12
12
  attribute :use_markdown_editor, Boolean
13
13
  attribute :allow_images_in_markdown_editor, Boolean
14
14
  attribute :auto_save_forms, Boolean
15
+ attribute :scoped_styles, Hash
15
16
  attribute :intergram_for_admins, Boolean
16
17
  attribute :intergram_for_admins_settings, IntergramForm
17
18
  attribute :intergram_for_public, Boolean
18
19
  attribute :intergram_for_public_settings, IntergramForm
20
+
21
+ # convert to nil anything not specified in the params (UpdateConfig command ignores nil entries)
22
+ def self.from_params(params, additional_params = {})
23
+ instance = super(params, additional_params)
24
+ nillable_keys = instance.attributes.keys - params.keys.map(&:to_sym)
25
+ nillable_keys.each do |key|
26
+ instance.send("#{key}=", nil)
27
+ end
28
+ instance
29
+ end
19
30
  end
20
31
  end
21
32
  end
@@ -11,6 +11,8 @@ module Decidim
11
11
 
12
12
  validates :author_id, presence: true
13
13
  validates :image, presence: true
14
+
15
+ alias organization current_organization
14
16
  end
15
17
  end
16
18
  end
@@ -6,6 +6,10 @@ module Decidim
6
6
  module ConfigConstraintsHelpers
7
7
  include Decidim::TranslatableAttributes
8
8
 
9
+ def check(status)
10
+ content_tag(:span, icon("check", class: "icon", aria_label: status, role: "img"), class: "text-#{status == :ok ? "success" : "alert"}")
11
+ end
12
+
9
13
  # returns only non :disabled vars in config
10
14
  def enabled_configs(vars)
11
15
  vars.filter do |var|
@@ -3,7 +3,38 @@
3
3
  module Decidim
4
4
  module DecidimAwesome
5
5
  module MapHelper
6
- def dynamic_map_for(components)
6
+ include Decidim::MapHelper
7
+
8
+ def awesome_map_for(components, &block)
9
+ return legacy_map_for(components, &block) unless defined?(Decidim::Map)
10
+
11
+ map = dynamic_map_for({}, {}, &block)
12
+ return unless map
13
+
14
+ map_html_options = {
15
+ "class" => "awesome-map",
16
+ "id" => "awesome-map",
17
+ "data-components" => components.map do |component|
18
+ {
19
+ id: component.id,
20
+ type: component.manifest.name,
21
+ name: translated_attribute(component.name),
22
+ url: Decidim::EngineRouter.main_proxy(component).root_path,
23
+ amendments: component.manifest.name == :proposals ? Decidim::Proposals::Proposal.where(component: component).only_emendations.count : 0
24
+ }
25
+ end.to_json,
26
+ "data-collapsed" => current_component.settings.collapse,
27
+ "data-show-not-answered" => current_component.current_settings.show_not_answered,
28
+ "data-show-accepted" => current_component.current_settings.show_accepted,
29
+ "data-show-withdrawn" => current_component.current_settings.show_withdrawn,
30
+ "data-show-evaluating" => current_component.current_settings.show_evaluating
31
+ # "data-show-rejected" => current_component.current_settings.show_rejected
32
+ }
33
+ content_tag(:div, map, map_html_options)
34
+ end
35
+
36
+ # TODO: remove when 0.22 support is diched
37
+ def legacy_map_for(components)
7
38
  return if Decidim.geocoder.blank?
8
39
 
9
40
  map_html_options = {
@@ -19,6 +50,11 @@ module Decidim
19
50
  }
20
51
  end.to_json,
21
52
  "data-collapsed" => current_component.settings.collapse,
53
+ "data-show-not-answered" => current_component.current_settings.show_not_answered,
54
+ "data-show-accepted" => current_component.current_settings.show_accepted,
55
+ "data-show-withdrawn" => current_component.current_settings.show_withdrawn,
56
+ "data-show-evaluating" => current_component.current_settings.show_evaluating,
57
+ # "data-show-rejected" => current_component.current_settings.show_rejected,
22
58
  "data-markers-data" => [].to_json
23
59
  }
24
60
 
@@ -11,9 +11,10 @@ module Decidim
11
11
  validates :organization, presence: true
12
12
  validates :author, presence: true
13
13
 
14
- validates :image,
15
- file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } },
16
- file_content_type: { allow: ["image/jpeg", "image/png"] }
14
+ validates :image, presence: true
15
+ # validates :image,
16
+ # file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } },
17
+ # file_content_type: { allow: ["image/jpeg", "image/png"] }
17
18
 
18
19
  mount_uploader :image, Decidim::DecidimAwesome::ImageUploader
19
20
 
@@ -10,10 +10,19 @@ module Decidim
10
10
  process resize_to_fit: [nil, 237]
11
11
  end
12
12
 
13
+ # TODO: remove when diching 0.22 support
13
14
  def extension_white_list
14
15
  %w(jpg jpeg png)
15
16
  end
16
17
 
18
+ def extension_whitelist
19
+ %w(jpg jpeg png)
20
+ end
21
+
22
+ def content_type_whitelist
23
+ %w(image/jpeg image/png)
24
+ end
25
+
17
26
  def max_image_height_or_width
18
27
  8000
19
28
  end
@@ -6,9 +6,9 @@
6
6
  <p>
7
7
  <%= t ".decidim_version", version: decidim_version %>
8
8
  <% if decidim_version_valid? %>
9
- <span class="text-success"><%= icon("check", class: "icon", aria_label: "ok", role: "img") %></span>
9
+ <%= check :ok %>
10
10
  <% else %>
11
- <span class="text-alert"><%= icon("x", class: "icon", aria_label: "ko", role: "img") %></span>
11
+ <%= check :ko %>
12
12
  <% end %>
13
13
  </p>
14
14
  <ul class="vertical menu">
@@ -19,11 +19,11 @@
19
19
  <% props.files.each do |file, md5| %>
20
20
  <li>
21
21
  <%= file %>
22
- <% if valid?(props.spec, file) %>
23
- <span class="text-success"><%= icon("check", class: "icon", aria_label: "ok", role: "img") %></span>
24
- <% else %>
25
- <span class="text-alert"><%= icon("x", class: "icon", aria_label: "ko", role: "img") %></span>
26
- <% end %>
22
+ <% if valid?(props.spec, file) %>
23
+ <%= check :ok %>
24
+ <% else %>
25
+ <%= check :ko %>
26
+ <% end %>
27
27
  </li>
28
28
  <% end %>
29
29
  </ul>
@@ -31,5 +31,47 @@
31
31
  </li>
32
32
  <% end %>
33
33
  </ul>
34
+ <ul class="vertical menu heads">
35
+ <li>
36
+ <strong><%= t ".head_tags" %></strong>
37
+ <ul class="vertical menu">
38
+ <% {
39
+ CSS: "//link[@rel='stylesheet'][contains(@href,'decidim_awesome')]",
40
+ JavaScript: "//script[contains(@src,'decidim_awesome')]"
41
+ }.each do |part, xpath| %>
42
+ <li>
43
+ <%= part %>
44
+ <% if head.xpath(xpath).count > 0 %>
45
+ <%= check :ok %>
46
+ <% else %>
47
+ <%= check :ko %>
48
+ <p class="help-text"><%= t ".errors.#{part}" %>:</p>
49
+ <code class="help-text code-block"><%= head_addons(part) %></code>
50
+ <% end %>
51
+ </li>
52
+ <% end %>
53
+ </ul>
54
+ </li>
55
+ <li>
56
+ <strong><%= t ".admin_head_tags" %></strong>
57
+ <ul class="vertical menu">
58
+ <% {
59
+ CSS: "//link[@rel='stylesheet'][contains(@href,'decidim_awesome/admin')]",
60
+ JavaScript: "//script[contains(@src,'decidim_awesome/admin')]"
61
+ }.each do |part, xpath| %>
62
+ <li>
63
+ <%= part %>
64
+ <% if admin_head.xpath(xpath).count > 0 %>
65
+ <%= check :ok %>
66
+ <% else %>
67
+ <%= check :ko %>
68
+ <p class="help-text"><%= t ".errors.#{part}" %>:</p>
69
+ <code class="help-text code-block"><%= admin_addons(part) %></code>
70
+ <% end %>
71
+ </li>
72
+ <% end %>
73
+ </ul>
74
+ </li>
75
+ </ul>
34
76
  </div>
35
77
  </div>
@@ -0,0 +1,28 @@
1
+ <div class="row column decidim_awesome-form">
2
+ <% if config_enabled? :scoped_styles %>
3
+ <p class="help-text"><%= t("help.scoped_styles", scope: "decidim.decidim_awesome.admin.config.form") %></p>
4
+ <p class="help-text">
5
+ <%= t("help.scoped_styles_variables", scope: "decidim.decidim_awesome.admin.config.form") %><br>
6
+ <% [:primary, :secondary, :success, :warning, :alert, :highlight, :highlight_alternative].each do |color| %>
7
+ var(--<%= color %>),
8
+ <% end %>
9
+ </p>
10
+
11
+ <% form.object.scoped_styles&.each do |key, value| %>
12
+ <div class="scoped-style" data-key="<%= key %>">
13
+ <%= label_tag :scoped_styles do %>
14
+ <%= t("config.scoped_styles", scope: "activemodel.attributes", id: key) %>
15
+ <%= link_to t(".remove"), decidim_admin_decidim_awesome.destroy_scoped_style_path(key: key), method: :post, class: "float-right", data: { confirm: t(".sure_to_remove") } %>
16
+ <% end %>
17
+ <%= text_area_tag key, value, name: "config[scoped_styles][#{key}]", rows: 5 %>
18
+ <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: "scoped_style_#{key}", constraints: constraints_for("scoped_style_#{key}") }) %>
19
+ </div>
20
+ <% end %>
21
+
22
+ <%= link_to t(".new"), decidim_admin_decidim_awesome.new_scoped_style_path, method: :post %>
23
+
24
+ <% end %>
25
+ </div>
26
+
27
+
28
+ <%= javascript_include_tag "decidim/decidim_awesome/admin/form_exit_warn" %>
@@ -1,4 +1,4 @@
1
- <%= decidim_form_for(@form, method: :patch, url: decidim_admin_decidim_awesome.config_path(params[:var])) do |f| %>
1
+ <%= decidim_form_for(@form, method: :patch, url: decidim_admin_decidim_awesome.config_path(params[:var]), html: { class: "awesome-edit-config" }, data: { "safe-path" => decidim_admin_decidim_awesome.config_path(params[:var]) }) do |f| %>
2
2
  <div class="card">
3
3
  <div class="card-divider">
4
4
  <h2 class="card-title"><%= t(".title", setting: params[:var]) %></h2>
@@ -1,7 +1,12 @@
1
+ <%= announcement = render(partial: "decidim/shared/component_announcement") %>
2
+
1
3
  <%= stylesheet_link_tag "decidim/decidim_awesome/awesome_iframe/iframe" %>
2
4
 
3
5
  <style rel="stylesheet" type="text/css">
4
- <%= ".wrapper { padding: 0; }" if remove_margins? %>
6
+ <% if remove_margins? %>
7
+ <%= ".wrapper { padding-left: 0;padding-right: 0;padding-bottom: 0; }" %>
8
+ <%= ".wrapper { padding-top: 0; }" unless announcement.present? %>
9
+ <% end %>
5
10
  </style>
6
11
 
7
12
  <div class="awesome-iframe<%= " row" if viewport_width? %>">
@@ -1,58 +1,80 @@
1
1
  <%= render partial: "decidim/shared/component_announcement" %>
2
2
 
3
- <%= dynamic_map_for map_components do %>
3
+ <%= awesome_map_for map_components do %>
4
4
 
5
- <template id="marker-proposal-popup">
5
+ <script id="legacy-marker-proposal-popup" type="text/x-jsrender">
6
6
  <div class="map-info__content">
7
- <h3>${title}</h3>
7
+ <h3>{{>title}}</h3>
8
8
  <div id="bodyContent">
9
- <p>{{html body}}</p>
9
+ <p>{{:body}}</p>
10
10
  <div class="map__date-adress">
11
11
  <div class="address card__extra">
12
- <div class="address__icon">{{html icon}}</div>
12
+ <div class="address__icon">{{:icon}}</div>
13
13
  <div class="address__details">
14
- <span>${address}</span><br>
14
+ <span>{{>address}}</span><br>
15
15
  </div>
16
16
  </div>
17
17
  </div>
18
18
  <div class="map-info__button">
19
- <a href="${link}" class="button button--sc">
19
+ <a href="{{>link}}" class="button button--sc">
20
20
  <%= t(".view_proposal") %>
21
21
  </a>
22
22
  </div>
23
23
  </div>
24
24
  </div>
25
- </template>
25
+ </script>
26
+
27
+ <script id="marker-proposal-popup" type="text/x-jsrender">
28
+ <div class="map-info__content">
29
+ <h3>{{>title.translation}}</h3>
30
+ <div id="bodyContent">
31
+ <p>{{:body.translation}}</p>
32
+ <div class="map__date-adress">
33
+ <div class="address card__extra">
34
+ <div class="address__icon">{{:icon}}</div>
35
+ <div class="address__details">
36
+ <span>{{>address}}</span><br>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ <div class="map-info__button">
41
+ <a href="{{>link}}" class="button button--sc">
42
+ <%= t(".view_proposal") %>
43
+ </a>
44
+ </div>
45
+ </div>
46
+ </div>
47
+ </script>
26
48
 
27
- <template id="marker-meeting-popup">
49
+ <script id="marker-meeting-popup" type="text/x-jsrender">
28
50
  <div class="map-info__content">
29
- <h3>${title.translation}</h3>
51
+ <h3>{{>title.translation}}</h3>
30
52
  <div id="bodyContent">
31
- <p>{{html description.translation}}</p>
53
+ <p>{{:description.translation}}</p>
32
54
  <div class="map__date-adress">
33
55
  <div class="card__datetime">
34
56
  <div class="card__datetime__date">
35
- ${startTimeDay} <span class="card__datetime__month">${startTimeMonth} ${startTimeYear}</span>
57
+ {{>startTimeDay}} <span class="card__datetime__month">{{>startTimeMonth}} {{>startTimeYear}}</span>
36
58
  </div>
37
- <div class="card__datetime__time">${starTime}</div>
59
+ <div class="card__datetime__time">{{>starTime}}</div>
38
60
  </div>
39
61
  <div class="address card__extra">
40
- <div class="address__icon">{{html icon}}</div>
62
+ <div class="address__icon">{{:icon}}</div>
41
63
  <div class="address__details">
42
- <strong>{{html location.translation}}</strong><br>
43
- <span>${address}</span><br>
44
- <span>{{html locationHints.translation}}</span>
64
+ <strong>{{:location.translation}}</strong><br>
65
+ <span>{{>address}}</span><br>
66
+ <span>{{:locationHints.translation}}</span>
45
67
  </div>
46
68
  </div>
47
69
  </div>
48
70
  <div class="map-info__button">
49
- <a href="${link}" class="button button--sc">
71
+ <a href="{{>link}}" class="button button--sc">
50
72
  <%= t("decidim.meetings.meetings_map.view_meeting") %>
51
73
  </a>
52
74
  </div>
53
75
  </div>
54
76
  </div>
55
- </template>
77
+ </script>
56
78
 
57
79
  <%= stylesheet_link_tag "decidim/decidim_awesome/awesome_map/map" %>
58
80
  <style type="text/css">
@@ -70,5 +92,9 @@
70
92
  window.AwesomeMap = window.AwesomeMap || {};
71
93
  window.AwesomeMap.categories = <%= current_categories.to_json.html_safe %>;
72
94
  </script>
73
- <%= javascript_include_tag "decidim/decidim_awesome/awesome_map/map" %>
95
+ <% if version_prefix == "v0.23" %>
96
+ <%= javascript_include_tag "decidim/decidim_awesome/awesome_map/map" %>
97
+ <% else %>
98
+ <%= javascript_include_tag "decidim/decidim_awesome/awesome_map/legacy_map" %>
99
+ <% end %>
74
100
  <% end %>
@@ -16,6 +16,11 @@
16
16
  <%= aria_selected_link_to I18n.t("menu.surveys", scope: "decidim.decidim_awesome.admin"), decidim_admin_decidim_awesome.config_path(:surveys) %>
17
17
  </li>
18
18
  <% end %>
19
+ <% if config_enabled? :scoped_styles %>
20
+ <li <% if is_active_link?(decidim_admin_decidim_awesome.config_path(:styles)) %> class="is-active" <% end %>>
21
+ <%= aria_selected_link_to I18n.t("menu.styles", scope: "decidim.decidim_awesome.admin"), decidim_admin_decidim_awesome.config_path(:styles) %>
22
+ </li>
23
+ <% end %>
19
24
  <% if config_enabled? :allow_images_in_proposals %>
20
25
  <li <% if is_active_link?(decidim_admin_decidim_awesome.config_path(:proposals)) %> class="is-active" <% end %>>
21
26
  <%= aria_selected_link_to I18n.t("menu.proposals", scope: "decidim.decidim_awesome.admin"), decidim_admin_decidim_awesome.config_path(:proposals) %>
@@ -1,5 +1,5 @@
1
1
  <script>
2
- window.DecidimAwesome = <%= awesome_config.to_json.html_safe %>;
2
+ window.DecidimAwesome = <%= javascript_config_vars %>;
3
3
  window.DecidimAwesome.editor_uploader_path = "<%= decidim_decidim_awesome.editor_images_path %>";
4
4
  window.DecidimAwesome.texts = {
5
5
  "drag_and_drop_image": "<%= j t(".drag_and_drop_image") %>",
@@ -0,0 +1,3 @@
1
+ <style media="all">
2
+ <%= awesome_custom_styles %>
3
+ </style>
@@ -23,6 +23,7 @@
23
23
 
24
24
  <%= stylesheet_link_tag "decidim/decidim_awesome/application", media: "all" %>
25
25
  <%= stylesheet_link_tag(tenant_stylesheets, media: "all") if tenant_stylesheets %>
26
+ <%= render(partial: "layouts/decidim/decidim_awesome/custom_styles") if awesome_custom_styles %>
26
27
 
27
28
  <%= organization_colors %>
28
29
  <%= javascript_include_tag "decidim/confirm" %>