decidim-decidim_awesome 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE-AGPLv3.txt +661 -0
- data/README.md +307 -0
- data/Rakefile +51 -0
- data/app/assets/config/decidim_admin_decidim_awesome_manifest.css +3 -0
- data/app/assets/config/decidim_admin_decidim_awesome_manifest.js +1 -0
- data/app/assets/config/decidim_decidim_awesome_manifest.css +5 -0
- data/app/assets/config/decidim_decidim_awesome_manifest.js +2 -0
- data/app/assets/images/decidim/decidim_awesome/loading.gif +0 -0
- data/app/assets/images/decidim/decidim_awesome/platoniq-logo.png +0 -0
- data/app/assets/javascripts/decidim/decidim_awesome/admin.js +2 -0
- data/app/assets/javascripts/decidim/decidim_awesome/admin/constraints.js.es6 +54 -0
- data/app/assets/javascripts/decidim/decidim_awesome/application.js +4 -0
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/api_fetcher.js.es6 +38 -0
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/categories.js.es6 +25 -0
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/map.js.es6 +215 -0
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/meetings.js.es6 +129 -0
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/proposals.js.es6 +78 -0
- data/app/assets/javascripts/decidim/decidim_awesome/editors/markdown_view.js.es6 +12 -0
- data/app/assets/javascripts/decidim/decidim_awesome/editors/quill_editor.js.es6 +162 -0
- data/app/assets/javascripts/decidim/decidim_awesome/forms/autosave.js.es6 +90 -0
- data/app/assets/javascripts/decidim/decidim_awesome/proposals/images.js.es6 +25 -0
- data/app/assets/stylesheets/decidim/decidim_awesome/admin.scss +45 -0
- data/app/assets/stylesheets/decidim/decidim_awesome/admin/constraints.scss +37 -0
- data/app/assets/stylesheets/decidim/decidim_awesome/application.scss +8 -0
- data/app/assets/stylesheets/decidim/decidim_awesome/awesome_iframe/iframe.scss +10 -0
- data/app/assets/stylesheets/decidim/decidim_awesome/awesome_map/leaflet.scss.erb +9 -0
- data/app/assets/stylesheets/decidim/decidim_awesome/awesome_map/map.scss +66 -0
- data/app/assets/stylesheets/decidim/decidim_awesome/editors/markdown_editor.scss +17 -0
- data/app/assets/stylesheets/decidim/decidim_awesome/editors/markdown_view.scss +27 -0
- data/app/assets/stylesheets/decidim/decidim_awesome/editors/quill_editor.scss +7 -0
- data/app/assets/stylesheets/decidim/decidim_awesome/forms/autosave.scss +17 -0
- data/app/awesome_overrides/presenters/decidim/proposals/proposal_presenter_override.rb +31 -0
- data/app/commands/decidim/decidim_awesome/admin/create_constraint.rb +47 -0
- data/app/commands/decidim/decidim_awesome/admin/destroy_constraint.rb +31 -0
- data/app/commands/decidim/decidim_awesome/admin/update_config.rb +44 -0
- data/app/commands/decidim/decidim_awesome/admin/update_constraint.rb +44 -0
- data/app/commands/decidim/decidim_awesome/create_editor_image.rb +34 -0
- data/app/controllers/concerns/decidim/decidim_awesome/needs_awesome_config.rb +17 -0
- data/app/controllers/decidim/decidim_awesome/admin/application_controller.rb +21 -0
- data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +37 -0
- data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +44 -0
- data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +126 -0
- data/app/controllers/decidim/decidim_awesome/application_controller.rb +14 -0
- data/app/controllers/decidim/decidim_awesome/editor_images_controller.rb +50 -0
- data/app/controllers/decidim/decidim_awesome/iframe_component/application_controller.rb +15 -0
- data/app/controllers/decidim/decidim_awesome/iframe_component/iframe_controller.rb +33 -0
- data/app/controllers/decidim/decidim_awesome/map_component/application_controller.rb +15 -0
- data/app/controllers/decidim/decidim_awesome/map_component/map_controller.rb +31 -0
- data/app/forms/decidim/decidim_awesome/admin/config_form.rb +22 -0
- data/app/forms/decidim/decidim_awesome/admin/constraint_form.rb +20 -0
- data/app/forms/decidim/decidim_awesome/admin/intergram_form.rb +21 -0
- data/app/forms/decidim/decidim_awesome/editor_image_form.rb +16 -0
- data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +90 -0
- data/app/helpers/decidim/decidim_awesome/application_helper.rb +10 -0
- data/app/helpers/decidim/decidim_awesome/map_helper.rb +121 -0
- data/app/models/decidim/decidim_awesome/application_record.rb +10 -0
- data/app/models/decidim/decidim_awesome/awesome_config.rb +23 -0
- data/app/models/decidim/decidim_awesome/config_constraint.rb +13 -0
- data/app/models/decidim/decidim_awesome/editor_image.rb +24 -0
- data/app/permissions/decidim/decidim_awesome/permissions.rb +29 -0
- data/app/uploaders/decidim/decidim_awesome/image_uploader.rb +22 -0
- data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +35 -0
- data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +27 -0
- data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +20 -0
- data/app/views/decidim/decidim_awesome/admin/config/_form_livechat.html.erb +44 -0
- data/app/views/decidim/decidim_awesome/admin/config/_form_proposals.html.erb +12 -0
- data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +9 -0
- data/app/views/decidim/decidim_awesome/admin/config/_modal.html.erb +11 -0
- data/app/views/decidim/decidim_awesome/admin/config/show.html.erb +15 -0
- data/app/views/decidim/decidim_awesome/admin/constraints/_form.html.erb +56 -0
- data/app/views/decidim/decidim_awesome/admin/constraints/new.html.erb +14 -0
- data/app/views/decidim/decidim_awesome/admin/constraints/show.html.erb +14 -0
- data/app/views/decidim/decidim_awesome/iframe_component/iframe/show.html.erb +9 -0
- data/app/views/decidim/decidim_awesome/map_component/map/error.erb +7 -0
- data/app/views/decidim/decidim_awesome/map_component/map/show.html.erb +74 -0
- data/app/views/layouts/decidim/_head.html.erb +5 -0
- data/app/views/layouts/decidim/admin/_header.html.erb +5 -0
- data/app/views/layouts/decidim/admin/decidim_awesome.html.erb +47 -0
- data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +20 -0
- data/app/views/layouts/decidim/decidim_awesome/_intergram_widget.html.erb +16 -0
- data/app/views/v0.21/layouts/decidim/_head.html.erb +34 -0
- data/app/views/v0.21/layouts/decidim/admin/_header.html.erb +9 -0
- data/app/views/v0.22/layouts/decidim/_head.html.erb +36 -0
- data/app/views/v0.22/layouts/decidim/admin/_header.html.erb +11 -0
- data/config/i18n-tasks.yml +10 -0
- data/config/locales/ca.yml +125 -0
- data/config/locales/cs.yml +125 -0
- data/config/locales/en.yml +176 -0
- data/config/locales/es.yml +125 -0
- data/config/locales/fr.yml +125 -0
- data/config/locales/sv.yml +125 -0
- data/db/migrate/20200324170000_create_decidim_awesome_config.rb +16 -0
- data/db/migrate/20200324230936_create_awesome_editor_images.rb +14 -0
- data/db/migrate/20200403142257_create_decidim_awesome_config_constraints.rb +13 -0
- data/db/seeds.rb +27 -0
- data/lib/decidim/decidim_awesome.rb +110 -0
- data/lib/decidim/decidim_awesome/admin.rb +10 -0
- data/lib/decidim/decidim_awesome/admin_engine.rb +45 -0
- data/lib/decidim/decidim_awesome/awesome_helpers.rb +55 -0
- data/lib/decidim/decidim_awesome/checksums.yml +15 -0
- data/lib/decidim/decidim_awesome/config.rb +129 -0
- data/lib/decidim/decidim_awesome/content_renderers.rb +9 -0
- data/lib/decidim/decidim_awesome/content_renderers/markdown_renderer.rb +18 -0
- data/lib/decidim/decidim_awesome/context_analyzers.rb +11 -0
- data/lib/decidim/decidim_awesome/context_analyzers/component_analyzer.rb +38 -0
- data/lib/decidim/decidim_awesome/context_analyzers/participatory_space_analyzer.rb +31 -0
- data/lib/decidim/decidim_awesome/context_analyzers/request_analyzer.rb +97 -0
- data/lib/decidim/decidim_awesome/engine.rb +38 -0
- data/lib/decidim/decidim_awesome/iframe_component/component.rb +59 -0
- data/lib/decidim/decidim_awesome/iframe_component/engine.rb +23 -0
- data/lib/decidim/decidim_awesome/map_component/component.rb +74 -0
- data/lib/decidim/decidim_awesome/map_component/engine.rb +23 -0
- data/lib/decidim/decidim_awesome/system_checker.rb +63 -0
- data/lib/decidim/decidim_awesome/test/factories.rb +36 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +25 -0
- data/lib/decidim/decidim_awesome/test/themes/css.lvh.me.css +3 -0
- data/lib/decidim/decidim_awesome/test/themes/erb.lvh.me.scss.erb +2 -0
- data/lib/decidim/decidim_awesome/test/themes/scss.lvh.me.scss +1 -0
- data/lib/decidim/decidim_awesome/test/themes/test-theme/body.scss +4 -0
- data/lib/decidim/decidim_awesome/version.rb +10 -0
- data/vendor/assets/images/layers-2x.png +0 -0
- data/vendor/assets/images/layers.png +0 -0
- data/vendor/assets/images/marker-icon.png +0 -0
- data/vendor/assets/javascripts/codemirror-4.inline-attachment.js +89 -0
- data/vendor/assets/javascripts/form-storage.js +824 -0
- data/vendor/assets/javascripts/highlight.min.js +44 -0
- data/vendor/assets/javascripts/image-resize.min.js +1 -0
- data/vendor/assets/javascripts/image-upload.min.js +6 -0
- data/vendor/assets/javascripts/inline-attachment.js +399 -0
- data/vendor/assets/javascripts/inscrybmde.min.js +7 -0
- data/vendor/assets/javascripts/jquery.inline-attachment.js +66 -0
- data/vendor/assets/javascripts/leaflet.featuregroup.subgroup.js +6 -0
- data/vendor/assets/stylesheets/default.min.css +1 -0
- data/vendor/assets/stylesheets/foundation.min.css +1 -0
- data/vendor/assets/stylesheets/github.min.css +2 -0
- data/vendor/assets/stylesheets/inscrybmde.min.css +8 -0
- metadata +267 -0
@@ -0,0 +1,12 @@
|
|
1
|
+
// = require highlight.min.js
|
2
|
+
// = require_self
|
3
|
+
|
4
|
+
window.DecidimAwesome = window.DecidimAwesome || {};
|
5
|
+
|
6
|
+
if(window.DecidimAwesome.use_markdown_in_proposals) {
|
7
|
+
document.addEventListener('DOMContentLoaded', () => {
|
8
|
+
document.querySelectorAll('.awesome-markdown-editor pre code').forEach((block) => {
|
9
|
+
hljs.highlightBlock(block); // eslint-disable-line no-undef
|
10
|
+
});
|
11
|
+
});
|
12
|
+
}
|
@@ -0,0 +1,162 @@
|
|
1
|
+
// = require quill.min
|
2
|
+
// = require image-upload.min
|
3
|
+
// = require image-resize.min
|
4
|
+
// = require inscrybmde.min.js
|
5
|
+
// = require inline-attachment.js
|
6
|
+
// = require codemirror-4.inline-attachment.js
|
7
|
+
// = require jquery.inline-attachment.js
|
8
|
+
// = require_self
|
9
|
+
|
10
|
+
((exports) => {
|
11
|
+
exports.DecidimAwesome = exports.DecidimAwesome || {};
|
12
|
+
|
13
|
+
// Redefines Quill editor with images
|
14
|
+
if(exports.DecidimAwesome.allow_images_in_full_editor || exports.DecidimAwesome.allow_images_in_small_editor) {
|
15
|
+
|
16
|
+
const quillFormats = ["bold", "italic", "link", "underline", "header", "list", "video", "image"];
|
17
|
+
|
18
|
+
const createQuillEditor = (container) => {
|
19
|
+
const toolbar = $(container).data("toolbar");
|
20
|
+
const disabled = $(container).data("disabled");
|
21
|
+
|
22
|
+
let quillToolbar = [
|
23
|
+
["bold", "italic", "underline"],
|
24
|
+
[{ list: "ordered" }, { list: "bullet" }],
|
25
|
+
["link", "clean"]
|
26
|
+
];
|
27
|
+
|
28
|
+
let addImage = false;
|
29
|
+
|
30
|
+
if (toolbar === "full") {
|
31
|
+
quillToolbar = [
|
32
|
+
[{ header: [1, 2, 3, 4, 5, 6, false] }],
|
33
|
+
...quillToolbar
|
34
|
+
];
|
35
|
+
if(exports.DecidimAwesome.allow_images_in_full_editor) {
|
36
|
+
quillToolbar.push(["video", "image"]);
|
37
|
+
addImage = true;
|
38
|
+
} else {
|
39
|
+
quillToolbar.push(["video"]);
|
40
|
+
}
|
41
|
+
} else if (toolbar === "basic") {
|
42
|
+
if(exports.DecidimAwesome.allow_images_in_small_editor) {
|
43
|
+
quillToolbar.push(["video", "image"]);
|
44
|
+
addImage = true;
|
45
|
+
} else {
|
46
|
+
quillToolbar.push(["video"]);
|
47
|
+
}
|
48
|
+
} else if(exports.DecidimAwesome.allow_images_in_small_editor) {
|
49
|
+
quillToolbar.push(["image"]);
|
50
|
+
addImage = true;
|
51
|
+
}
|
52
|
+
|
53
|
+
let modules = {
|
54
|
+
toolbar: quillToolbar
|
55
|
+
};
|
56
|
+
const $input = $(container).siblings('input[type="hidden"]');
|
57
|
+
// https://github.com/decidim/decidim/pull/6422
|
58
|
+
container.innerHTML = $input.val() || "";
|
59
|
+
const token = $( 'meta[name="csrf-token"]' ).attr( 'content' );
|
60
|
+
|
61
|
+
if(addImage) {
|
62
|
+
modules.imageResize = {
|
63
|
+
modules: ["Resize", "DisplaySize"]
|
64
|
+
}
|
65
|
+
modules.imageUpload = {
|
66
|
+
url: exports.DecidimAwesome.editor_uploader_path, // server url. If the url is empty then the base64 returns
|
67
|
+
method: 'POST', // change query method, default 'POST'
|
68
|
+
name: 'image', // custom form name
|
69
|
+
withCredentials: false, // withCredentials
|
70
|
+
headers: { 'X-CSRF-Token': token }, // add custom headers, example { token: 'your-token'}
|
71
|
+
// personalize successful callback and call next function to insert new url to the editor
|
72
|
+
callbackOK: (serverResponse, next) => {
|
73
|
+
$(quill.getModule("toolbar").container).last().removeClass('editor-loading')
|
74
|
+
next(serverResponse.url);
|
75
|
+
},
|
76
|
+
// personalize failed callback
|
77
|
+
callbackKO: serverError => {
|
78
|
+
$(quill.getModule("toolbar").container).last().removeClass('editor-loading')
|
79
|
+
alert(serverError.message);
|
80
|
+
},
|
81
|
+
checkBeforeSend: (file, next) => {
|
82
|
+
$(quill.getModule("toolbar").container).last().addClass('editor-loading')
|
83
|
+
next(file); // go back to component and send to the server
|
84
|
+
}
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
const quill = new Quill(container, {
|
89
|
+
modules: modules,
|
90
|
+
formats: quillFormats,
|
91
|
+
theme: "snow"
|
92
|
+
});
|
93
|
+
|
94
|
+
if (disabled) {
|
95
|
+
quill.disable();
|
96
|
+
}
|
97
|
+
|
98
|
+
quill.on("text-change", () => {
|
99
|
+
const text = quill.getText();
|
100
|
+
|
101
|
+
// Triggers CustomEvent with the cursor position
|
102
|
+
// It is required in input_mentions.js
|
103
|
+
let event = new CustomEvent("quill-position", {
|
104
|
+
detail: quill.getSelection()
|
105
|
+
});
|
106
|
+
container.dispatchEvent(event);
|
107
|
+
|
108
|
+
if (text === "\n") {
|
109
|
+
$input.val("");
|
110
|
+
} else {
|
111
|
+
$input.val(quill.root.innerHTML);
|
112
|
+
}
|
113
|
+
});
|
114
|
+
|
115
|
+
if(addImage) {
|
116
|
+
const t = window.DecidimAwesome.texts["drag_and_drop_image"];
|
117
|
+
$(container).after(`<p class="help-text" style="margin-top:-1.5rem;">${t}</p>`);
|
118
|
+
}
|
119
|
+
};
|
120
|
+
|
121
|
+
const createMarkdownEditor = (container) => {
|
122
|
+
$(container).hide();
|
123
|
+
const t = window.DecidimAwesome.texts["drag_and_drop_image"];
|
124
|
+
const token = $( 'meta[name="csrf-token"]' ).attr( 'content' );
|
125
|
+
const $input = $(container).siblings('input[type="hidden"]');
|
126
|
+
const inscrybmde = new InscrybMDE({
|
127
|
+
element: $input[0],
|
128
|
+
spellChecker: false,
|
129
|
+
renderingConfig: {
|
130
|
+
codeSyntaxHighlighting: true
|
131
|
+
}
|
132
|
+
});
|
133
|
+
|
134
|
+
// Allow image upload
|
135
|
+
if(window.DecidimAwesome.allow_images_in_markdown_editor) {
|
136
|
+
$(inscrybmde.gui.statusbar).prepend(`<span class="help-text" style="float:left;margin:0;text-align:left;">${t}</span>`);
|
137
|
+
inlineAttachment.editors.codemirror4.attach(inscrybmde.codemirror, {
|
138
|
+
uploadUrl: window.DecidimAwesome.editor_uploader_path,
|
139
|
+
uploadFieldName: "image",
|
140
|
+
jsonFieldName: "url",
|
141
|
+
extraHeaders: { "X-CSRF-Token": token }
|
142
|
+
});
|
143
|
+
}
|
144
|
+
};
|
145
|
+
|
146
|
+
const quillEditor = () => {
|
147
|
+
$(".editor-container").each((idx, container) => {
|
148
|
+
if(exports.DecidimAwesome.use_markdown_editor) {
|
149
|
+
createMarkdownEditor(container);
|
150
|
+
} else {
|
151
|
+
createQuillEditor(container);
|
152
|
+
}
|
153
|
+
});
|
154
|
+
};
|
155
|
+
|
156
|
+
exports.Decidim = exports.Decidim || {};
|
157
|
+
exports.Decidim.quillEditor = quillEditor;
|
158
|
+
exports.Decidim.createQuillEditor = createQuillEditor;
|
159
|
+
exports.Decidim.createMarkdownEditor = createMarkdownEditor;
|
160
|
+
|
161
|
+
}
|
162
|
+
})(window);
|
@@ -0,0 +1,90 @@
|
|
1
|
+
// = require form-storage.js
|
2
|
+
// = require_self
|
3
|
+
|
4
|
+
$(() => {
|
5
|
+
window.DecidimAwesome = window.DecidimAwesome || {};
|
6
|
+
if (!window.DecidimAwesome.auto_save_forms) {
|
7
|
+
return;
|
8
|
+
}
|
9
|
+
|
10
|
+
const questionnaireId = window.DecidimAwesome.current_questionnaire;
|
11
|
+
if (!questionnaireId) {
|
12
|
+
// console.log("Not a questionnaire page")
|
13
|
+
return;
|
14
|
+
}
|
15
|
+
|
16
|
+
const storeId = `awesome_autosave:${questionnaireId}`;
|
17
|
+
const storeCheckboxesId = `awesome_autosave:checkboxes:${questionnaireId}`;
|
18
|
+
const $form = $('form.answer-questionnaire');
|
19
|
+
|
20
|
+
if (!$form.length) {
|
21
|
+
if(window.DecidimAwesome.questionnaire_answered) {
|
22
|
+
// console.log("Questionnaire already answered, remove any data saved");
|
23
|
+
window.localStorage.removeItem(storeId);
|
24
|
+
window.localStorage.removeItem(storeCheckboxesId);
|
25
|
+
}
|
26
|
+
// console.log("No forms here");
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
|
30
|
+
const store = new FormStorage(`#${$form.attr('id')}`, {
|
31
|
+
name: storeId,
|
32
|
+
ignores: [
|
33
|
+
// '[type="hidden"]',
|
34
|
+
'[name="utf8"]',
|
35
|
+
'[name="authenticity_token"]',
|
36
|
+
'[disabled]',
|
37
|
+
'[type="checkbox"]' // there are problems with matrix questions
|
38
|
+
],
|
39
|
+
});
|
40
|
+
|
41
|
+
const showMsg = (msg, error = false, default_time = 700) => {
|
42
|
+
const time = error ? 5000 : default_time;
|
43
|
+
const $div = $(`<div class="awesome_autosave-notice${error ? ' error' : ''}">${msg}</div>`)
|
44
|
+
.appendTo($form);
|
45
|
+
setTimeout(() => {
|
46
|
+
$div.fadeOut(500, () => {
|
47
|
+
$div.remove();
|
48
|
+
});
|
49
|
+
}, time);
|
50
|
+
};
|
51
|
+
|
52
|
+
if (!window.localStorage) {
|
53
|
+
showMsg(window.DecidimAwesome.texts.autosaved_error, true);
|
54
|
+
return;
|
55
|
+
}
|
56
|
+
|
57
|
+
if(window.localStorage.getItem(storeId)) {
|
58
|
+
showMsg(window.DecidimAwesome.texts.autosaved_retrieved, false, 5000);
|
59
|
+
}
|
60
|
+
|
61
|
+
// restore if available
|
62
|
+
store.apply();
|
63
|
+
// restore checkboxes
|
64
|
+
try {
|
65
|
+
let checkboxes = JSON.parse(window.localStorage.getItem(storeCheckboxesId));
|
66
|
+
for(let id in checkboxes) {
|
67
|
+
$("#" + id).prop("checked", checkboxes[id]);
|
68
|
+
}
|
69
|
+
} catch(e){
|
70
|
+
console.log("No checkboxes found");
|
71
|
+
}
|
72
|
+
// fire change items
|
73
|
+
$form.find('input, textarea, select').change();
|
74
|
+
|
75
|
+
const save = () => {
|
76
|
+
store.save();
|
77
|
+
// save checkbox manually
|
78
|
+
let checkboxes = {};
|
79
|
+
$form.find('input[type="checkbox"]').each((index, el) => {
|
80
|
+
checkboxes[el.id] = el.checked;
|
81
|
+
});
|
82
|
+
window.localStorage.setItem(storeCheckboxesId, JSON.stringify(checkboxes));
|
83
|
+
showMsg(window.DecidimAwesome.texts.autosaved_success);
|
84
|
+
};
|
85
|
+
|
86
|
+
// save changes when modifications
|
87
|
+
$form.find('input, textarea, select').on('change', () => {
|
88
|
+
save();
|
89
|
+
});
|
90
|
+
});
|
@@ -0,0 +1,25 @@
|
|
1
|
+
// = require_self
|
2
|
+
|
3
|
+
$(() => {
|
4
|
+
window.DecidimAwesome = window.DecidimAwesome || {};
|
5
|
+
|
6
|
+
const token = $( 'meta[name="csrf-token"]' ).attr( 'content' );
|
7
|
+
const $textarea = $("#proposal_body");
|
8
|
+
const t = window.DecidimAwesome.texts["drag_and_drop_image"];
|
9
|
+
|
10
|
+
if(!$textarea.length) return;
|
11
|
+
|
12
|
+
if(window.DecidimAwesome.allow_images_in_proposals) {
|
13
|
+
// Add the capability to upload images only (they will be presented as links)
|
14
|
+
|
15
|
+
$textarea.after(`<p class="help-text">${t}</p>`);
|
16
|
+
$textarea.inlineattachment({
|
17
|
+
uploadUrl: window.DecidimAwesome.editor_uploader_path,
|
18
|
+
uploadFieldName: "image",
|
19
|
+
jsonFieldName: "url",
|
20
|
+
progressText: "[Uploading file...]",
|
21
|
+
urlText: "{filename}",
|
22
|
+
extraHeaders: { "X-CSRF-Token": token }
|
23
|
+
});
|
24
|
+
}
|
25
|
+
});
|
@@ -0,0 +1,45 @@
|
|
1
|
+
//= require github.min
|
2
|
+
//= require inscrybmde.min
|
3
|
+
//= require_self
|
4
|
+
|
5
|
+
@import "decidim/variables";
|
6
|
+
@import "decidim/utils/settings";
|
7
|
+
@import "decidim/utils/mixins";
|
8
|
+
@import "./admin/constraints";
|
9
|
+
@import "./editors/quill_editor";
|
10
|
+
@import "./editors/markdown_editor";
|
11
|
+
|
12
|
+
.platoniq-credits{
|
13
|
+
position: absolute;
|
14
|
+
bottom: 0;
|
15
|
+
right: 0;
|
16
|
+
margin: 1em;
|
17
|
+
font-size: .8em;
|
18
|
+
}
|
19
|
+
|
20
|
+
.decidim_awesome {
|
21
|
+
&.modal{
|
22
|
+
.spinner{
|
23
|
+
@include spinner(25px, #aaa, var(--secondary), 800ms);
|
24
|
+
|
25
|
+
vertical-align: middle;
|
26
|
+
display: none;
|
27
|
+
}
|
28
|
+
|
29
|
+
&.loading{
|
30
|
+
.spinner{
|
31
|
+
display: inline-block;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
&-form {
|
37
|
+
margin-bottom: 2em;
|
38
|
+
border-bottom: 1px solid #999;
|
39
|
+
padding-bottom: 1.5em;
|
40
|
+
}
|
41
|
+
&-form:last-child {
|
42
|
+
border-bottom: none;
|
43
|
+
padding-bottom: 0;
|
44
|
+
}
|
45
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
.constraints-editor{
|
2
|
+
background: #f6f6f6;
|
3
|
+
padding: 1rem;
|
4
|
+
margin: -.5rem 0 2rem;
|
5
|
+
border-radius: 5px;
|
6
|
+
|
7
|
+
.constraints-list{
|
8
|
+
padding: 0;
|
9
|
+
// margin:0 0 1em 0 ;
|
10
|
+
li{
|
11
|
+
margin: 0 1em 0 0;
|
12
|
+
padding: 0;
|
13
|
+
}
|
14
|
+
|
15
|
+
.label{
|
16
|
+
&.participatory_space_manifest{
|
17
|
+
background-color: #f7b230;
|
18
|
+
}
|
19
|
+
|
20
|
+
&.participatory_space_slug{
|
21
|
+
background-color: #19b380;
|
22
|
+
}
|
23
|
+
|
24
|
+
&.component_manifest{
|
25
|
+
background-color: #b31919;
|
26
|
+
}
|
27
|
+
|
28
|
+
&.component_id{
|
29
|
+
background-color: #ee449c;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
a{
|
34
|
+
margin-left: 1rem;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
.leaflet-control-layers-toggle {
|
2
|
+
background-image: url(<%= asset_path "layers.png" %>);
|
3
|
+
}
|
4
|
+
.leaflet-retina .leaflet-control-layers-toggle {
|
5
|
+
background-image: url(<%= asset_path "layers-2x.png" %>);
|
6
|
+
}
|
7
|
+
.leaflet-default-icon-path {
|
8
|
+
background-image: url(<%= asset_path "marker-icon.png" %>);
|
9
|
+
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
// = require decidim/map
|
2
|
+
@import "decidim/decidim_awesome/awesome_map/leaflet";
|
3
|
+
|
4
|
+
// Increase z-index for components menu otherwise map hides menu extensions
|
5
|
+
.dropdown-pane{
|
6
|
+
z-index: 1000;
|
7
|
+
}
|
8
|
+
// Override padding in this component
|
9
|
+
.wrapper{
|
10
|
+
padding: 0;
|
11
|
+
|
12
|
+
.callout.announcement{
|
13
|
+
margin-top: 2rem;
|
14
|
+
}
|
15
|
+
|
16
|
+
.google-map{
|
17
|
+
margin-bottom: 0;
|
18
|
+
}
|
19
|
+
|
20
|
+
.leaflet-control-layers-list{
|
21
|
+
hr{
|
22
|
+
margin: .5em 0;
|
23
|
+
}
|
24
|
+
|
25
|
+
b{
|
26
|
+
margin: 1em 0;
|
27
|
+
display: block;
|
28
|
+
}
|
29
|
+
|
30
|
+
label{
|
31
|
+
line-height: 1;
|
32
|
+
font-size: .8rem;
|
33
|
+
margin: 0 0 .5em;
|
34
|
+
|
35
|
+
i{
|
36
|
+
display: inline-block;
|
37
|
+
width: .8rem;
|
38
|
+
height: .8rem;
|
39
|
+
background-color: var(--primary);
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
input{
|
44
|
+
margin: 0;
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
#map{
|
49
|
+
height: 700px;
|
50
|
+
width: 100%;
|
51
|
+
display: flex;
|
52
|
+
justify-content: center;
|
53
|
+
align-items: center;
|
54
|
+
|
55
|
+
.leaflet-marker-icon.svg-icon svg path{
|
56
|
+
filter: drop-shadow(3px 3px 2px rgba(0, 0, 0, .7));
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
.map-legend{
|
61
|
+
background: rgba(255, 255, 255, .8);
|
62
|
+
padding: 1em;
|
63
|
+
border: 2px solid #bbb;
|
64
|
+
border-radius: 4px;
|
65
|
+
}
|
66
|
+
}
|