decidim-forms 0.23.1 → 0.24.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/decidim/forms/forms.js.es6 +4 -4
  3. data/app/commands/decidim/forms/admin/update_questionnaire.rb +2 -1
  4. data/app/commands/decidim/forms/answer_questionnaire.rb +43 -1
  5. data/app/controllers/decidim/forms/admin/concerns/has_questionnaire.rb +10 -2
  6. data/app/controllers/decidim/forms/concerns/has_questionnaire.rb +13 -6
  7. data/app/forms/decidim/forms/admin/question_form.rb +2 -0
  8. data/app/forms/decidim/forms/answer_form.rb +27 -0
  9. data/app/helpers/decidim/forms/admin/application_helper.rb +1 -6
  10. data/app/helpers/decidim/forms/admin/concerns/has_questionnaire_answers_url_helper.rb +3 -3
  11. data/app/helpers/decidim/forms/admin/questionnaire_answers_helper.rb +5 -2
  12. data/app/jobs/decidim/forms/export_questionnaire_answers_job.rb +1 -1
  13. data/app/models/decidim/forms/answer.rb +8 -0
  14. data/app/models/decidim/forms/question.rb +9 -3
  15. data/app/models/decidim/forms/questionnaire.rb +11 -0
  16. data/app/presenters/decidim/forms/admin/questionnaire_answer_presenter.rb +20 -0
  17. data/app/presenters/decidim/forms/admin/questionnaire_participant_presenter.rb +4 -4
  18. data/app/queries/decidim/forms/questionnaire_user_answers.rb +2 -1
  19. data/app/views/decidim/forms/admin/questionnaires/_form.html.erb +3 -3
  20. data/app/views/decidim/forms/admin/questionnaires/_question.html.erb +11 -0
  21. data/app/views/decidim/forms/admin/questionnaires/edit.html.erb +1 -1
  22. data/app/views/decidim/forms/questionnaires/_answer.html.erb +1 -1
  23. data/app/views/decidim/forms/questionnaires/answers/_files.html.erb +1 -0
  24. data/app/views/decidim/forms/questionnaires/answers/_long_answer.html.erb +1 -1
  25. data/app/views/decidim/forms/questionnaires/answers/_matrix_multiple.html.erb +2 -1
  26. data/app/views/decidim/forms/questionnaires/answers/_matrix_single.html.erb +2 -1
  27. data/app/views/decidim/forms/questionnaires/answers/_multiple_option.html.erb +2 -1
  28. data/app/views/decidim/forms/questionnaires/answers/_short_answer.html.erb +1 -1
  29. data/app/views/decidim/forms/questionnaires/answers/_single_option.html.erb +2 -1
  30. data/app/views/decidim/forms/questionnaires/show.html.erb +1 -1
  31. data/config/initializers/wicked_pdf.rb +2 -0
  32. data/config/locales/ca.yml +8 -2
  33. data/config/locales/cs.yml +10 -4
  34. data/config/locales/de.yml +10 -2
  35. data/config/locales/el.yml +1 -1
  36. data/config/locales/en.yml +8 -2
  37. data/config/locales/es-MX.yml +8 -2
  38. data/config/locales/es-PY.yml +8 -2
  39. data/config/locales/es.yml +8 -2
  40. data/config/locales/fi-plain.yml +8 -2
  41. data/config/locales/fi.yml +8 -2
  42. data/config/locales/fr-CA.yml +8 -2
  43. data/config/locales/fr.yml +10 -4
  44. data/config/locales/it.yml +1 -2
  45. data/config/locales/ja.yml +3 -3
  46. data/config/locales/lv.yml +1 -1
  47. data/config/locales/nl.yml +4 -5
  48. data/config/locales/no.yml +1 -1
  49. data/config/locales/pl.yml +11 -2
  50. data/config/locales/pt.yml +1 -2
  51. data/config/locales/ro-RO.yml +1 -2
  52. data/config/locales/si-LK.yml +1 -0
  53. data/config/locales/sv.yml +1 -2
  54. data/config/locales/sw-KE.yml +1 -0
  55. data/config/locales/tr-TR.yml +88 -1
  56. data/config/locales/zh-CN.yml +1 -2
  57. data/db/migrate/20201110152921_add_salt_to_decidim_forms_questionnaires.rb +16 -0
  58. data/db/migrate/20210208094442_add_max_characters_to_decidim_forms_questions.rb +7 -0
  59. data/lib/decidim/api/answer_option_type.rb +13 -0
  60. data/lib/decidim/api/question_type.rb +21 -0
  61. data/lib/decidim/api/questionnaire_entity_interface.rb +5 -5
  62. data/lib/decidim/api/questionnaire_type.rb +19 -0
  63. data/lib/decidim/exporters/form_pdf_controller_helper.rb +2 -0
  64. data/lib/decidim/forms.rb +1 -1
  65. data/lib/decidim/forms/api.rb +3 -0
  66. data/lib/decidim/forms/data_portability_user_answers_serializer.rb +7 -1
  67. data/lib/decidim/forms/test/factories.rb +13 -2
  68. data/lib/decidim/forms/test/shared_examples/has_questionnaire.rb +38 -5
  69. data/lib/decidim/forms/test/shared_examples/manage_questionnaires.rb +5 -4
  70. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/add_display_conditions.rb +7 -3
  71. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/add_questions.rb +1 -1
  72. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/update_questions.rb +5 -0
  73. data/lib/decidim/forms/user_answers_serializer.rb +10 -2
  74. data/lib/decidim/forms/version.rb +1 -1
  75. metadata +23 -18
  76. data/app/types/decidim/forms/answer_option_type.rb +0 -14
  77. data/app/types/decidim/forms/question_type.rb +0 -23
  78. data/app/types/decidim/forms/questionnaire_type.rb +0 -22
@@ -17,6 +17,7 @@ module Decidim
17
17
 
18
18
  def body
19
19
  return answer.body if answer.body.present?
20
+ return attachments if answer.attachments.any?
20
21
  return "-" if answer.choices.empty?
21
22
 
22
23
  choices = answer.choices.map do |choice|
@@ -30,8 +31,27 @@ module Decidim
30
31
  end
31
32
  end
32
33
 
34
+ def attachments
35
+ content_tag(:ul) do
36
+ safe_join(answer.attachments.map { |a| pretty_attachment(a) })
37
+ end
38
+ end
39
+
33
40
  private
34
41
 
42
+ def pretty_attachment(attachment)
43
+ # rubocop:disable Style/StringConcatenation
44
+ # Interpolating strings that are `html_safe` is problematic with Rails.
45
+ content_tag :li do
46
+ link_to(translated_attribute(attachment.title), attachment.url) +
47
+ " " +
48
+ content_tag(:small) do
49
+ "#{attachment.file_type} #{number_to_human_size(attachment.file_size)}"
50
+ end
51
+ end
52
+ # rubocop:enable Style/StringConcatenation
53
+ end
54
+
35
55
  def choice(choice_body)
36
56
  content_tag :li do
37
57
  choice_body
@@ -36,23 +36,23 @@ module Decidim
36
36
  end
37
37
 
38
38
  def first_short_answer
39
- short = sibilings.where("decidim_forms_questions.question_type in (?)", %w(short_answer))
39
+ short = sibilings.where(decidim_forms_questions: { question_type: %w(short_answer) })
40
40
  short.first
41
41
  end
42
42
 
43
43
  def completion
44
- with_body = sibilings.where("decidim_forms_questions.question_type in (?)", %w(short_answer long_answer))
44
+ with_body = sibilings.where(decidim_forms_questions: { question_type: %w(short_answer long_answer) })
45
45
  .where.not(body: "").count
46
46
  with_choices = sibilings.where.not("decidim_forms_questions.question_type in (?)", %w(short_answer long_answer))
47
47
  .where("decidim_forms_answers.id IN (SELECT decidim_answer_id FROM decidim_forms_answer_choices)").count
48
48
 
49
- (with_body + with_choices).to_f / questionnaire.questions.count * 100
49
+ (with_body + with_choices).to_f / questionnaire.questions.not_separator.count * 100
50
50
  end
51
51
 
52
52
  private
53
53
 
54
54
  def sibilings
55
- Answer.where(session_token: participant.session_token).joins(:question).order("decidim_forms_questions.position ASC")
55
+ Answer.not_separator.where(questionnaire: questionnaire, session_token: participant.session_token).joins(:question).order("decidim_forms_questions.position ASC")
56
56
  end
57
57
  end
58
58
  end
@@ -20,7 +20,8 @@ module Decidim
20
20
 
21
21
  # Finds and group answers by user for each questionnaire's question.
22
22
  def query
23
- answers = Answer.where(questionnaire: @questionnaire)
23
+ answers = Answer.not_separator.joins(:question).where(questionnaire: @questionnaire)
24
+
24
25
  answers.sort_by { |answer| answer.question.position }.group_by { |a| a.user || a.session_token }.values
25
26
  end
26
27
  end
@@ -1,7 +1,7 @@
1
1
  <div class="card">
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title">
4
- <%= t(".title") %>
4
+ <%= edit_questionnaire_title %>
5
5
  <% unless template? questionnaire.questionnaire_for %>
6
6
  <% if allowed_to? :preview, :questionnaire %>
7
7
  <div class="button--title">
@@ -10,7 +10,7 @@
10
10
  <% end %>
11
11
  <% if questionnaire.answers.any? %>
12
12
  <div class="button--title">
13
- <%= export_dropdown if allowed_to? :export_answers, :questionnaire %>
13
+ <%= export_dropdown(current_component, questionnaire.id) if allowed_to? :export_answers, :questionnaire %>
14
14
  </div>
15
15
  <div class="button--title">
16
16
  <% if allowed_to? :show, :questionnaire_answers %>
@@ -18,7 +18,7 @@
18
18
  <% end %>
19
19
  </div>
20
20
  <% else %>
21
- <button class="button tiny button--title" disabled><%= t("empty", scope: "decidim.forms.admin.questionnaires.answers") %></a>
21
+ <button class="button tiny button--title" disabled><%= t("empty", scope: "decidim.forms.admin.questionnaires.answers") %></button>
22
22
  <% end %>
23
23
  <% end %>
24
24
  </h2>
@@ -73,6 +73,17 @@
73
73
  %>
74
74
  </div>
75
75
 
76
+ <div class="row column">
77
+ <%=
78
+ form.number_field(
79
+ :max_characters,
80
+ disabled: !editable,
81
+ min: 0,
82
+ label: t("activemodel.attributes.questionnaire_question.max_characters")
83
+ )
84
+ %>
85
+ </div>
86
+
76
87
  <div class="row column">
77
88
  <%=
78
89
  form.select(
@@ -2,7 +2,7 @@
2
2
  <%= render partial: "decidim/templates/admin/questionnaire_templates/choose", locals: { target: questionnaire, form_title: t("decidim.forms.admin.questionnaires.edit.title") } %>
3
3
  <% else %>
4
4
  <%= decidim_form_for(@form, url: update_url, method: :put, html: { class: "form edit_questionnaire" }) do |form| %>
5
- <%= render partial: "decidim/forms/admin/questionnaires/form", object: form, locals: { title: title_for_questionnaire } %>
5
+ <%= render partial: "decidim/forms/admin/questionnaires/form", object: form %>
6
6
 
7
7
  <div class="button--double form-general-submit">
8
8
  <%= form.submit t(".save"), class: "button" %>
@@ -17,7 +17,7 @@
17
17
  </div>
18
18
  <% end %>
19
19
 
20
- <%= render partial: "decidim/forms/questionnaires/answers/#{answer.question.question_type}", locals: { answer: answer, answer_form: answer_form, answer_idx: answer_idx, field_id: field_id, disabled: disabled } %>
20
+ <%= render partial: "decidim/forms/questionnaires/answers/#{answer.question.question_type}", locals: { answer: answer, answer_form: answer_form, answer_idx: answer_idx, field_id: field_id, disabled: disabled, maxlength: (answer.question.max_characters if answer.question.max_characters.positive?) } %>
21
21
 
22
22
  <%= answer_form.hidden_field :question_id %>
23
23
 
@@ -0,0 +1 @@
1
+ <%= answer_form.file_field :add_documents, label: false, multiple: true, id: field_id, disabled: disabled %>
@@ -1 +1 @@
1
- <%= answer_form.text_area :body, label: false, id: field_id, rows: 10, disabled: disabled %>
1
+ <%= answer_form.text_area :body, label: false, id: field_id, rows: 10, disabled: disabled, maxlength: maxlength %>
@@ -32,7 +32,8 @@
32
32
  <%= text_field_tag "questionnaire[responses][#{answer_idx}][choices][][custom_body]",
33
33
  choice.try(:custom_body),
34
34
  id: "#{choice_id}_custom_body",
35
- disabled: true %>
35
+ disabled: true,
36
+ maxlength: maxlength %>
36
37
  <% end %>
37
38
  </div>
38
39
  </td>
@@ -32,7 +32,8 @@
32
32
  <%= text_field_tag "questionnaire[responses][#{answer_idx}][choices][#{row_idx}][custom_body]",
33
33
  choice.try(:custom_body),
34
34
  id: "#{choice_id}_custom_body",
35
- disabled: true %>
35
+ disabled: true,
36
+ maxlength: maxlength %>
36
37
  <% end %>
37
38
  </div>
38
39
  </td>
@@ -16,7 +16,8 @@
16
16
  <% if answer_option.free_text %>
17
17
  <%= text_field_tag "questionnaire[responses][#{answer_idx}][choices][#{idx}][custom_body]",
18
18
  choice.try(:custom_body),
19
- disabled: true %>
19
+ disabled: true,
20
+ maxlength: maxlength %>
20
21
  <% end %>
21
22
  </div>
22
23
  <% end %>
@@ -1 +1 @@
1
- <%= answer_form.text_field :body, label: false, id: field_id, disabled: disabled %>
1
+ <%= answer_form.text_field :body, label: false, id: field_id, disabled: disabled, maxlength: maxlength %>
@@ -23,7 +23,8 @@
23
23
  <%= text_field_tag "questionnaire[responses][#{answer_idx}][choices][][custom_body]",
24
24
  choice.try(:custom_body),
25
25
  id: "#{choice_id}_custom_body",
26
- disabled: true %>
26
+ disabled: true,
27
+ maxlength: maxlength %>
27
28
  <% end %>
28
29
  </div>
29
30
  <% end %>
@@ -56,7 +56,7 @@
56
56
  </div>
57
57
  <% end %>
58
58
 
59
- <%= decidim_form_for(@form, url: update_url, method: :post, html: { class: "form answer-questionnaire" }, data: { "safe-path" => form_path }) do |form| %>
59
+ <%= decidim_form_for(@form, url: update_url, method: :post, html: { multipart: true, class: "form answer-questionnaire" }, data: { "safe-path" => form_path }) do |form| %>
60
60
  <%= form_required_explanation %>
61
61
  <%= invisible_captcha %>
62
62
  <% answer_idx = 0 %>
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "wicked_pdf"
2
4
 
3
5
  # frozen_string_literal: true
@@ -10,10 +10,15 @@ ca:
10
10
  question_type: Tipus
11
11
  questionnaire_question:
12
12
  mandatory: Obligatori
13
+ max_characters: Límit de caràcters (deixa-ho a 0 si no hi ha límit)
13
14
  errors:
14
15
  models:
15
16
  answer:
16
17
  attributes:
18
+ add_documents:
19
+ needs_to_be_reattached: Ha de ser adjuntat de nou
20
+ body:
21
+ too_long: és massa llarg
17
22
  choices:
18
23
  missing: no estan complets
19
24
  too_many: en són masses
@@ -78,7 +83,7 @@ ca:
78
83
  collapse: Redueix totes les preguntes
79
84
  expand: Expandeix totes les preguntes
80
85
  preview: Previsualitzar
81
- title: Editar el formulari
86
+ title: Editar formulari per %{questionnaire_for}
82
87
  unpublished_warning: El formulari no està publicat. Pots modificar les preguntes, però al fer-ho s'esborraran les respostes actuals.
83
88
  matrix_row:
84
89
  matrix_row: Fila
@@ -110,7 +115,7 @@ ca:
110
115
  answer:
111
116
  body: El camp no pot estar en blanc
112
117
  files:
113
- extension_whitelist: 'Formats d''arxiu acceptats:'
118
+ extension_allowlist: 'Formats d''arxiu acceptats:'
114
119
  images:
115
120
  dimensions: "%{width} x %{height} px"
116
121
  dimensions_info: 'Aquesta imatge medirà:'
@@ -118,6 +123,7 @@ ca:
118
123
  resize_and_pad: Redimensionat i ajustat a
119
124
  resize_to_fit: Redimensionada per ajustar-la
120
125
  question_types:
126
+ files: Arxius
121
127
  long_answer: Resposta llarga
122
128
  matrix_multiple: Matriu (opció multiple)
123
129
  matrix_single: Matriu (opció única)
@@ -10,10 +10,15 @@ cs:
10
10
  question_type: Typ
11
11
  questionnaire_question:
12
12
  mandatory: Povinné
13
+ max_characters: Limit znaků (ponechte na 0, pokud není limit)
13
14
  errors:
14
15
  models:
15
16
  answer:
16
17
  attributes:
18
+ add_documents:
19
+ needs_to_be_reattached: Potřebuje být znovu připojen
20
+ body:
21
+ too_long: je příliš dlouhý
17
22
  choices:
18
23
  missing: nejsou úplné
19
24
  too_many: jsou příliš mnoho
@@ -74,11 +79,11 @@ cs:
74
79
  form:
75
80
  add_question: Přidat otázku
76
81
  add_separator: Přidat oddělovač
77
- already_answered_warning: Dotazník již odpověděli někteří uživatelé, takže nemusíte upravovat své dotazy.
78
- collapse: Sbalit všechny úlohy
82
+ already_answered_warning: Formulář je již zodpovězen některými uživateli, takže jeho otázky nemůžete upravovat.
83
+ collapse: Sbalit všechny otázky
79
84
  expand: Rozbalit všechny otázky
80
85
  preview: Náhled
81
- title: Upravit formulář
86
+ title: Upravit formulář pro %{questionnaire_for}
82
87
  unpublished_warning: Formulář není zveřejněn. Můžete změnit jeho otázky, ale tím odstraníte aktuální odpovědi.
83
88
  matrix_row:
84
89
  matrix_row: Řádek
@@ -110,7 +115,7 @@ cs:
110
115
  answer:
111
116
  body: Tělo nemůže být prázdné
112
117
  files:
113
- extension_whitelist: 'Akceptované formáty:'
118
+ extension_allowlist: 'Akceptované formáty:'
114
119
  images:
115
120
  dimensions: "%{width} x %{height} px"
116
121
  dimensions_info: 'Tento obrázek bude:'
@@ -118,6 +123,7 @@ cs:
118
123
  resize_and_pad: Zmenšeno a odsazeno k
119
124
  resize_to_fit: Upravena velikost na vyplnění
120
125
  question_types:
126
+ files: Soubory
121
127
  long_answer: Dlouhá odpověď
122
128
  matrix_multiple: Matice (Více možností)
123
129
  matrix_single: Matice (Jedna možnost)
@@ -3,15 +3,22 @@ de:
3
3
  attributes:
4
4
  answer:
5
5
  body: Antworten
6
+ choices: Auswahl
7
+ selected_choices: Ausgewählte Auswahl
6
8
  question:
7
9
  max_choices: Maximale Anzahl von Auswahlmöglichkeiten
8
10
  question_type: Art
9
11
  questionnaire_question:
10
12
  mandatory: Verpflichtend
13
+ max_characters: Maximale Anzahl Zeichen (0 bedeutet kein Limit)
11
14
  errors:
12
15
  models:
13
16
  answer:
14
17
  attributes:
18
+ add_documents:
19
+ needs_to_be_reattached: Muss erneut angehängt werden
20
+ body:
21
+ too_long: ist zu lang
15
22
  choices:
16
23
  missing: sind nicht vollständig
17
24
  too_many: sind zu viele
@@ -76,7 +83,7 @@ de:
76
83
  collapse: Alle Fragen einklappen
77
84
  expand: Alle Fragen ausklappen
78
85
  preview: Vorschau
79
- title: Formular bearbeiten
86
+ title: Formular für %{questionnaire_for} bearbeiten
80
87
  unpublished_warning: Das Formular ist nicht öffentlich. Sie können die Fragen ändern, dabei werden allerdings die aktuellen Antworten gelöscht.
81
88
  matrix_row:
82
89
  matrix_row: Zeile
@@ -108,7 +115,7 @@ de:
108
115
  answer:
109
116
  body: Körper kann nicht leer sein
110
117
  files:
111
- extension_whitelist: 'Gültige Formate:'
118
+ extension_allowlist: 'Gültige Formate:'
112
119
  images:
113
120
  dimensions: "%{width} x %{height} px"
114
121
  dimensions_info: 'Das Bild wird:'
@@ -116,6 +123,7 @@ de:
116
123
  resize_and_pad: in der Größe angepasst und gepolstert zu
117
124
  resize_to_fit: in der Größe verändert, damit es passt
118
125
  question_types:
126
+ files: Dateien
119
127
  long_answer: Lange Antwort
120
128
  matrix_multiple: Matrix (Mehrfachoption)
121
129
  matrix_single: Matrix (Einzelne Option)
@@ -66,7 +66,7 @@ el:
66
66
  answer:
67
67
  body: Το σώμα δεν μπορεί να είναι κενό
68
68
  files:
69
- extension_whitelist: 'Αποδεκτές μορφές:'
69
+ extension_allowlist: 'Αποδεκτές μορφές:'
70
70
  images:
71
71
  dimensions: "Π %{width} x Υ %{height} px"
72
72
  dimensions_info: 'Για αυτήν την εικόνα θα:'
@@ -11,10 +11,15 @@ en:
11
11
  question_type: Type
12
12
  questionnaire_question:
13
13
  mandatory: Mandatory
14
+ max_characters: Character limit (leave to 0 if no limit)
14
15
  errors:
15
16
  models:
16
17
  answer:
17
18
  attributes:
19
+ add_documents:
20
+ needs_to_be_reattached: Needs to be reattached
21
+ body:
22
+ too_long: is too long
18
23
  choices:
19
24
  missing: are not complete
20
25
  too_many: are too many
@@ -79,7 +84,7 @@ en:
79
84
  collapse: Collapse all questions
80
85
  expand: Expand all questions
81
86
  preview: Preview
82
- title: Edit form
87
+ title: Edit form for %{questionnaire_for}
83
88
  unpublished_warning: The form is not published. You may modify its questions, but doing so will delete current answers.
84
89
  matrix_row:
85
90
  matrix_row: Row
@@ -111,7 +116,7 @@ en:
111
116
  answer:
112
117
  body: Body can't be blank
113
118
  files:
114
- extension_whitelist: 'Accepted formats:'
119
+ extension_allowlist: 'Accepted formats:'
115
120
  images:
116
121
  dimensions: "%{width} x %{height} px"
117
122
  dimensions_info: 'This image will be:'
@@ -119,6 +124,7 @@ en:
119
124
  resize_and_pad: Resized and padded to
120
125
  resize_to_fit: Resized to fit
121
126
  question_types:
127
+ files: Files
122
128
  long_answer: Long answer
123
129
  matrix_multiple: Matrix (Multiple option)
124
130
  matrix_single: Matrix (Single option)
@@ -10,10 +10,15 @@ es-MX:
10
10
  question_type: Tipo
11
11
  questionnaire_question:
12
12
  mandatory: Obligatorio
13
+ max_characters: Límite de caracteres (dejar a 0 si no hay límite)
13
14
  errors:
14
15
  models:
15
16
  answer:
16
17
  attributes:
18
+ add_documents:
19
+ needs_to_be_reattached: Es necesario volver a adjuntar el fichero
20
+ body:
21
+ too_long: es demasiado largo
17
22
  choices:
18
23
  missing: no están completos
19
24
  too_many: son demasiados
@@ -78,7 +83,7 @@ es-MX:
78
83
  collapse: Contraer todas las preguntas
79
84
  expand: Expandir todos las preguntas
80
85
  preview: Previsualizar
81
- title: Editar el formulario
86
+ title: Editar formulario para %{questionnaire_for}
82
87
  unpublished_warning: El formulario no está publicado. Puedes modificar sus preguntas, pero al hacerlo eliminará las respuestas actuales.
83
88
  matrix_row:
84
89
  matrix_row: Fila
@@ -110,7 +115,7 @@ es-MX:
110
115
  answer:
111
116
  body: El campo no puede estar en blanco
112
117
  files:
113
- extension_whitelist: 'Formatos de archivo aceptados:'
118
+ extension_allowlist: 'Formatos de archivo aceptados:'
114
119
  images:
115
120
  dimensions: "%{width} x %{height} px"
116
121
  dimensions_info: 'Esta imagen medirá:'
@@ -118,6 +123,7 @@ es-MX:
118
123
  resize_and_pad: Redimensionado y ajustado a
119
124
  resize_to_fit: Redimensionada para ajustarla
120
125
  question_types:
126
+ files: Archivos
121
127
  long_answer: Respuesta larga
122
128
  matrix_multiple: Matriz (opción múltiple)
123
129
  matrix_single: Matriz (opción única)