decidim-decidim_awesome 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -5
  3. data/Rakefile +6 -0
  4. data/app/assets/config/decidim_decidim_awesome_manifest.js +1 -0
  5. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_map.js.es6 +215 -0
  6. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/map.js.es6 +7 -18
  7. data/app/assets/javascripts/decidim/decidim_awesome/editors/quill_editor.js.es6 +1 -3
  8. data/app/awesome_overrides/presenters/decidim/proposals/proposal_presenter_override.rb +9 -2
  9. data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +29 -1
  10. data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +0 -2
  11. data/app/controllers/decidim/decidim_awesome/map_component/map_controller.rb +8 -1
  12. data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +4 -0
  13. data/app/helpers/decidim/decidim_awesome/map_helper.rb +27 -1
  14. data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +49 -7
  15. data/app/views/decidim/decidim_awesome/map_component/map/show.html.erb +6 -2
  16. data/app/views/{v0.21 → v0.23}/layouts/decidim/_head.html.erb +4 -0
  17. data/app/views/{v0.21 → v0.23}/layouts/decidim/admin/_header.html.erb +3 -0
  18. data/config/locales/en.yml +7 -0
  19. data/lib/decidim/decidim_awesome/awesome_helpers.rb +1 -3
  20. data/lib/decidim/decidim_awesome/checksums.yml +4 -4
  21. data/lib/decidim/decidim_awesome/test/layouts/decidim/_head.html.erb +2 -0
  22. data/lib/decidim/decidim_awesome/test/layouts/decidim/admin/_header.html.erb +3 -0
  23. data/lib/decidim/decidim_awesome/version.rb +3 -3
  24. metadata +19 -17
  25. data/app/helpers/decidim/decidim_awesome/application_helper.rb +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d9259114807c3c7f0dca652e83f99013ca524a6c68cdb4ece408de7efdaa6f8
4
- data.tar.gz: '0937b4bf68c2240a022d99e0b15f2bb05407134d3a71c05ee6d325500af06843'
3
+ metadata.gz: 3401b18b924106ad65b4545904014b5c853485f897dc194affaa00665b07fe40
4
+ data.tar.gz: 68f73b33b0b31dc4addbd5f3f6dfa68b90ee5cd5ef56fa6f0ed91ee58c96fb73
5
5
  SHA512:
6
- metadata.gz: 45c576b8359928d771d58f3b67a64ee4189ce36e7b252a08170abdd2b2eaccaf18754640cf7c9f591b0669b5b7335dc944330778e47c027e70b8d5833bdd21c5
7
- data.tar.gz: b993edbf892739c8379baeba8e745117895cb09cf453345976cf9be6909e333a3855af3ff365f0a2677f8012e2944893884996fa8a9dd97bd8709898c5ddbe08
6
+ metadata.gz: 770a318ee4b9e08018709b7526cad4365ec373b75b2083d92e851a6f2eeb8eeee0e7ef51ed515a44a247b4129a4c929313434f99927f1eaa398cd25350151ca4
7
+ data.tar.gz: 5d3085dab5205c222eb52c57258b9cbdef9dfea5f1fa8a946700b40da53dea3d8514311672a48976def5a59408d52fd429f8864713361bbd68a97f5146e451db
data/README.md CHANGED
@@ -121,7 +121,7 @@ Some things in the road-map:
121
121
  Add this line to your application's Gemfile:
122
122
 
123
123
  ```ruby
124
- gem "decidim-decidim_awesome", "~> 0.5.1"
124
+ gem "decidim-decidim_awesome", "~> 0.6.0"
125
125
  ```
126
126
 
127
127
  And then execute:
@@ -135,9 +135,9 @@ bundle exec rails db:migrate
135
135
  Depending on your Decidim version, choose the corresponding Awesome version to ensure compatibility:
136
136
 
137
137
  | Awesome version | Compatible Decidim versions |
138
- |---|---|---|---|---|
138
+ |---|---|
139
139
  | 0.5.x | 0.21.x, 0.22.x |
140
-
140
+ | 0.6.x | 0.22.x, 0.23.x |
141
141
 
142
142
  ## Configuration
143
143
 
@@ -246,7 +246,7 @@ DATABASE_USERNAME=<username> DATABASE_PASSWORD=<password> bundle exec rspec
246
246
 
247
247
  However, this project also make use of the gem [Appraisals](https://github.com/thoughtbot/appraisal) in order to test againts several versions of Decidim. The idea is to suport same supported versions of Decidim.
248
248
 
249
- You can run run all tests againts all Decidim versions by using:
249
+ You can run run all tests against all Decidim versions by using:
250
250
  ```bash
251
251
  bundle exec appraisal install
252
252
  DATABASE_USERNAME=<username> DATABASE_PASSWORD=<password> bundle exec rake test_app
@@ -282,7 +282,7 @@ Appraisal uses custom gems for testing in the folder `gemfiles`, these gemfiles
282
282
  bundle exec appraisal install
283
283
  ```
284
284
 
285
- To update the Appraisal definitions maually do the following:
285
+ To update the Appraisal definitions manually do the following:
286
286
 
287
287
  ```
288
288
  cd gemfiles
data/Rakefile CHANGED
@@ -20,6 +20,11 @@ def copy_themes
20
20
  FileUtils.cp_r "lib/decidim/decidim_awesome/test/themes", "spec/decidim_dummy_app/app/assets/themes", verbose: true
21
21
  end
22
22
 
23
+ def copy_headers
24
+ FileUtils.mkdir_p "spec/decidim_dummy_app/app/views/v0.11", verbose: true
25
+ FileUtils.cp_r "lib/decidim/decidim_awesome/test/layouts", "spec/decidim_dummy_app/app/views/v0.11/layouts", verbose: true
26
+ end
27
+
23
28
  desc "copy test theme files"
24
29
  task :copy_themes do
25
30
  copy_themes
@@ -30,6 +35,7 @@ task test_app: "decidim:generate_external_test_app" do
30
35
  ENV["RAILS_ENV"] = "test"
31
36
  install_module("spec/decidim_dummy_app")
32
37
  copy_themes
38
+ copy_headers
33
39
  end
34
40
 
35
41
  desc "Generates a development app."
@@ -1,2 +1,3 @@
1
1
  // = link decidim/decidim_awesome/application.js
2
+ // = link decidim/decidim_awesome/awesome_map/legacy_map.js
2
3
  // = link decidim/decidim_awesome/awesome_map/map.js
@@ -0,0 +1,215 @@
1
+ // = require decidim/map
2
+ // = require leaflet.featuregroup.subgroup
3
+ // = require decidim/decidim_awesome/awesome_map/categories
4
+ // = require decidim/decidim_awesome/awesome_map/proposals
5
+ // = require decidim/decidim_awesome/awesome_map/meetings
6
+ // = require_self
7
+
8
+ ((exports) => {
9
+ const { fetchProposals, fetchMeetings, getCategory } = exports.AwesomeMap;
10
+
11
+ const collapsedMenu = $("#map").data("collapsed");
12
+ const components = $("#map").data("components");
13
+ const popupMeetingTemplateId = "marker-meeting-popup";
14
+ const popupProposalTemplateId = "marker-proposal-popup";
15
+
16
+ const cluster = L.markerClusterGroup();
17
+ const amendments = [];
18
+
19
+ const layers = {};
20
+
21
+ const control = L.control.layers(null, null, {
22
+ position: 'topleft',
23
+ sortLayers: false,
24
+ collapsed: collapsedMenu,
25
+ // hideSingleBase: true
26
+ });
27
+ const allMarkers = [];
28
+
29
+ const drawMarker = (element, marker, component) => {
30
+ let tmpl = component.type === "proposals" ? popupProposalTemplateId : popupMeetingTemplateId,
31
+ node = document.createElement("div");
32
+
33
+ $.tmpl($(`#${tmpl}`), element).appendTo(node);
34
+
35
+ marker.bindPopup(node, {
36
+ maxwidth: 640,
37
+ minWidth: 500,
38
+ keepInView: true,
39
+ className: "map-info"
40
+ }).openPopup();
41
+
42
+ allMarkers.push({
43
+ marker: marker,
44
+ component: component,
45
+ element: element
46
+ });
47
+
48
+ // Check if it has amendments, add it to a list
49
+ if(element.amendments && element.amendments.length) {
50
+ element.amendments.forEach((amendment) => {
51
+ amendments.push(amendment.emendation.id);
52
+ });
53
+ }
54
+ // Add to category layer
55
+ let cat = getCategory(element.category);
56
+ if(layers[cat.id]) {
57
+ marker.addTo(layers[cat.id].group);
58
+ // show category if hidden
59
+ const $label = $(`.awesome_map-category_${cat.id}`).closest("label");
60
+ const $parent = $(`.awesome_map-category_${cat.parent}`).closest("label");
61
+ $label.show();
62
+ // update number of items
63
+ $label.attr("title", parseInt($label.attr("title") || 0) + 1);
64
+ // show parent if apply
65
+ $parent.show();
66
+ $parent.attr("title", parseInt($parent.attr("title") || 0) + 1);
67
+ // update component stats
68
+ const $component = $(`#awesome_map-component-${component.id}`);
69
+ $component.attr("title", parseInt($component.attr("title") || 0) + 1);
70
+ }
71
+
72
+ return marker;
73
+ };
74
+
75
+ const loadElements = (map) => {
76
+ // legends
77
+ control.addTo(map);
78
+ cluster.addTo(map);
79
+
80
+ // Load markers
81
+ components.forEach((component) => {
82
+ if(component.type == "proposals") {
83
+ // add control layer for proposals
84
+ layers.proposals = {
85
+ label: `<span id="awesome_map-component-${component.id}" title="0">${component.name || window.DecidimAwesome.texts.proposals}</span>`,
86
+ group: L.featureGroup.subGroup(cluster)
87
+ };
88
+ control.addOverlay(layers.proposals.group, layers.proposals.label);
89
+ layers.proposals.group.addTo(map);
90
+
91
+ // add control layer for amendments if any
92
+ if(component.amendments) {
93
+ layers.amendments = {
94
+ label: `<span id="awesome_map-component-${component.d}" title="0">${window.DecidimAwesome.texts.amendments}</span>`,
95
+ group: L.featureGroup.subGroup(cluster)
96
+ }
97
+ control.addOverlay(layers.amendments.group, layers.amendments.label);
98
+ layers.amendments.group.addTo(map);
99
+ }
100
+
101
+ fetchProposals(component, '', (element, marker) => {
102
+ drawMarker(element, marker, component).addTo(layers.proposals.group);
103
+ }, () => {
104
+ // finall call
105
+ map.fitBounds(cluster.getBounds(), { padding: [50, 50] });
106
+ allMarkers.forEach((item) => {
107
+ // add marker to amendments layers if it's an amendment
108
+ if(amendments.find((a) => a == item.element.id)) {
109
+ item.marker.removeFrom(layers.proposals.group);
110
+ item.marker.addTo(layers.amendments.group);
111
+ }
112
+ });
113
+ });
114
+ }
115
+
116
+ if(component.type == "meetings") {
117
+ // add control layer for meetings
118
+ layers.meetings = {
119
+ label: `<span id="awesome_map-component-${component.id}" title="0">${component.name || window.DecidimAwesome.texts.meetings}</span>`,
120
+ group: L.featureGroup.subGroup(cluster)
121
+ };
122
+ control.addOverlay(layers.meetings.group, layers.meetings.label);
123
+ layers.meetings.group.addTo(map);
124
+
125
+ fetchMeetings(component, '', (element, marker) => {
126
+ drawMarker(element, marker, component).addTo(layers.meetings.group);
127
+ }, () => {
128
+ map.fitBounds(cluster.getBounds(), { padding: [50, 50] });
129
+ });
130
+ }
131
+ });
132
+
133
+
134
+ // add categories control layers
135
+ if(window.AwesomeMap.categories.length) {
136
+ let lastLayer = layers[Object.keys(layers)[Object.keys(layers).length - 1]];
137
+ // Add Categories "title"
138
+ if(lastLayer) {
139
+ lastLayer.label = `${lastLayer.label}<hr><b>${window.DecidimAwesome.texts.categories}</b>`;
140
+ control.removeLayer(lastLayer.group);
141
+ control.addOverlay(lastLayer.group, lastLayer.label);
142
+ }
143
+
144
+ window.AwesomeMap.categories.forEach((category) => {
145
+ // add control layer for this category
146
+ layers[category.id] = {
147
+ label: `<i class="awesome_map-category_${category.id}"></i> ${category.name}`,
148
+ group: L.featureGroup.subGroup(cluster)
149
+ };
150
+ layers[category.id].group.addTo(map);
151
+ control.addOverlay(layers[category.id].group, layers[category.id].label);
152
+ // hide layer by default, it will be activated if there's any marker in it
153
+ setTimeout(() => {
154
+ $(`.awesome_map-category_${category.id}`).closest("label").hide();
155
+ });
156
+ });
157
+
158
+ // watch events for subcategories syncronitzation
159
+ const getCatFromClass = (name) => {
160
+ let id = name.match(/awesome_map-category_(\d+)/)
161
+ if(!id) return;
162
+ const cat = getCategory(id[1]);
163
+ if(!cat || !cat.name) return;
164
+
165
+ return cat;
166
+ };
167
+
168
+ const indeterminateInput = (id) => {
169
+ $('[class^="awesome_map-category_"]').parent().prev().prop("indeterminate", false);
170
+ if(id) {
171
+ let $input = $(`.awesome_map-category_${id}`).parent().prev();
172
+ if(!$input.prop("checked")) {
173
+ $input.prop("indeterminate", true);
174
+ }
175
+ }
176
+ };
177
+
178
+ map.on('overlayadd', (e) => {
179
+ const cat = getCatFromClass(e.name);
180
+ if(!cat) return;
181
+ // if it's a children, put the parent to indeterminate
182
+ indeterminateInput(cat.parent);
183
+ });
184
+
185
+ // on remove a parent category, remove all children
186
+ map.on('overlayremove', (e) => {
187
+ const cat = getCatFromClass(e.name);
188
+ if(!cat) return;
189
+ cat.children().forEach((c) => {
190
+ let $el = $(`.awesome_map-category_${c.id}`);
191
+ if($el.parent().prev().prop("checked")) {
192
+ $el.click();
193
+ }
194
+ });
195
+ });
196
+
197
+ }
198
+
199
+ };
200
+
201
+ // currentMap might not be loaded yet so let's delay a bit
202
+ // TODO: improve this
203
+ const waitMap = () => {
204
+ if(exports.Decidim && exports.Decidim.currentMap) {
205
+ loadElements(exports.Decidim.currentMap);
206
+ } else {
207
+ setTimeout(() => {
208
+ waitMap();
209
+ }, 100);
210
+ }
211
+ };
212
+
213
+ waitMap();
214
+
215
+ })(window);
@@ -1,4 +1,3 @@
1
- // = require decidim/map
2
1
  // = require leaflet.featuregroup.subgroup
3
2
  // = require decidim/decidim_awesome/awesome_map/categories
4
3
  // = require decidim/decidim_awesome/awesome_map/proposals
@@ -8,8 +7,8 @@
8
7
  ((exports) => {
9
8
  const { fetchProposals, fetchMeetings, getCategory } = exports.AwesomeMap;
10
9
 
11
- const collapsedMenu = $("#map").data("collapsed");
12
- const components = $("#map").data("components");
10
+ const collapsedMenu = $("#awesome-map").data("collapsed");
11
+ const components = $("#awesome-map").data("components");
13
12
  const popupMeetingTemplateId = "marker-meeting-popup";
14
13
  const popupProposalTemplateId = "marker-proposal-popup";
15
14
 
@@ -91,7 +90,7 @@
91
90
  // add control layer for amendments if any
92
91
  if(component.amendments) {
93
92
  layers.amendments = {
94
- label: `<span id="awesome_map-component-${component.d}" title="0">${window.DecidimAwesome.texts.amendment}/span>`,
93
+ label: `<span id="awesome_map-component-${component.d}" title="0">${window.DecidimAwesome.texts.amendments}</span>`,
95
94
  group: L.featureGroup.subGroup(cluster)
96
95
  }
97
96
  control.addOverlay(layers.amendments.group, layers.amendments.label);
@@ -116,7 +115,7 @@
116
115
  if(component.type == "meetings") {
117
116
  // add control layer for meetings
118
117
  layers.meetings = {
119
- label: `<span id="awesome_map-component-${component.id}" title="0">${component.name || window.DecidimAwesome.texts.meetings}/span>`,
118
+ label: `<span id="awesome_map-component-${component.id}" title="0">${component.name || window.DecidimAwesome.texts.meetings}</span>`,
120
119
  group: L.featureGroup.subGroup(cluster)
121
120
  };
122
121
  control.addOverlay(layers.meetings.group, layers.meetings.label);
@@ -198,18 +197,8 @@
198
197
 
199
198
  };
200
199
 
201
- // currentMap might not be loaded yet so let's delay a bit
202
- // TODO: improve this
203
- const waitMap = () => {
204
- if(exports.Decidim && exports.Decidim.currentMap) {
205
- loadElements(exports.Decidim.currentMap);
206
- } else {
207
- setTimeout(() => {
208
- waitMap();
209
- }, 100);
210
- }
211
- };
212
-
213
- waitMap();
200
+ $("#map").on("ready.decidim", (ev, map) => {
201
+ loadElements(map);
202
+ });
214
203
 
215
204
  })(window);
@@ -1,4 +1,3 @@
1
- // = require quill.min
2
1
  // = require image-upload.min
3
2
  // = require image-resize.min
4
3
  // = require inscrybmde.min.js
@@ -11,7 +10,7 @@
11
10
  exports.DecidimAwesome = exports.DecidimAwesome || {};
12
11
 
13
12
  // Redefines Quill editor with images
14
- if(exports.DecidimAwesome.allow_images_in_full_editor || exports.DecidimAwesome.allow_images_in_small_editor) {
13
+ if(exports.DecidimAwesome.allow_images_in_full_editor || exports.DecidimAwesome.allow_images_in_small_editor || exports.DecidimAwesome.use_markdown_editor) {
15
14
 
16
15
  const quillFormats = ["bold", "italic", "link", "underline", "header", "list", "video", "image"];
17
16
 
@@ -54,7 +53,6 @@
54
53
  toolbar: quillToolbar
55
54
  };
56
55
  const $input = $(container).siblings('input[type="hidden"]');
57
- // https://github.com/decidim/decidim/pull/6422
58
56
  container.innerHTML = $input.val() || "";
59
57
  const token = $( 'meta[name="csrf-token"]' ).attr( 'content' );
60
58
 
@@ -3,8 +3,15 @@
3
3
  # Tune Proposal presenter to use markdown if configured
4
4
  Decidim::Proposals::ProposalPresenter.class_eval do
5
5
  def body(links: false, extras: true, strip_tags: false)
6
- text = proposal.body
7
- text = strip_tags(text) if strip_tags
6
+ if respond_to? :translated_attribute
7
+ text = translated_attribute(proposal.body)
8
+
9
+ text = strip_tags(sanitize_text(text)) if strip_tags
10
+ else
11
+ # TODO: remove when 0.22 is diched
12
+ text = proposal.body
13
+ text = strip_tags(text) if strip_tags
14
+ end
8
15
 
9
16
  renderer = Decidim::ContentRenderers::HashtagRenderer.new(text)
10
17
  text = renderer.render(links: links, extras: extras).html_safe
@@ -12,10 +12,18 @@ module Decidim
12
12
 
13
13
  layout "decidim/admin/decidim_awesome"
14
14
 
15
- helper_method :overrides, :valid?, :decidim_version, :decidim_version_valid?
15
+ helper_method :overrides, :valid?, :decidim_version, :decidim_version_valid?, :head, :admin_head, :head_addons, :admin_addons
16
16
 
17
17
  private
18
18
 
19
+ def head
20
+ @head ||= Nokogiri::HTML(render_to_string(partial: "layouts/decidim/head"))
21
+ end
22
+
23
+ def admin_head
24
+ @admin_head = Nokogiri::HTML(render_to_string(partial: "layouts/decidim/admin/header"))
25
+ end
26
+
19
27
  def overrides
20
28
  SystemChecker.to_h
21
29
  end
@@ -31,6 +39,26 @@ module Decidim
31
39
  def decidim_version_valid?
32
40
  Gem::Dependency.new("", DecidimAwesome::COMPAT_DECIDIM_VERSION).match?("", decidim_version)
33
41
  end
42
+
43
+ def head_addons(part)
44
+ case part
45
+ when :CSS
46
+ ['<%= stylesheet_link_tag "decidim/decidim_awesome/application", media: "all" %>',
47
+ '<%= stylesheet_link_tag(tenant_stylesheets, media: "all") if tenant_stylesheets %>'].join("\n")
48
+ when :JavaScript
49
+ ['<%= render partial: "layouts/decidim/decidim_awesome/awesome_config" %>',
50
+ '<%= javascript_include_tag "decidim/decidim_awesome/application" %>'].join("\n")
51
+ end
52
+ end
53
+
54
+ def admin_addons(part)
55
+ case part
56
+ when :CSS
57
+ '<%= stylesheet_link_tag "decidim/decidim_awesome/admin", media: "all" %>'
58
+ when :JavaScript
59
+ '<%= javascript_include_tag "decidim/decidim_awesome/admin" %>'
60
+ end
61
+ end
34
62
  end
35
63
  end
36
64
  end
@@ -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
@@ -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
@@ -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,33 @@
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
+ }
28
+ content_tag(:div, map, map_html_options)
29
+ end
30
+
31
+ # TODO: remove when 0.22 support is diched
32
+ def legacy_map_for(components)
7
33
  return if Decidim.geocoder.blank?
8
34
 
9
35
  map_html_options = {
@@ -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>
@@ -1,6 +1,6 @@
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
5
  <template id="marker-proposal-popup">
6
6
  <div class="map-info__content">
@@ -70,5 +70,9 @@
70
70
  window.AwesomeMap = window.AwesomeMap || {};
71
71
  window.AwesomeMap.categories = <%= current_categories.to_json.html_safe %>;
72
72
  </script>
73
- <%= javascript_include_tag "decidim/decidim_awesome/awesome_map/map" %>
73
+ <% if version_prefix == "v0.23" %>
74
+ <%= javascript_include_tag "decidim/decidim_awesome/awesome_map/map" %>
75
+ <% else %>
76
+ <%= javascript_include_tag "decidim/decidim_awesome/awesome_map/legacy_map" %>
77
+ <% end %>
74
78
  <% end %>
@@ -19,16 +19,20 @@
19
19
 
20
20
  <%= favicon %>
21
21
  <%= stylesheet_link_tag "application", media: "all" %>
22
+ <%= invisible_captcha_styles %>
22
23
 
23
24
  <%= stylesheet_link_tag "decidim/decidim_awesome/application", media: "all" %>
24
25
  <%= stylesheet_link_tag(tenant_stylesheets, media: "all") if tenant_stylesheets %>
25
26
 
26
27
  <%= organization_colors %>
28
+ <%= javascript_include_tag "decidim/confirm" %>
27
29
  <%= javascript_include_tag "application" %>
28
30
  <%= foundation_datepicker_locale_tag %>
29
31
 
30
32
  <%= render partial: "layouts/decidim/head_extra" %>
31
33
  <%== current_organization.header_snippets if Decidim.enable_html_header_snippets %>
34
+ <%= snippets.display(:head) %>
35
+ <%= content_for :header_snippets %>
32
36
 
33
37
  <%= render partial: "layouts/decidim/decidim_awesome/awesome_config" %>
34
38
  <%= javascript_include_tag "decidim/decidim_awesome/application" %>
@@ -1,7 +1,10 @@
1
1
  <meta name="viewport" content="width=device-width, initial-scale=1">
2
2
  <%= csrf_meta_tags %>
3
3
  <%= stylesheet_link_tag "decidim/admin/application", media: "all" %>
4
+ <%= javascript_include_tag "decidim/confirm" %>
4
5
  <%= javascript_include_tag "decidim/admin/application" %>
6
+ <%= organization_colors %>
7
+ <%= snippets.display(:head) %>
5
8
 
6
9
  <%= render partial: "layouts/decidim/decidim_awesome/awesome_config" %>
7
10
 
@@ -59,10 +59,17 @@ en:
59
59
  admin:
60
60
  checks:
61
61
  index:
62
+ admin_head_tags: Awesome tags included in the admin application header
62
63
  decidim-admin: From Admin module
63
64
  decidim-core: From Core module
64
65
  decidim-proposals: From Proposals module
65
66
  decidim_version: Decidim version %{version}
67
+ errors:
68
+ CSS: Head does not contain the required <link> stylesheet entries. To
69
+ solve it, you can manually add it to your custom _head.html.erb
70
+ JavaScript: Head does not contain the required <script> Javascript entries.
71
+ To solve it, you can manually add it to your custom admin/_header.html.erb
72
+ head_tags: Awesome tags included in the application header
66
73
  title: System compatibility checks
67
74
  config:
68
75
  constraints:
@@ -46,9 +46,7 @@ module Decidim
46
46
  end
47
47
 
48
48
  def version_prefix
49
- return "v0.21" if Decidim.version.start_with? "0.21"
50
-
51
- "v0.22"
49
+ "v#{Decidim.version[0..3]}"
52
50
  end
53
51
  end
54
52
  end
@@ -1,15 +1,15 @@
1
1
  decidim-admin:
2
2
  /app/views/layouts/decidim/admin/_header.html.erb:
3
- decidim-0.21: 6f0c010b1dcf912be1b3e0ff9f156026
4
3
  decidim-0.22: 6af51ec6b8a760b0ee6e00a7834f5f9a
4
+ decidim-0.23: 45f0e15f1b02a1c1a73b1a2184fd55af
5
5
  decidim-core:
6
6
  /app/views/layouts/decidim/_head.html.erb:
7
- decidim-0.21: b261c55492d047ba730eed8b39be0304
8
7
  decidim-0.22: bf16a58cd9e6d3f73e6875ff3d0b1e48
8
+ decidim-0.23: e7f5eea07e884665474948ea750fc720
9
9
  /app/assets/javascripts/decidim/editor.js.es6:
10
- decidim-0.21: 797d0ec1c9e79453cf6718f82d2fdd27
11
10
  decidim-0.22: 797d0ec1c9e79453cf6718f82d2fdd27
11
+ decidim-0.23: cb059b8ff0ffc62c67eb99d8d7a6637b
12
12
  decidim-proposals:
13
13
  /app/presenters/decidim/proposals/proposal_presenter.rb:
14
- decidim-0.21: d7a6e1e55613de8949ace284307a7674
15
14
  decidim-0.22: 7d60c8310d7fa4e38d9a27080c22b12c
15
+ decidim-0.23: 437c0c25151f605401a4f14d090ba5ea
@@ -0,0 +1,2 @@
1
+ <%= stylesheet_link_tag "application", media: "all" %>
2
+ <%= javascript_include_tag "application" %>
@@ -0,0 +1,3 @@
1
+ <%= stylesheet_link_tag "decidim/admin/application", media: "all" %>
2
+ <%= javascript_include_tag "decidim/admin/application" %>
3
+
@@ -3,8 +3,8 @@
3
3
  module Decidim
4
4
  # This holds the decidim-decidim_awesome version.
5
5
  module DecidimAwesome
6
- VERSION = "0.5.1"
7
- COMPAT_DECIDIM_VERSION = [">= 0.21.0", "< 0.23"].freeze
8
- DECIDIM_VERSION = "0.22"
6
+ VERSION = "0.6.0"
7
+ COMPAT_DECIDIM_VERSION = [">= 0.22.0", "< 0.24"].freeze
8
+ DECIDIM_VERSION = "0.23.1"
9
9
  end
10
10
  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.5.1
4
+ version: 0.6.0
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: 2020-11-17 00:00:00.000000000 Z
11
+ date: 2020-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim-admin
@@ -16,40 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.21.0
19
+ version: 0.22.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '0.23'
22
+ version: '0.24'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.21.0
29
+ version: 0.22.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '0.23'
32
+ version: '0.24'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: decidim-core
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 0.21.0
39
+ version: 0.22.0
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: '0.23'
42
+ version: '0.24'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 0.21.0
49
+ version: 0.22.0
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '0.23'
52
+ version: '0.24'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: redcarpet
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -84,20 +84,20 @@ dependencies:
84
84
  requirements:
85
85
  - - ">="
86
86
  - !ruby/object:Gem::Version
87
- version: 0.21.0
87
+ version: 0.22.0
88
88
  - - "<"
89
89
  - !ruby/object:Gem::Version
90
- version: '0.23'
90
+ version: '0.24'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: 0.21.0
97
+ version: 0.22.0
98
98
  - - "<"
99
99
  - !ruby/object:Gem::Version
100
- version: '0.23'
100
+ version: '0.24'
101
101
  description: Some usability and UX tweaks for Decidim.
102
102
  email:
103
103
  - ivan@platoniq.net
@@ -119,6 +119,7 @@ files:
119
119
  - app/assets/javascripts/decidim/decidim_awesome/application.js
120
120
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/api_fetcher.js.es6
121
121
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/categories.js.es6
122
+ - app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_map.js.es6
122
123
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/map.js.es6
123
124
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/meetings.js.es6
124
125
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/proposals.js.es6
@@ -158,7 +159,6 @@ files:
158
159
  - app/forms/decidim/decidim_awesome/admin/intergram_form.rb
159
160
  - app/forms/decidim/decidim_awesome/editor_image_form.rb
160
161
  - app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb
161
- - app/helpers/decidim/decidim_awesome/application_helper.rb
162
162
  - app/helpers/decidim/decidim_awesome/map_helper.rb
163
163
  - app/models/decidim/decidim_awesome/application_record.rb
164
164
  - app/models/decidim/decidim_awesome/awesome_config.rb
@@ -185,10 +185,10 @@ files:
185
185
  - app/views/layouts/decidim/admin/decidim_awesome.html.erb
186
186
  - app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb
187
187
  - app/views/layouts/decidim/decidim_awesome/_intergram_widget.html.erb
188
- - app/views/v0.21/layouts/decidim/_head.html.erb
189
- - app/views/v0.21/layouts/decidim/admin/_header.html.erb
190
188
  - app/views/v0.22/layouts/decidim/_head.html.erb
191
189
  - app/views/v0.22/layouts/decidim/admin/_header.html.erb
190
+ - app/views/v0.23/layouts/decidim/_head.html.erb
191
+ - app/views/v0.23/layouts/decidim/admin/_header.html.erb
192
192
  - config/i18n-tasks.yml
193
193
  - config/locales/ca.yml
194
194
  - config/locales/cs.yml
@@ -219,6 +219,8 @@ files:
219
219
  - lib/decidim/decidim_awesome/map_component/engine.rb
220
220
  - lib/decidim/decidim_awesome/system_checker.rb
221
221
  - lib/decidim/decidim_awesome/test/factories.rb
222
+ - lib/decidim/decidim_awesome/test/layouts/decidim/_head.html.erb
223
+ - lib/decidim/decidim_awesome/test/layouts/decidim/admin/_header.html.erb
222
224
  - lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb
223
225
  - lib/decidim/decidim_awesome/test/themes/css.lvh.me.css
224
226
  - lib/decidim/decidim_awesome/test/themes/erb.lvh.me.scss.erb
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module DecidimAwesome
5
- # Custom helpers, scoped to the decidim_awesome engine.
6
- #
7
- module ApplicationHelper
8
- end
9
- end
10
- end