decidim-decidim_awesome 0.12.0 → 0.12.4
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/CHANGELOG.md +45 -0
- data/README.md +25 -15
- data/Rakefile +12 -0
- data/app/cells/concerns/decidim/decidim_awesome/global_menu_cell_override.rb +14 -2
- data/app/cells/concerns/decidim/decidim_awesome/proposal_l_cell_override.rb +5 -4
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/show.erb +3 -3
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/vote_block_for.erb +1 -1
- data/app/commands/concerns/decidim/decidim_awesome/admin/needs_constraint_helpers.rb +39 -5
- data/app/commands/decidim/decidim_awesome/admin/create_authorization_group.rb +42 -0
- data/app/commands/decidim/decidim_awesome/admin/create_custom_redirect.rb +10 -14
- data/app/commands/decidim/decidim_awesome/admin/create_menu_hack.rb +9 -8
- data/app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb +3 -8
- data/app/commands/decidim/decidim_awesome/admin/create_scoped_admin.rb +4 -8
- data/app/commands/decidim/decidim_awesome/admin/create_scoped_style.rb +3 -7
- data/app/commands/decidim/decidim_awesome/admin/destroy_authorization_group.rb +37 -0
- data/app/commands/decidim/decidim_awesome/admin/destroy_custom_redirect.rb +10 -9
- data/app/commands/decidim/decidim_awesome/admin/destroy_menu_hack.rb +8 -7
- data/app/commands/decidim/decidim_awesome/admin/destroy_proposal_custom_field.rb +7 -13
- data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_admin.rb +7 -10
- data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_style.rb +6 -11
- data/app/commands/decidim/decidim_awesome/admin/update_config.rb +12 -1
- data/app/commands/decidim/decidim_awesome/admin/update_custom_redirect.rb +11 -11
- data/app/commands/decidim/decidim_awesome/admin/update_menu_hack.rb +10 -8
- data/app/controllers/concerns/decidim/decidim_awesome/admin/maintenance_context.rb +0 -28
- data/app/controllers/concerns/decidim/decidim_awesome/enforce_access_authorizations.rb +49 -0
- data/app/controllers/concerns/decidim/decidim_awesome/needs_hashcash.rb +43 -0
- data/app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb +2 -2
- data/app/controllers/decidim/decidim_awesome/admin/admin_authorizations_controller.rb +2 -2
- data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +0 -4
- data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +2 -1
- data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +2 -0
- data/app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb +1 -2
- data/app/controllers/decidim/decidim_awesome/admin/force_authorizations_controller.rb +44 -0
- data/app/controllers/decidim/decidim_awesome/admin/hashcash_controller.rb +39 -0
- data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +1 -1
- data/app/controllers/decidim/decidim_awesome/admin/{maintenance_controller.rb → private_data_controller.rb} +9 -9
- data/app/controllers/decidim/decidim_awesome/required_authorizations_controller.rb +51 -13
- data/app/controllers/decidim/decidim_awesome/utils_controller.rb +17 -0
- data/app/forms/concerns/decidim/decidim_awesome/proposals/admin/proposal_form_customizations.rb +59 -0
- data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_customizations.rb +28 -28
- data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_customizations_base.rb +36 -0
- data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb +7 -1
- data/app/forms/decidim/decidim_awesome/admin/authorization_group_form.rb +66 -0
- data/app/forms/decidim/decidim_awesome/admin/config_form.rb +23 -24
- data/app/forms/decidim/decidim_awesome/admin/constraint_form.rb +2 -0
- data/app/helpers/concerns/decidim/decidim_awesome/amendments_helper_override.rb +2 -1
- data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +21 -18
- data/app/helpers/decidim/decidim_awesome/map_helper.rb +4 -2
- data/app/models/decidim/decidim_awesome/paper_trail_version.rb +1 -1
- data/app/overrides/decidim/assemblies/admin/assemblies/_form/add_visibility_callout.html.erb.deface +3 -0
- data/app/overrides/decidim/conferences/admin/conferences/_form/add_visibility_callout.html.erb.deface +3 -0
- data/app/overrides/decidim/devise/registrations/new/add_hashcash.html.erb.deface +3 -0
- data/app/overrides/decidim/devise/sessions/new/add_hashcash.html.erb.deface +3 -0
- data/app/overrides/decidim/participatory_processes/admin/participatory_process_groups/_form/add_visibility_callout.html.erb.deface +3 -0
- data/app/overrides/decidim/participatory_processes/admin/participatory_processes/_form/add_visibility_callout.html.erb.deface +3 -0
- data/app/overrides/decidim/shared/_login_modal/add_hashcash.html.erb.deface +3 -0
- data/app/overrides/layouts/decidim/_head/add_awesome_custom_styles.html.erb.deface +3 -0
- data/app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface +0 -2
- data/app/packs/entrypoints/decidim_decidim_awesome_hashcash.js +4 -0
- data/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +25 -6
- data/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js +4 -2
- data/app/packs/src/decidim/decidim_awesome/admin/verifications.js +6 -3
- data/app/packs/src/decidim/decidim_awesome/awesome_admin.js +0 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/api/proposals_fetcher.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/controller.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/proposals_controller.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controls_ui.js +6 -6
- data/app/packs/src/decidim/decidim_awesome/awesome_map/load_map.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/forms/autosave.js +3 -3
- data/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +1 -113
- data/app/packs/src/decidim/decidim_awesome/proposals/images.js +1 -1
- data/app/packs/src/vendor/form_builder_langs/ar-SA.lang +111 -0
- data/app/packs/src/vendor/form_builder_langs/ar-TN.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/ca-ES.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/cs-CZ.lang +105 -0
- data/app/packs/src/vendor/form_builder_langs/da-DK.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/de-DE.lang +109 -0
- data/app/packs/src/vendor/form_builder_langs/el-GR.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/en-US.lang +117 -0
- data/app/packs/src/vendor/form_builder_langs/es-ES.lang +103 -0
- data/app/packs/src/vendor/form_builder_langs/fa-IR.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/fi-FI.lang +107 -0
- data/app/packs/src/vendor/form_builder_langs/fr-FR.lang +117 -0
- data/app/packs/src/vendor/form_builder_langs/he-IL.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/hi-IN.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/hu-HU.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/id-ID.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/it-IT.lang +107 -0
- data/app/packs/src/vendor/form_builder_langs/ja-JP.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/my-MM.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/nb-NO.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/nl-NL.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/pl-PL.lang +122 -0
- data/app/packs/src/vendor/form_builder_langs/pt-BR.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/pu-IN.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/qz-MM.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/ro-RO.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/ru-RU.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/sl-SI.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/th-TH.lang +111 -0
- data/app/packs/src/vendor/form_builder_langs/tr-TR.lang +115 -0
- data/app/packs/src/vendor/form_builder_langs/uk-UA.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/vi-VN.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/zh-CN.lang +100 -0
- data/app/packs/src/vendor/form_builder_langs/zh-TW.lang +94 -0
- data/app/packs/src/vendor/hashcash.js +83 -0
- data/app/packs/src/vendor/sha1.js +143 -0
- data/app/packs/src/vendor/stamp.js +50 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/codemirror.scss +6 -1
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/constraints.scss +5 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss +1 -2
- data/app/packs/stylesheets/decidim/decidim_awesome/forms/autosave.scss +2 -12
- data/app/presenters/decidim/decidim_awesome/private_data_presenter.rb +2 -2
- data/app/queries/decidim/decidim_awesome/space_constraint_finder.rb +43 -0
- data/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_methods.rb +3 -2
- data/app/services/decidim/decidim_awesome/access_authorization_service.rb +79 -0
- data/app/types/concerns/decidim/decidim_awesome/add_proposal_type_custom_fields.rb +2 -1
- data/app/views/decidim/decidim_awesome/admin/admin_accountability/index.html.erb +4 -4
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/callout.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/conflict.html.erb +4 -4
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb +6 -5
- data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +6 -6
- data/app/views/decidim/decidim_awesome/admin/config/_authorization_options_form.html.erb +19 -0
- data/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +3 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +4 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +4 -4
- data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_styles.html.erb +3 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +40 -2
- data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +71 -9
- data/app/views/decidim/decidim_awesome/admin/constraints/_form.html.erb +5 -4
- data/app/views/decidim/decidim_awesome/admin/hashcash/_filters.html.erb +55 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/index.html.erb +33 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/ip_addresses.html.erb +29 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/show.html.erb +42 -0
- data/app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/{maintenance → private_data}/_private_data.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/{maintenance/show.html.erb → private_data/index.html.erb} +2 -3
- data/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/shared/_visibility_notice.html.erb +8 -0
- data/app/views/decidim/decidim_awesome/amendments/_modal.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/hashcash/_hidden_field.html.erb +4 -0
- data/app/views/decidim/decidim_awesome/required_authorizations/index.html.erb +14 -4
- data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +2 -2
- data/app/views/layouts/decidim/decidim_awesome/admin/maintenance.html.erb +2 -11
- data/config/assets.rb +1 -0
- data/config/i18n-tasks.yml +2 -0
- data/config/locales/ca.yml +100 -37
- data/config/locales/cs.yml +100 -36
- data/config/locales/de.yml +98 -35
- data/config/locales/en.yml +117 -44
- data/config/locales/es.yml +100 -36
- data/config/locales/eu.yml +34 -39
- data/config/locales/fr.yml +77 -31
- data/config/locales/ja.yml +99 -36
- data/config/locales/sv.yml +49 -0
- data/lib/decidim/decidim_awesome/admin_engine.rb +9 -5
- data/lib/decidim/decidim_awesome/{authorizator.rb → authorizer.rb} +1 -1
- data/lib/decidim/decidim_awesome/awesome.rb +34 -24
- data/lib/decidim/decidim_awesome/awesome_helpers.rb +14 -5
- data/lib/decidim/decidim_awesome/checksums.yml +26 -40
- data/lib/decidim/decidim_awesome/config.rb +18 -7
- data/lib/decidim/decidim_awesome/context_analyzers/request_analyzer.rb +1 -1
- data/lib/decidim/decidim_awesome/engine.rb +14 -3
- data/lib/decidim/decidim_awesome/menu.rb +151 -138
- data/lib/decidim/decidim_awesome/middleware/current_config.rb +5 -10
- data/lib/decidim/decidim_awesome/test/initializer.rb +5 -2
- data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +1 -3
- data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +2 -1
- data/lib/decidim/decidim_awesome/test/shared_examples/proposal_form_examples.rb +191 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +15 -4
- data/lib/decidim/decidim_awesome/version.rb +1 -1
- data/lib/tasks/decidim_awesome_upgrade_tasks.rake +4 -1
- data/package.json +7 -8
- metadata +86 -13
- data/app/controllers/concerns/decidim/decidim_awesome/check_login_authorizations.rb +0 -60
- data/app/packs/src/decidim/decidim_awesome/admin/verification_selects.js +0 -21
- data/config/rubocop/disabled.yml +0 -11
- data/config/rubocop/faker.yml +0 -480
- data/config/rubocop/rails.yml +0 -88
- data/config/rubocop/rspec.yml +0 -65
- data/config/rubocop/ruby.yml +0 -1210
@@ -14,8 +14,9 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
14
14
|
|
15
15
|
const key = target.dataset.key;
|
16
16
|
const attribute = target.dataset.var;
|
17
|
-
const
|
18
|
-
const
|
17
|
+
const inputFields = document.querySelectorAll(`[name="config[${attribute}][${key}]"]`);
|
18
|
+
const multipleFields = document.querySelectorAll(`[name="config[${attribute}][${key}][]"]`);
|
19
|
+
const subFields = document.querySelectorAll(`[name^="config[${attribute}[${key}]]"]`);
|
19
20
|
const container = document.querySelector(`.js-box-container[data-key="${key}"]`);
|
20
21
|
const deleteBox = container.querySelector(".awesome-auto-delete");
|
21
22
|
|
@@ -32,11 +33,23 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
32
33
|
const rebuildHtml = (result) => {
|
33
34
|
rebuildLabel(result.key, result.scope);
|
34
35
|
constraints.outerHTML = result.html;
|
35
|
-
if (
|
36
|
-
|
36
|
+
if (inputFields.length > 0) {
|
37
|
+
inputFields.forEach((inputField) => {
|
38
|
+
inputField.setAttribute("name", `config[${attribute}][${result.key}]`);
|
39
|
+
});
|
37
40
|
}
|
38
|
-
if (
|
39
|
-
|
41
|
+
if (multipleFields.length > 0) {
|
42
|
+
multipleFields.forEach((multipleField) => {
|
43
|
+
multipleField.setAttribute("name", `config[${attribute}][${result.key}][]`);
|
44
|
+
});
|
45
|
+
}
|
46
|
+
if (subFields.length > 0) {
|
47
|
+
subFields.forEach((subField) => {
|
48
|
+
subField.setAttribute("name", subField.getAttribute("name").replace(
|
49
|
+
`config[${attribute}[${key}]]`,
|
50
|
+
`config[${attribute}[${result.key}]]`
|
51
|
+
));
|
52
|
+
});
|
40
53
|
}
|
41
54
|
container.dataset.key = result.key;
|
42
55
|
container.setAttribute("data-key", result.key);
|
@@ -56,6 +69,12 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
56
69
|
if (container) {
|
57
70
|
// reloads dialogs (modals)
|
58
71
|
document.dispatchEvent(new CustomEvent("ajax:loaded", { detail: container }));
|
72
|
+
// If editor are created, they will be duplicated by the ajax:loaded event, so we remove them
|
73
|
+
document.querySelectorAll(".editor-toolbar").forEach((toolbar) => {
|
74
|
+
if (toolbar.nextElementSibling && toolbar.nextElementSibling.classList.contains("editor-toolbar")) {
|
75
|
+
toolbar.nextElementSibling.remove();
|
76
|
+
}
|
77
|
+
});
|
59
78
|
}
|
60
79
|
// Rebuild the manual handling of remote modals
|
61
80
|
document.dispatchEvent(new CustomEvent("ajax:loaded:modals", { detail: [editModal, newModal] }));
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import "formBuilder/dist/form-builder.min.js";
|
2
2
|
import "src/decidim/decidim_awesome/forms/rich_text_plugin"
|
3
|
+
|
3
4
|
// formBuilder uses jquery-ui-sortable which is a very dirty npm package with no neat source code available, and causes problems with the webpacker configuration of Decidim.
|
4
5
|
// For the moment, we'll remove the sortable functionality with a dummy jQuery plugin until we find another sortable plugin (or keep it disabled for good)
|
5
6
|
jQuery.fn.sortable = () => {}
|
@@ -10,6 +11,7 @@ $(() => {
|
|
10
11
|
$(".awesome-edit-config .proposal_custom_fields_editor").each((_idx, el) => {
|
11
12
|
const key = $(el).closest(".proposal_custom_fields_container").data("key");
|
12
13
|
const configVar = $(el).closest(".proposal_custom_fields_container").data("var");
|
14
|
+
|
13
15
|
// DOCS: https://formbuilder.online/docs
|
14
16
|
window.CustomFieldsBuilders.push({
|
15
17
|
el: el,
|
@@ -17,8 +19,8 @@ $(() => {
|
|
17
19
|
var: configVar,
|
18
20
|
config: {
|
19
21
|
i18n: {
|
20
|
-
locale:
|
21
|
-
location:
|
22
|
+
locale: window.DecidimAwesome.currentLocale,
|
23
|
+
location: window.DecidimAwesome.formBuilderLangsLocation
|
22
24
|
},
|
23
25
|
formData: $(`input[name="config[${configVar}][${key}]"]`).val(),
|
24
26
|
disableFields: ["button", "file"],
|
@@ -17,10 +17,13 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
17
17
|
});
|
18
18
|
|
19
19
|
|
20
|
-
document.body.addEventListener("ajax:
|
21
|
-
|
20
|
+
document.body.addEventListener("ajax:error", (responseText) => {
|
21
|
+
container.innerHTML = `<div>${responseText.detail[0]}</div>`;
|
22
|
+
});
|
23
|
+
document.body.addEventListener("ajax:success", (responseText) => {
|
24
|
+
// console.log("ajax:success", responseText);
|
25
|
+
const response = responseText.detail[0];
|
22
26
|
const button = document.querySelector(`[data-verification-handler="${response.handler}"][data-verification-user-id="${response.userId}"]`);
|
23
|
-
// console.log("ajax:complete", responseText, "response", response, "button", button);
|
24
27
|
container.innerHTML = response.message;
|
25
28
|
|
26
29
|
if (response.granted) {
|
@@ -9,6 +9,5 @@ import "src/decidim/decidim_awesome/admin/form_exit_warn"
|
|
9
9
|
|
10
10
|
import "src/decidim/decidim_awesome/proposals/custom_fields"
|
11
11
|
import "src/decidim/decidim_awesome/admin/custom_fields_builder"
|
12
|
-
import "src/decidim/decidim_awesome/admin/verification_selects"
|
13
12
|
|
14
13
|
window.DecidimAwesome = window.DecidimAwesome || {};
|
@@ -58,7 +58,7 @@ export default class ProposalsFetcher extends Fetcher {
|
|
58
58
|
|
59
59
|
decorateNode(node) {
|
60
60
|
super.decorateNode(node);
|
61
|
-
node.authorName = node.author && node.author.name || window.DecidimAwesome.
|
61
|
+
node.authorName = node.author && node.author.name || window.DecidimAwesome.i18n.officialAuthor;
|
62
62
|
node.humanState = window.AwesomeMapProposalTexts[node.state];
|
63
63
|
switch (node.state) {
|
64
64
|
case "accepted":
|
@@ -16,7 +16,7 @@ export default class Controller {
|
|
16
16
|
getLabel() {
|
17
17
|
let text = this.component.name;
|
18
18
|
if (!text || this.awesomeMap.config.menu.mergeComponents) {
|
19
|
-
text = window.DecidimAwesome.
|
19
|
+
text = window.DecidimAwesome.i18n[this.component.type];
|
20
20
|
}
|
21
21
|
return `<span class="awesome_map-component" id="awesome_map-component_${this.component.id}" title="0" data-layer="${this.component.type}">${text}</span>`
|
22
22
|
}
|
@@ -16,7 +16,7 @@ export default class ProposalsController extends Controller {
|
|
16
16
|
// add control layer for amendments if any
|
17
17
|
if (this.awesomeMap.config.menu.amendments && this.component.amendments && !this.awesomeMap.layers.amendments) {
|
18
18
|
this.awesomeMap.layers.amendments = {
|
19
|
-
label: `<span class="awesome_map-component" id="awesome_map-amendments_${this.component.id}" title="0" data-layer="amendments">${window.DecidimAwesome.
|
19
|
+
label: `<span class="awesome_map-component" id="awesome_map-amendments_${this.component.id}" title="0" data-layer="amendments">${window.DecidimAwesome.i18n.amendments}</span>`,
|
20
20
|
group: new L.FeatureGroup.SubGroup(this.awesomeMap.cluster)
|
21
21
|
}
|
22
22
|
this.awesomeMap.controls.main.addOverlay(this.awesomeMap.layers.amendments.group, this.awesomeMap.layers.amendments.label);
|
@@ -82,8 +82,8 @@ export default class ControlsUI {
|
|
82
82
|
addSearchControls() {
|
83
83
|
const section = this.main.getContainer().querySelector(".leaflet-control-layers-list");
|
84
84
|
if (section) {
|
85
|
-
section.insertAdjacentHTML("beforeend", `<div id="awesome_map-categories-control" class="active"><b class="awesome_map-title-control">${window.DecidimAwesome.
|
86
|
-
<div id="awesome_map-hashtags-control"><b class="awesome_map-title-control">${window.DecidimAwesome.
|
85
|
+
section.insertAdjacentHTML("beforeend", `<div id="awesome_map-categories-control" class="active"><b class="awesome_map-title-control">${window.DecidimAwesome.i18n.categories}</b><div class="categories-container"></div></div>
|
86
|
+
<div id="awesome_map-hashtags-control"><b class="awesome_map-title-control">${window.DecidimAwesome.i18n.hashtags}</b><div class="hashtags-container"></div><a href="#" class="awesome_map-toggle_all_tags">${window.DecidimAwesome.i18n.selectDeselectAll}</a></div>`);
|
87
87
|
} else {
|
88
88
|
console.error("Can't find the section to insert the controls");
|
89
89
|
}
|
@@ -158,7 +158,7 @@ export default class ControlsUI {
|
|
158
158
|
|
159
159
|
const label = document.querySelector(`label.awesome_map-hashtag-${hashtag.tag}`);
|
160
160
|
// update number of items
|
161
|
-
label.setAttribute("title", `${parseInt(label.title || 0, 10) + 1} ${window.DecidimAwesome.
|
161
|
+
label.setAttribute("title", `${parseInt(label.title || 0, 10) + 1} ${window.DecidimAwesome.i18n.items}`);
|
162
162
|
});
|
163
163
|
}
|
164
164
|
}
|
@@ -171,12 +171,12 @@ export default class ControlsUI {
|
|
171
171
|
if (label) {
|
172
172
|
label.style.display = "block";
|
173
173
|
// update number of items
|
174
|
-
label.setAttribute("title", `${parseInt(label.title || 0, 10) + 1} ${window.DecidimAwesome.
|
174
|
+
label.setAttribute("title", `${parseInt(label.title || 0, 10) + 1} ${window.DecidimAwesome.i18n.items}`);
|
175
175
|
}
|
176
176
|
if (parent) {
|
177
177
|
// show parent if apply
|
178
178
|
parent.style.display = "block"
|
179
|
-
parent.setAttribute("title", `${parseInt(parent.title || 0, 10) + 1} ${window.DecidimAwesome.
|
179
|
+
parent.setAttribute("title", `${parseInt(parent.title || 0, 10) + 1} ${window.DecidimAwesome.i18n.items}`);
|
180
180
|
}
|
181
181
|
}
|
182
182
|
|
@@ -224,7 +224,7 @@ export default class ControlsUI {
|
|
224
224
|
updateStats(uid, total) {
|
225
225
|
// update component stats
|
226
226
|
const $component = $(`#awesome_map-${uid}`);
|
227
|
-
$component.attr("title", `${total} ${window.DecidimAwesome.
|
227
|
+
$component.attr("title", `${total} ${window.DecidimAwesome.i18n.items}`);
|
228
228
|
}
|
229
229
|
|
230
230
|
_indeterminateParentInput(cat) {
|
@@ -25,7 +25,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
25
25
|
const dataset = document.getElementById("awesome-map").dataset;
|
26
26
|
const config = {
|
27
27
|
length: parse(dataset.truncate) || 254,
|
28
|
-
center: sanitizeCenter(
|
28
|
+
center: sanitizeCenter(dataset.mapCenter),
|
29
29
|
zoom: parse(dataset.mapZoom),
|
30
30
|
menu: {
|
31
31
|
amendments: parse(dataset.menuAmendments),
|
@@ -55,12 +55,12 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
55
55
|
};
|
56
56
|
|
57
57
|
if (!window.localStorage) {
|
58
|
-
showMsg(window.DecidimAwesome.
|
58
|
+
showMsg(window.DecidimAwesome.i18n.autosavedError, true);
|
59
59
|
return;
|
60
60
|
}
|
61
61
|
|
62
62
|
if (window.localStorage.getItem(storeId)) {
|
63
|
-
showMsg(window.DecidimAwesome.
|
63
|
+
showMsg(window.DecidimAwesome.i18n.autosavedRetrieved, false, 5000);
|
64
64
|
}
|
65
65
|
|
66
66
|
// restore if available
|
@@ -85,7 +85,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
85
85
|
checkboxes[el.id] = el.checked;
|
86
86
|
});
|
87
87
|
window.localStorage.setItem(storeCheckboxesId, JSON.stringify(checkboxes));
|
88
|
-
showMsg(window.DecidimAwesome.
|
88
|
+
showMsg(window.DecidimAwesome.i18n.autosavedSuccess);
|
89
89
|
};
|
90
90
|
|
91
91
|
// save changes when modifications
|
@@ -2,53 +2,6 @@ import "formBuilder/dist/form-render.min.js";
|
|
2
2
|
import "src/decidim/decidim_awesome/forms/rich_text_plugin"
|
3
3
|
|
4
4
|
export default class CustomFieldsRenderer { // eslint-disable-line no-unused-vars
|
5
|
-
constructor() {
|
6
|
-
this.lang = this.getLang(window.DecidimAwesome.currentLocale);
|
7
|
-
}
|
8
|
-
|
9
|
-
getLang(lang) {
|
10
|
-
const langs = {
|
11
|
-
// ar: 'ar-SA', // Not in decidim yet
|
12
|
-
"ar": "ar-TN",
|
13
|
-
"ca": "ca-ES",
|
14
|
-
"cs": "cs-CZ",
|
15
|
-
"da": "da-DK",
|
16
|
-
"de": "de-DE",
|
17
|
-
"el": "el-GR",
|
18
|
-
"en": "en-US",
|
19
|
-
"es": "es-ES",
|
20
|
-
"fa": "fa-IR",
|
21
|
-
"fi": "fi-FI",
|
22
|
-
"fr": "fr-FR",
|
23
|
-
"he": "he-IL",
|
24
|
-
"hu": "hu-HU",
|
25
|
-
"it": "it-IT",
|
26
|
-
"ja": "ja-JP",
|
27
|
-
"my": "my-MM",
|
28
|
-
"nb": "nb-NO",
|
29
|
-
"nl": "nl-NL",
|
30
|
-
"pl": "pl-PL",
|
31
|
-
"pt": "pt-BR",
|
32
|
-
"qz": "qz-MM",
|
33
|
-
"ro": "ro-RO",
|
34
|
-
"ru": "ru-RU",
|
35
|
-
"sl": "sl-SI",
|
36
|
-
"th": "th-TH",
|
37
|
-
"tr": "tr-TR",
|
38
|
-
"uk": "uk-UA",
|
39
|
-
"vi": "vi-VN",
|
40
|
-
"zh-TW": "zh-TW",
|
41
|
-
"zh": "zh-CN"
|
42
|
-
};
|
43
|
-
if (langs[lang]) {
|
44
|
-
return langs[lang];
|
45
|
-
}
|
46
|
-
if (langs[lang.substr(0, 2)]) {
|
47
|
-
return langs[lang.substr(0, 2)];
|
48
|
-
}
|
49
|
-
return "en-US";
|
50
|
-
}
|
51
|
-
|
52
5
|
/*
|
53
6
|
* Creates an XML document with a subset of html-compatible dl/dd/dt elements
|
54
7
|
* to store the custom fields answers
|
@@ -116,70 +69,6 @@ export default class CustomFieldsRenderer { // eslint-disable-line no-unused-var
|
|
116
69
|
return `<xml>${$dl[0].outerHTML}</xml>`;
|
117
70
|
}
|
118
71
|
|
119
|
-
fixBuggyFields() {
|
120
|
-
if (!this.$element) {
|
121
|
-
return false;
|
122
|
-
}
|
123
|
-
|
124
|
-
/**
|
125
|
-
* Hack to fix required checkboxes being reset
|
126
|
-
* Issue: https://github.com/decidim-ice/decidim-module-decidim_awesome/issues/82
|
127
|
-
*/
|
128
|
-
this.$element.find(".formbuilder-checkbox-group").each((_key, group) => {
|
129
|
-
const inputs = $(".formbuilder-checkbox input", group);
|
130
|
-
const $label = $(group).find("label");
|
131
|
-
const data = this.spec.find((obj) => obj.type === "checkbox-group" && obj.name === $label.attr("for"));
|
132
|
-
let values = data.userData;
|
133
|
-
if (!inputs.length || !data || !values) {
|
134
|
-
return;
|
135
|
-
}
|
136
|
-
|
137
|
-
inputs.each((_idx, input) => {
|
138
|
-
let index = values.indexOf(input.value);
|
139
|
-
if (index >= 0) {
|
140
|
-
values.splice(index, 1)
|
141
|
-
// setting checked=true do not makes the browser aware that the form is valid if the field is required
|
142
|
-
if (!input.checked)
|
143
|
-
{$(input).click();}
|
144
|
-
} else if (input.checked)
|
145
|
-
{$(input).click();}
|
146
|
-
});
|
147
|
-
|
148
|
-
// Fill "other" option
|
149
|
-
const otherOption = $(".other-option", inputs.parent())[0];
|
150
|
-
const otherVal = $(".other-val", inputs.parent())[0];
|
151
|
-
const otherText = values.join(" ");
|
152
|
-
|
153
|
-
if (otherOption) {
|
154
|
-
if (otherText) {
|
155
|
-
otherOption.checked = true;
|
156
|
-
otherOption.value = otherText;
|
157
|
-
otherVal.value = otherText;
|
158
|
-
} else {
|
159
|
-
otherOption.checked = false;
|
160
|
-
otherOption.value = "";
|
161
|
-
otherVal.value = "";
|
162
|
-
}
|
163
|
-
}
|
164
|
-
});
|
165
|
-
|
166
|
-
/**
|
167
|
-
* Hack to fix required radio buttons "other" value
|
168
|
-
* Issue: https://github.com/decidim-ice/decidim-module-decidim_awesome/issues/133
|
169
|
-
*/
|
170
|
-
this.$element.find(".formbuilder-radio input.other-val").on("input", (input) => {
|
171
|
-
const $input = $(input.currentTarget);
|
172
|
-
const $group = $input.closest(".formbuilder-radio-group");
|
173
|
-
$group.find("input").each((_key, radio) => {
|
174
|
-
const name = $(radio).attr("name");
|
175
|
-
if (name && name.endsWith("[]")) {
|
176
|
-
$(radio).attr("name", name.slice(0, -2));
|
177
|
-
}
|
178
|
-
});
|
179
|
-
});
|
180
|
-
return this;
|
181
|
-
}
|
182
|
-
|
183
72
|
// Saves xml to the hidden input
|
184
73
|
storeData() {
|
185
74
|
if (!this.$element) {
|
@@ -203,7 +92,7 @@ export default class CustomFieldsRenderer { // eslint-disable-line no-unused-var
|
|
203
92
|
// in case of multilang tabs we only render one form due a limitation in the library for handling several instances
|
204
93
|
this.instance = $element.formRender({
|
205
94
|
i18n: {
|
206
|
-
locale:
|
95
|
+
locale: window.DecidimAwesome.currentLocale,
|
207
96
|
location: window.DecidimAwesome.formBuilderLangsLocation
|
208
97
|
},
|
209
98
|
formData: this.spec,
|
@@ -215,6 +104,5 @@ export default class CustomFieldsRenderer { // eslint-disable-line no-unused-var
|
|
215
104
|
}
|
216
105
|
}
|
217
106
|
});
|
218
|
-
this.fixBuggyFields();
|
219
107
|
}
|
220
108
|
}
|
@@ -15,7 +15,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
15
15
|
|
16
16
|
const span = document.createElement("span");
|
17
17
|
span.className = "input-character-counter__text";
|
18
|
-
span.innerHTML = window.DecidimAwesome.
|
18
|
+
span.innerHTML = window.DecidimAwesome.i18n.dragAndDropImage;
|
19
19
|
textarea.parentNode.appendChild(span);
|
20
20
|
attach(textarea, {
|
21
21
|
uploadUrl: window.DecidimAwesome.editorUploaderPath,
|
@@ -0,0 +1,111 @@
|
|
1
|
+
NATIVE_NAME = سعودي
|
2
|
+
ENGLISH_NAME = Arabic (Saudi Arabia)
|
3
|
+
|
4
|
+
addOption = إضافة خيار +
|
5
|
+
allFieldsRemoved = تم إزالة جميع الحقول.
|
6
|
+
allowMultipleFiles = السماح بأكثر من ملف
|
7
|
+
autocomplete = الاكمال التلقائي
|
8
|
+
button = زر
|
9
|
+
cannotBeEmpty = هذا الحقل لا يمكن أن تكون فارغة
|
10
|
+
checkboxGroup = مجموعة حقول اختيارات
|
11
|
+
checkbox = حقل اختيار
|
12
|
+
checkboxes = حقول اختيار
|
13
|
+
className = عنوان الصنف
|
14
|
+
clearAllMessage = هل أنت متأكد أنك تريد مسح كافة المعلومات؟
|
15
|
+
clear = إزالة
|
16
|
+
close = إغلاق
|
17
|
+
content = محتوى
|
18
|
+
copy = نسخ إلى ذاكرة النصوص
|
19
|
+
copyButton = +
|
20
|
+
copyButtonTooltip = نسخ
|
21
|
+
dateField = حقل تاريخ
|
22
|
+
description = نص مساعدة
|
23
|
+
descriptionField = وصف
|
24
|
+
devMode = وضع تطوير
|
25
|
+
editNames = تحرير الأسماء
|
26
|
+
editorTitle = عناصر النموذج
|
27
|
+
editXML = تحرير XML
|
28
|
+
enableOther = تفعيل "أخرى"
|
29
|
+
enableOtherMsg = السماح للمستخدمين بإضافة خيار غير موجود
|
30
|
+
fieldDeleteWarning = خطأ
|
31
|
+
fieldVars = متغيرات الحقل
|
32
|
+
fieldNonEditable = هذا الحقل لا يمكن تعديله.
|
33
|
+
fieldRemoveWarning = هل أنت متأكد من مسح هذا الحقل؟
|
34
|
+
fileUpload = حقل رفع ملف
|
35
|
+
formUpdated = تم تحديث النموذج
|
36
|
+
getStarted = قم بسحب حقل من اليمين إلى هذه المنطقة
|
37
|
+
header = ترويسة
|
38
|
+
hide = تعديل
|
39
|
+
hidden = حقل مخفي
|
40
|
+
inline = في السطر
|
41
|
+
inlineDesc = عرض {type} في السطر
|
42
|
+
label = اسم الحقل
|
43
|
+
labelEmpty = اسم الحقل لا يمكن أن يكون فارغ
|
44
|
+
limitRole = تقييد الوصول إلى واحد أو أكثر من الأدوار التالية:
|
45
|
+
mandatory = إلزامي
|
46
|
+
maxlength = الحد الأقصى للطول
|
47
|
+
minOptionMessage = هذا الحقل يتطلب خيارين على الأقل
|
48
|
+
minSelectionRequired = يتطلب {min} تحديدات على الأقل
|
49
|
+
multipleFiles = ملفات
|
50
|
+
name = اسم
|
51
|
+
no = لا
|
52
|
+
noFieldsToClear = لا توجد حقول للإزالة
|
53
|
+
number = رقم
|
54
|
+
off = معطل
|
55
|
+
on = مفعل
|
56
|
+
option = خيار
|
57
|
+
optionCount = خيار {count}
|
58
|
+
options = خيارات
|
59
|
+
optional = اختياري
|
60
|
+
optionLabelPlaceholder = نص مساعد
|
61
|
+
optionValuePlaceholder = نص
|
62
|
+
optionEmpty = الخيار مطلوب
|
63
|
+
other = أخرى
|
64
|
+
paragraph = نص
|
65
|
+
placeholder = نص مساعد
|
66
|
+
placeholders.value = نص
|
67
|
+
placeholders.label = نص مساعد
|
68
|
+
placeholders.text =
|
69
|
+
placeholders.textarea =
|
70
|
+
placeholders.email = ادخل بريدك الإلكتروني
|
71
|
+
placeholders.placeholder =
|
72
|
+
placeholders.className = foo class bar
|
73
|
+
placeholders.password = ادخل كلمة المرور
|
74
|
+
preview = معاينة
|
75
|
+
radioGroup = مجموعة حقول اختيار
|
76
|
+
radio = اختيار
|
77
|
+
removeMessage = إزالة عنصر
|
78
|
+
removeOption = إزالة خيار
|
79
|
+
remove = ×
|
80
|
+
required = مطلوب
|
81
|
+
requireValidOption = يتطلب خيار مسبق تعريفه
|
82
|
+
richText = معالج النصوص
|
83
|
+
roles = التمكين من
|
84
|
+
rows = صفوف
|
85
|
+
save = حفظ
|
86
|
+
selectOptions = خيارات
|
87
|
+
select = حقل تحديد
|
88
|
+
selectColor = اختيار اللون
|
89
|
+
selectionsMessage = السماح بأكثر من تحديد
|
90
|
+
size = الحجم
|
91
|
+
size.xs = صغير جدا
|
92
|
+
size.sm = صغير
|
93
|
+
size.m = عادي
|
94
|
+
size.lg = كبير
|
95
|
+
style = المظهر
|
96
|
+
styles.btn.default = افتراضي
|
97
|
+
styles.btn.danger = خطر
|
98
|
+
styles.btn.info = معلومة
|
99
|
+
styles.btn.primary = أساسي
|
100
|
+
styles.btn.success = نجاح
|
101
|
+
styles.btn.warning = تحذير
|
102
|
+
subtype = النوع
|
103
|
+
text = حقل نصي
|
104
|
+
textArea = حقل نص كبير
|
105
|
+
toggle = نوع التبديل
|
106
|
+
warning = تحذير
|
107
|
+
value = قيمة
|
108
|
+
viewJSON = [{…}]
|
109
|
+
viewXML = </>
|
110
|
+
yes = نعم
|
111
|
+
Arabic Label = اسم الحقل بالعربية
|
@@ -0,0 +1,94 @@
|
|
1
|
+
NATIVE_NAME = تونسي
|
2
|
+
ENGLISH_NAME = Arabic (Tunisian)
|
3
|
+
|
4
|
+
addOption = إضافة خيار
|
5
|
+
allFieldsRemoved = تمّت إزالة جميع المجالات..
|
6
|
+
allowSelect = السماح بالإختيار
|
7
|
+
autocomplete = الإكمال التلقائي
|
8
|
+
button = زر
|
9
|
+
cannotBeEmpty = هذه المعلومة لا يمكن أن تكون فارغة
|
10
|
+
checkboxGroup = مجموعة خانات إختيار
|
11
|
+
checkbox = خانة الاختيار
|
12
|
+
checkboxes = خانات إختيار
|
13
|
+
class = صنف
|
14
|
+
clearAllMessage = هل أنت متأكد أنك تريد مسح كافة المعلومات؟
|
15
|
+
clear = إفسخ
|
16
|
+
close = أغلق
|
17
|
+
content = محتوى
|
18
|
+
copy = نسخ إلى الحافظة
|
19
|
+
dateField = حقل تاريخ
|
20
|
+
description = نص المساعدة
|
21
|
+
descriptionField = وصف
|
22
|
+
devMode = وضع المطور
|
23
|
+
editNames = تغيير الأسماء
|
24
|
+
editorTitle = عناصر النموذج
|
25
|
+
editXML = تحرير XML
|
26
|
+
fieldDeleteWarning: خاطئة
|
27
|
+
fieldVars = متغيّرات الحقل
|
28
|
+
fieldNonEditable = هذا الحقل لا يمكن تعديله.
|
29
|
+
fieldRemoveWarning = هل حقا تريد حذف هذا المجال؟
|
30
|
+
fileUpload = تحميل الملف
|
31
|
+
formUpdated = تّم تحديث الإستمارة
|
32
|
+
getStarted = إسحب إختيار(حقل) من اليمين إلى هذا المجال
|
33
|
+
header = رأس الصفحة
|
34
|
+
hide = تحديث
|
35
|
+
hidden = الإدخال مخفي
|
36
|
+
label = التسمية
|
37
|
+
labelEmpty = التسمية لا يمكن أن يكون فارغا
|
38
|
+
limitRole = تقييد الوصول إلى واحد أو أكثر من الأدوار التالية:
|
39
|
+
mandatory = إلزامي
|
40
|
+
maxlength = الحد الاقصى للطول
|
41
|
+
minOptionMessage = يتطلب هذا المجال لا تقل عن 2 خيارات
|
42
|
+
name = الإسم
|
43
|
+
no = لا
|
44
|
+
off = عاطل
|
45
|
+
on = مفعل
|
46
|
+
option = خيار
|
47
|
+
optional = خيار
|
48
|
+
optionEmpty = قيمة الخيار المطلوبة
|
49
|
+
paragraph = فقرة
|
50
|
+
placeholder = العنصر النائب
|
51
|
+
placeholder.value = القيمة
|
52
|
+
placeholder.label = تسمية
|
53
|
+
placeholder.text = أدخل بعض النص
|
54
|
+
placeholder.textarea = إدخال الكثير من النص
|
55
|
+
placeholder.email = أدخل البريد الإلكتروني
|
56
|
+
placeholder.placeholder = العنصر النائب
|
57
|
+
placeholder.className = فئات مفصولة بمسافات
|
58
|
+
placeholder.password = أدخل كلمة المرور
|
59
|
+
preview = المعاينة
|
60
|
+
radioGroup = اختيار مجموعة
|
61
|
+
radio = اختيار
|
62
|
+
removeMessage = إزالة عنصر
|
63
|
+
remove = ×
|
64
|
+
required = إجبارية
|
65
|
+
richText = محرر WYSIWYG
|
66
|
+
roles = وصول
|
67
|
+
save = حفظ
|
68
|
+
selectOptions = خيارات
|
69
|
+
select = للاختيار
|
70
|
+
selectColor = اختيار اللون
|
71
|
+
selectionsMessage = سماح اختيارات متعددة
|
72
|
+
size = حجم
|
73
|
+
sizes = الأحجام
|
74
|
+
sizes.xs = صغيرة اضافية
|
75
|
+
sizes.sm = صغير
|
76
|
+
sizes.m = تبعا للإعدادات الافتراضية
|
77
|
+
sizes.lg = كبير
|
78
|
+
style = شكل
|
79
|
+
styles = الأشكال
|
80
|
+
styles.btn = شكل الزر
|
81
|
+
styles.btn.default = تبعا للإعدادات الافتراضية
|
82
|
+
styles.btn.danger = خطر
|
83
|
+
styles.btn.info = معلومات
|
84
|
+
styles.btn.primary = أساسي
|
85
|
+
styles.btn.success = نجاح
|
86
|
+
styles.btn.warning = إعلام
|
87
|
+
subtype = نوع
|
88
|
+
text = الميدان النص
|
89
|
+
textArea = تيكستاريا
|
90
|
+
toggle = نوع التبديل
|
91
|
+
warning = تحذير!
|
92
|
+
viewXML = </>
|
93
|
+
viewJSON = { }
|
94
|
+
yes = نعم
|