decidim-admin 0.27.0.rc1 → 0.27.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of decidim-admin might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/controllers/decidim/admin/organization_controller.rb +3 -3
- data/app/controllers/decidim/admin/resource_permissions_controller.rb +1 -1
- data/app/helpers/decidim/admin/settings_helper.rb +57 -11
- data/app/packs/entrypoints/decidim_admin.js +5 -1
- data/app/packs/src/decidim/admin/admin_autocomplete.js +6 -2
- data/app/packs/src/decidim/admin/choose_language.js +11 -9
- data/app/packs/src/decidim/admin/dynamic_fields.component.js +1 -0
- data/app/packs/stylesheets/decidim/admin/modules/_forms.scss +6 -0
- data/app/views/decidim/admin/resource_permissions/edit.html.erb +1 -1
- data/config/locales/am-ET.yml +0 -1
- data/config/locales/da.yml +0 -1
- data/config/locales/de.yml +3 -0
- data/config/locales/et.yml +0 -1
- data/config/locales/fr.yml +14 -14
- data/config/locales/hr.yml +0 -1
- data/config/locales/hu.yml +182 -0
- data/config/locales/ko.yml +0 -1
- data/config/locales/lt.yml +149 -0
- data/config/locales/mt.yml +0 -1
- data/config/locales/nl.yml +83 -1
- data/config/locales/no.yml +16 -0
- data/config/locales/om-ET.yml +0 -1
- data/config/locales/pl.yml +2 -2
- data/config/locales/pt-BR.yml +1 -1
- data/config/locales/si-LK.yml +0 -1
- data/config/locales/so-SO.yml +0 -1
- data/config/locales/sw-KE.yml +0 -1
- data/config/locales/ti-ER.yml +0 -1
- data/config/locales/vi.yml +0 -1
- data/config/locales/zh-TW.yml +0 -1
- data/lib/decidim/admin/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5ed15c6f0a16e84e95cb02c129c2b52cb40bccf9c8b90b85c8bc1c7012e1412
|
4
|
+
data.tar.gz: 46b07fc0bf82a571a725d3f3e8eca721bac6fd37faa09876a17cbaa5a565d36b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61558f5b7c81beada95e0fe404e20dae4365cd93b0119ab20d2a238cd3bb2b6509b54a5579787971793f67f22b43679aff0502a7569d037665955e26571bcf41
|
7
|
+
data.tar.gz: 90e6c74f71c60251c4ebe7d7d46894db2681558f68843bb4bd5d9001a2fd32cebf63ee705951d535670e6634c5d62820d1794c2c87c053abb73cf22b9a5e0d61
|
@@ -30,11 +30,11 @@ module Decidim
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def users
|
33
|
-
search(current_organization.users)
|
33
|
+
search(current_organization.users.available)
|
34
34
|
end
|
35
35
|
|
36
36
|
def user_entities
|
37
|
-
search(current_organization.user_entities)
|
37
|
+
search(current_organization.user_entities.available)
|
38
38
|
end
|
39
39
|
|
40
40
|
private
|
@@ -51,7 +51,7 @@ module Decidim
|
|
51
51
|
query.where("email ILIKE ?", "%#{term}%")
|
52
52
|
)
|
53
53
|
end
|
54
|
-
render json: query.all.collect { |u| { value: u.id, label: "#{u.name} (@#{u.nickname})
|
54
|
+
render json: query.all.collect { |u| { value: u.id, label: "#{u.name} (@#{u.nickname})" } }
|
55
55
|
else
|
56
56
|
render json: []
|
57
57
|
end
|
@@ -18,16 +18,19 @@ module Decidim
|
|
18
18
|
time: :datetime_field
|
19
19
|
}.freeze
|
20
20
|
|
21
|
-
#
|
22
|
-
#
|
21
|
+
# Renders a form field that matches a settings attribute's type.
|
22
|
+
# Besides the field itself, it also renders all the metadata (like the labels and help texts)
|
23
23
|
#
|
24
|
-
# form
|
25
|
-
# attribute
|
26
|
-
#
|
27
|
-
# name
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
24
|
+
# @param form [Decidim::Admin::FormBuilder] The form in which to render the field
|
25
|
+
# @param attribute [Decidim::SettingsManifest::Attribute] The Settings::Attribute instance with the
|
26
|
+
# description of the attribute.
|
27
|
+
# @param name [Symbol] The name of the field.
|
28
|
+
# @param i18n_scope [String] The scope where it'll find all the texts for the internationalization (locales)
|
29
|
+
# @param options [Hash] Extra options to be passed to the field helper.
|
30
|
+
# @option options [String] :tabs_prefix The type of the setting.
|
31
|
+
# It can be "global-settings" or "step-N-settings", where N is the number of the step.
|
32
|
+
# @option options [nil, Boolean] :readonly True if the input is readonly.
|
33
|
+
# @return [ActiveSupport::SafeBuffer] Rendered form field.
|
31
34
|
def settings_attribute_input(form, attribute, name, i18n_scope, options = {})
|
32
35
|
form_method = form_method_for_attribute(attribute)
|
33
36
|
|
@@ -62,6 +65,18 @@ module Decidim
|
|
62
65
|
|
63
66
|
private
|
64
67
|
|
68
|
+
# Renders a select field collection input for the given attribute
|
69
|
+
#
|
70
|
+
# @param form (see #settings_attribute_input)
|
71
|
+
# @param attribute (see #settings_attribute_input)
|
72
|
+
# @param name (see #settings_attribute_input)
|
73
|
+
# @param i18n_scope (see #settings_attribute_input)
|
74
|
+
# @param options (see #settings_attribute_input)
|
75
|
+
# @option :tabs_prefix (see #settings_attribute_input)
|
76
|
+
# @option :readonly (see #settings_attribute_input)
|
77
|
+
# @option options [String] :label The label that this field has
|
78
|
+
# @option options [String] :help_text The help text shown after the input field
|
79
|
+
# @return (see #settings_attribute_input)
|
65
80
|
def render_select_form_field(form, attribute, name, i18n_scope, options)
|
66
81
|
html = form.select(
|
67
82
|
name,
|
@@ -73,6 +88,17 @@ module Decidim
|
|
73
88
|
end
|
74
89
|
|
75
90
|
# Returns a radio buttons collection input for the given attribute
|
91
|
+
#
|
92
|
+
# @param form (see #settings_attribute_input)
|
93
|
+
# @param attribute (see #settings_attribute_input)
|
94
|
+
# @param name (see #settings_attribute_input)
|
95
|
+
# @param i18n_scope (see #settings_attribute_input)
|
96
|
+
# @param options (see #settings_attribute_input)
|
97
|
+
# @option :tabs_prefix (see #settings_attribute_input)
|
98
|
+
# @option :readonly (see #settings_attribute_input)
|
99
|
+
# @option :label (see #render_select_form_field)
|
100
|
+
# @option :help_text (see #render_select_form_field)
|
101
|
+
# @return (see #settings_attribute_input)
|
76
102
|
def render_enum_form_field(form, attribute, name, i18n_scope, options)
|
77
103
|
html = label_tag(name) do
|
78
104
|
concat options[:label]
|
@@ -88,13 +114,25 @@ module Decidim
|
|
88
114
|
html
|
89
115
|
end
|
90
116
|
|
117
|
+
# Get the translation for a given attribute
|
91
118
|
# Returns a translation or nil. If nil, ZURB Foundation won't add the help_text.
|
119
|
+
#
|
120
|
+
# @param name (see #settings_attribute_input)
|
121
|
+
# @param suffix [String] What suffix the i18n key has
|
122
|
+
# @param i18n_scope (see #settings_attribute_input)
|
123
|
+
# @return [String, nil]
|
92
124
|
def text_for_setting(name, suffix, i18n_scope)
|
125
|
+
html_key = "#{i18n_scope}.#{name}_#{suffix}_html"
|
126
|
+
return t(html_key) if I18n.exists?(html_key)
|
127
|
+
|
93
128
|
key = "#{i18n_scope}.#{name}_#{suffix}"
|
94
129
|
return t(key) if I18n.exists?(key)
|
95
130
|
end
|
96
131
|
|
97
|
-
#
|
132
|
+
# Which form method is being used for this attribute
|
133
|
+
#
|
134
|
+
# @param attribute [Decidim::SettingsManifest::Attribute]
|
135
|
+
# @return [Symbol] The FormBuilder's method used to render
|
98
136
|
def form_method_for_attribute(attribute)
|
99
137
|
return :editor if attribute.type.to_sym == :text && attribute.editor?
|
100
138
|
|
@@ -102,7 +140,9 @@ module Decidim
|
|
102
140
|
end
|
103
141
|
|
104
142
|
# Handles special cases.
|
105
|
-
#
|
143
|
+
#
|
144
|
+
# @param input_type [Symbol]
|
145
|
+
# @return [Hash] Empty Hash or a Hash with extra HTML options.
|
106
146
|
def extra_options_for_type(input_type)
|
107
147
|
case input_type
|
108
148
|
when :text_area
|
@@ -113,6 +153,12 @@ module Decidim
|
|
113
153
|
end
|
114
154
|
|
115
155
|
# Build options for enum attributes
|
156
|
+
# Get the translation for a given attribute of type choice
|
157
|
+
#
|
158
|
+
# @param name (see #settings_attribute_input)
|
159
|
+
# @param i18n_scope (see #settings_attribute_input)
|
160
|
+
# @param choices [Array<Symbol>]
|
161
|
+
# @return [Array<Array<String>>]
|
116
162
|
def build_enum_choices(name, i18n_scope, choices)
|
117
163
|
choices.map do |choice|
|
118
164
|
[t("#{name}_choices.#{choice}", scope: i18n_scope), choice]
|
@@ -13,7 +13,7 @@ import "src/decidim/foundation_datepicker_locales"
|
|
13
13
|
import "jquery-serializejson"
|
14
14
|
|
15
15
|
import "src/decidim/admin/tab_focus"
|
16
|
-
import "src/decidim/admin/choose_language"
|
16
|
+
import initLanguageChangeSelect from "src/decidim/admin/choose_language"
|
17
17
|
import "src/decidim/admin/application"
|
18
18
|
import "src/decidim/admin/resources_permissions"
|
19
19
|
import "src/decidim/admin/welcome_notification"
|
@@ -41,3 +41,7 @@ import "entrypoints/decidim_admin.scss";
|
|
41
41
|
|
42
42
|
// This needs to be loaded after confirm dialog to bind properly
|
43
43
|
Rails.start()
|
44
|
+
|
45
|
+
window.addEventListener("DOMContentLoaded", () => {
|
46
|
+
initLanguageChangeSelect(document.querySelectorAll("select.language-change"));
|
47
|
+
});
|
@@ -18,6 +18,7 @@ import AutoComplete from "src/decidim/autocomplete";
|
|
18
18
|
*/
|
19
19
|
const autoConfigure = (el) => {
|
20
20
|
const config = JSON.parse(el.dataset.autocomplete);
|
21
|
+
const searchUrl = new URL(config.searchURL);
|
21
22
|
const textInput = document.createElement("input");
|
22
23
|
textInput.type = "text";
|
23
24
|
textInput.className = "autocomplete-input";
|
@@ -46,8 +47,11 @@ const autoConfigure = (el) => {
|
|
46
47
|
}
|
47
48
|
|
48
49
|
const dataSource = (query, callback) => {
|
49
|
-
const params = new URLSearchParams({
|
50
|
-
|
50
|
+
const params = new URLSearchParams({
|
51
|
+
...Object.fromEntries(searchUrl.searchParams),
|
52
|
+
term: query
|
53
|
+
});
|
54
|
+
fetch(`${searchUrl.origin}${searchUrl.pathname}?${params.toString()}`, {
|
51
55
|
method: "GET",
|
52
56
|
headers: { "Content-Type": "application/json" }
|
53
57
|
}).then((response) => response.json()).then((data) => {
|
@@ -1,12 +1,14 @@
|
|
1
1
|
/* eslint-disable no-invalid-this */
|
2
|
+
/* eslint-disable require-jsdoc */
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
export default function initLanguageChangeSelect(elements) {
|
5
|
+
elements.forEach((select) => {
|
6
|
+
select.addEventListener("change", () => {
|
7
|
+
let targetTabPaneSelector = select.value;
|
8
|
+
let tabsContent = select.parentElement.parentElement.nextElementSibling;
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
});
|
10
|
+
tabsContent.querySelector(".is-active").classList.remove("is-active");
|
11
|
+
tabsContent.querySelector(targetTabPaneSelector).classList.add("is-active");
|
12
|
+
})
|
13
|
+
});
|
14
|
+
}
|
@@ -70,6 +70,7 @@ class DynamicFieldsComponent {
|
|
70
70
|
$(this).replaceAttribute("for", placeholder, value);
|
71
71
|
$(this).replaceAttribute("tabs_id", placeholder, value);
|
72
72
|
$(this).replaceAttribute("href", placeholder, value);
|
73
|
+
$(this).replaceAttribute("value", placeholder, value);
|
73
74
|
|
74
75
|
return this;
|
75
76
|
}
|
@@ -21,7 +21,7 @@
|
|
21
21
|
<% if @component %>
|
22
22
|
<div class="card-divider"><%= t("#{@component.manifest.name}.actions.#{action}", scope: "decidim.components") %></div>
|
23
23
|
<% else %>
|
24
|
-
<div class="card-divider"><%= t("#{resource.
|
24
|
+
<div class="card-divider"><%= t("#{resource.resource_manifest.name}.actions.#{action}", scope: "decidim.resources") %></div>
|
25
25
|
<% end %>
|
26
26
|
|
27
27
|
<div class="card-section">
|
data/config/locales/am-ET.yml
CHANGED
data/config/locales/da.yml
CHANGED
data/config/locales/de.yml
CHANGED
@@ -850,6 +850,9 @@ de:
|
|
850
850
|
reminders:
|
851
851
|
create:
|
852
852
|
error: Beim Erstellen dieser Erinnerungen ist ein Problem aufgetreten.
|
853
|
+
success:
|
854
|
+
one: "%{count} Benutzer wird erinnert."
|
855
|
+
other: "%{count} Benutzer werden erinnert."
|
853
856
|
new:
|
854
857
|
submit: Senden
|
855
858
|
resource_permissions:
|
data/config/locales/et.yml
CHANGED
data/config/locales/fr.yml
CHANGED
@@ -211,21 +211,21 @@ fr:
|
|
211
211
|
success: Le type de périmètre d'assemblée a été mis à jour avec succès
|
212
212
|
areas:
|
213
213
|
create:
|
214
|
-
error: Une erreur s'est produite lors de la création d'
|
215
|
-
success:
|
214
|
+
error: Une erreur s'est produite lors de la création d'un nouveau périmètre d'assemblée.
|
215
|
+
success: Périmètre d'assemblée créé avec succès.
|
216
216
|
destroy:
|
217
|
-
has_spaces: Des espaces dépendent de
|
218
|
-
success:
|
217
|
+
has_spaces: Des espaces dépendent de ce périmètre d'assemblée. Veuillez vous assurer qu'aucun espace participatif n'est lié à périmètre avant de la supprimer.
|
218
|
+
success: Le périmètre d'assemblée a bien été supprimé
|
219
219
|
edit:
|
220
|
-
title: Modifier
|
220
|
+
title: Modifier le périmètre d'assemblée
|
221
221
|
update: Mettre à jour
|
222
222
|
new:
|
223
|
-
create: Créer
|
224
|
-
title:
|
225
|
-
no_areas:
|
223
|
+
create: Créer un périmètre d'assemblée
|
224
|
+
title: Nouveau périmètre d'assemblée
|
225
|
+
no_areas: Aucun périmètre d'assemblée
|
226
226
|
update:
|
227
|
-
error: Une erreur s'est produite lors de la mise à jour de
|
228
|
-
success:
|
227
|
+
error: Une erreur s'est produite lors de la mise à jour de ce périmètre d'assemblée.
|
228
|
+
success: Périmètre d'assemblée mise à jour avec succès
|
229
229
|
attachment_collections:
|
230
230
|
create:
|
231
231
|
error: Une erreur s'est produite lors de la création d'un nouveau dossier.
|
@@ -526,7 +526,7 @@ fr:
|
|
526
526
|
admins: Administrateurs
|
527
527
|
appearance: Apparence
|
528
528
|
area_types: Types de périmètre d'assemblée
|
529
|
-
areas:
|
529
|
+
areas: Périmètres d'assemblée
|
530
530
|
configuration: Configuration
|
531
531
|
dashboard: Tableau de bord
|
532
532
|
external_domain_whitelist: Domaines externes autorisés
|
@@ -538,7 +538,7 @@ fr:
|
|
538
538
|
participants: Participants
|
539
539
|
reported_users: Utilisateurs signalés
|
540
540
|
scope_types: Types de secteur
|
541
|
-
scopes:
|
541
|
+
scopes: Secteurs
|
542
542
|
settings: Paramètres
|
543
543
|
static_pages: Pages
|
544
544
|
user_groups: Groupes d'utilisateurs
|
@@ -960,7 +960,7 @@ fr:
|
|
960
960
|
titles:
|
961
961
|
admin_log: Journal d'administration
|
962
962
|
area_types: Types de périmètre d'assemblée
|
963
|
-
areas:
|
963
|
+
areas: Périmètres d'assemblée
|
964
964
|
authorization_workflows: Méthodes de vérification
|
965
965
|
dashboard: Tableau de bord
|
966
966
|
impersonatable_users: Utilisateurs pouvant être représentés
|
@@ -969,7 +969,7 @@ fr:
|
|
969
969
|
panel: Administrateur
|
970
970
|
participants: Utilisateurs
|
971
971
|
scope_types: Types de secteur
|
972
|
-
scopes:
|
972
|
+
scopes: Secteurs
|
973
973
|
static_pages: Pages
|
974
974
|
statistics: Activité
|
975
975
|
user_groups: Groupes d'utilisateurs
|
data/config/locales/hr.yml
CHANGED