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.
- checksums.yaml +4 -4
- data/README.md +5 -5
- data/Rakefile +6 -0
- data/app/assets/config/decidim_decidim_awesome_manifest.js +1 -0
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_map.js.es6 +215 -0
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/map.js.es6 +7 -18
- data/app/assets/javascripts/decidim/decidim_awesome/editors/quill_editor.js.es6 +1 -3
- data/app/awesome_overrides/presenters/decidim/proposals/proposal_presenter_override.rb +9 -2
- data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +29 -1
- data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +0 -2
- data/app/controllers/decidim/decidim_awesome/map_component/map_controller.rb +8 -1
- data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +4 -0
- data/app/helpers/decidim/decidim_awesome/map_helper.rb +27 -1
- data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +49 -7
- data/app/views/decidim/decidim_awesome/map_component/map/show.html.erb +6 -2
- data/app/views/{v0.21 → v0.23}/layouts/decidim/_head.html.erb +4 -0
- data/app/views/{v0.21 → v0.23}/layouts/decidim/admin/_header.html.erb +3 -0
- data/config/locales/en.yml +7 -0
- data/lib/decidim/decidim_awesome/awesome_helpers.rb +1 -3
- data/lib/decidim/decidim_awesome/checksums.yml +4 -4
- data/lib/decidim/decidim_awesome/test/layouts/decidim/_head.html.erb +2 -0
- data/lib/decidim/decidim_awesome/test/layouts/decidim/admin/_header.html.erb +3 -0
- data/lib/decidim/decidim_awesome/version.rb +3 -3
- metadata +19 -17
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3401b18b924106ad65b4545904014b5c853485f897dc194affaa00665b07fe40
|
4
|
+
data.tar.gz: 68f73b33b0b31dc4addbd5f3f6dfa68b90ee5cd5ef56fa6f0ed91ee58c96fb73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
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
|
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."
|
@@ -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.
|
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}
|
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
|
-
|
202
|
-
|
203
|
-
|
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
|
-
|
7
|
-
|
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
|
@@ -8,11 +8,18 @@ module Decidim
|
|
8
8
|
helper_method :map_components
|
9
9
|
|
10
10
|
def show
|
11
|
-
render :error
|
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
|
-
|
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
|
-
|
9
|
+
<%= check :ok %>
|
10
10
|
<% else %>
|
11
|
-
|
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
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
-
<%=
|
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
|
-
|
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
|
|
data/config/locales/en.yml
CHANGED
@@ -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:
|
@@ -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
|
@@ -3,8 +3,8 @@
|
|
3
3
|
module Decidim
|
4
4
|
# This holds the decidim-decidim_awesome version.
|
5
5
|
module DecidimAwesome
|
6
|
-
VERSION = "0.
|
7
|
-
COMPAT_DECIDIM_VERSION = [">= 0.
|
8
|
-
DECIDIM_VERSION = "0.
|
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.
|
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
|
+
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.
|
19
|
+
version: 0.22.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '0.
|
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.
|
29
|
+
version: 0.22.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '0.
|
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.
|
39
|
+
version: 0.22.0
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '0.
|
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.
|
49
|
+
version: 0.22.0
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '0.
|
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.
|
87
|
+
version: 0.22.0
|
88
88
|
- - "<"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: '0.
|
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.
|
97
|
+
version: 0.22.0
|
98
98
|
- - "<"
|
99
99
|
- !ruby/object:Gem::Version
|
100
|
-
version: '0.
|
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
|