decidim-decidim_awesome 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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