decidim-templates 0.30.1 → 0.31.0.rc1

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/templates/admin/questionnaire_copier.rb +13 -12
  3. data/app/controllers/decidim/templates/admin/block_user_templates_controller.rb +2 -2
  4. data/app/controllers/decidim/templates/admin/proposal_answer_templates_controller.rb +2 -2
  5. data/app/controllers/decidim/templates/admin/questionnaire_templates_controller.rb +2 -2
  6. data/app/packs/entrypoints/decidim_templates.scss +1 -1
  7. data/app/packs/src/decidim/templates/admin/block_user_template_chooser.js +1 -1
  8. data/app/packs/src/decidim/templates/admin/choose_template.js +59 -5
  9. data/app/packs/src/decidim/templates/admin/proposal_answer_template_chooser.js +1 -1
  10. data/app/packs/stylesheets/decidim/templates/templates.scss +7 -3
  11. data/app/views/decidim/templates/admin/block_user_templates/index.html.erb +48 -14
  12. data/app/views/decidim/templates/admin/proposal_answer_templates/index.html.erb +53 -16
  13. data/app/views/decidim/templates/admin/questionnaire_templates/_choose.html.erb +33 -14
  14. data/app/views/decidim/templates/admin/questionnaire_templates/_preview.html.erb +15 -15
  15. data/app/views/decidim/templates/admin/questionnaire_templates/index.html.erb +51 -16
  16. data/config/assets.rb +2 -2
  17. data/config/locales/ar.yml +0 -1
  18. data/config/locales/bg.yml +0 -3
  19. data/config/locales/ca-IT.yml +6 -4
  20. data/config/locales/ca.yml +6 -4
  21. data/config/locales/cs.yml +6 -4
  22. data/config/locales/de.yml +6 -4
  23. data/config/locales/en.yml +6 -4
  24. data/config/locales/es-MX.yml +6 -4
  25. data/config/locales/es-PY.yml +6 -4
  26. data/config/locales/es.yml +6 -4
  27. data/config/locales/eu.yml +7 -5
  28. data/config/locales/fi-plain.yml +6 -4
  29. data/config/locales/fi.yml +6 -4
  30. data/config/locales/fr-CA.yml +6 -4
  31. data/config/locales/fr.yml +6 -4
  32. data/config/locales/ga-IE.yml +0 -2
  33. data/config/locales/gl.yml +0 -3
  34. data/config/locales/hu.yml +0 -3
  35. data/config/locales/it.yml +0 -3
  36. data/config/locales/ja.yml +6 -4
  37. data/config/locales/lt.yml +0 -3
  38. data/config/locales/nl.yml +0 -3
  39. data/config/locales/no.yml +0 -3
  40. data/config/locales/pl.yml +0 -3
  41. data/config/locales/pt-BR.yml +0 -3
  42. data/config/locales/pt.yml +0 -3
  43. data/config/locales/ro-RO.yml +6 -3
  44. data/config/locales/sv.yml +1 -4
  45. data/config/locales/tr-TR.yml +0 -3
  46. data/config/locales/zh-CN.yml +0 -3
  47. data/config/locales/zh-TW.yml +0 -3
  48. data/db/seeds.rb +4 -4
  49. data/lib/decidim/templates/admin_engine.rb +1 -1
  50. data/lib/decidim/templates/engine.rb +1 -1
  51. data/lib/decidim/templates/test/shared_examples/copies_all_questionnaire_contents_examples.rb +6 -6
  52. data/lib/decidim/templates/test/shared_examples/uses_questionnaire_templates.rb +9 -8
  53. data/lib/decidim/templates/version.rb +1 -1
  54. metadata +16 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a648d67f470143788aad3a5070931ac32ebf8155cde5efc4c721123721d5c3e0
4
- data.tar.gz: f9ba9e3bea6446ff3bfadd57c65925a88389645279fb7c0307fb57da914566f9
3
+ metadata.gz: 23045fbf6edd8834dd2b174468b6282e229c82950a5b71b9e74b47c0d5f2876c
4
+ data.tar.gz: f872a1eb4ca2528a683546ebde5696cedcc52d39f8b84c0df55e6b36521c41b0
5
5
  SHA512:
6
- metadata.gz: 3dd753bf0b1ecabcb7fddce06a78b380bbb6c7de06c9003d9f20b755e522e6f1467fe2613d9b1fcfa405b4f8a30b91a448ad50e51bc497e5dfe4f485f358c736
7
- data.tar.gz: 26fa72c379f8000a41699664ba5457bc0122b035e1d705d3679500810fbd3f22e7218372154fc607917cb8b89a66cf52321a6bc05a907a41f4d894238dd1b8e2
6
+ metadata.gz: 38bfd0a16891454d57219b2063eb2e01b4b9be2045b95fb89923aa0a0ea40e3e04fbc73b9498c8ae4d150f8197e2f7477128e95dbedc2d6a7227364d8924fd30
7
+ data.tar.gz: 28c997805937ea1cdcc4ad7268eb14b6146640f4de613436894b7cbf8ce50769d0c0d4b092340850e7bd2a8386cc64e994cc39f2da79e55c364cf717d6b99508
@@ -7,18 +7,18 @@ module Decidim
7
7
  module QuestionnaireCopier
8
8
  def copy_questionnaire_questions(original_questionnaire, new_questionnaire)
9
9
  # start by copying the questions so that they already exist when cross referencing them in the conditions
10
- original_questionnaire.reload.questions.includes(:answer_options, :matrix_rows, :display_conditions)
10
+ original_questionnaire.reload.questions.includes(:response_options, :matrix_rows, :display_conditions)
11
11
  original_questionnaire.questions.each do |original_question|
12
12
  new_question = original_question.dup
13
13
  new_question.questionnaire = new_questionnaire
14
14
  new_question.assign_attributes(
15
- answer_options_count: 0,
15
+ response_options_count: 0,
16
16
  matrix_rows_count: 0,
17
17
  display_conditions_count: 0,
18
18
  display_conditions_for_other_questions_count: 0
19
19
  )
20
20
  new_question.save!
21
- copy_questionnaire_answer_options(original_question, new_question)
21
+ copy_questionnaire_response_options(original_question, new_question)
22
22
  copy_questionnaire_matrix_rows(original_question, new_question)
23
23
  end
24
24
  # once all questions are copied, copy display conditions
@@ -27,11 +27,11 @@ module Decidim
27
27
  end
28
28
  end
29
29
 
30
- def copy_questionnaire_answer_options(original_question, new_question)
31
- original_question.answer_options.each do |original_answer_option|
32
- new_answer_option = original_answer_option.dup
33
- new_answer_option.question = new_question
34
- new_answer_option.save!
30
+ def copy_questionnaire_response_options(original_question, new_question)
31
+ original_question.response_options.each do |original_response_option|
32
+ new_response_option = original_response_option.dup
33
+ new_response_option.question = new_question
34
+ new_response_option.save!
35
35
  end
36
36
  end
37
37
 
@@ -51,8 +51,9 @@ module Decidim
51
51
  destination_question_to_be_checked = find_question_by_position(destination_question.questionnaire.questions, original_display_condition.condition_question.position)
52
52
  new_display_condition.condition_question = destination_question_to_be_checked
53
53
 
54
- if original_display_condition.answer_option
55
- new_display_condition.answer_option = find_answer_option_by_body(destination_question_to_be_checked.answer_options, original_display_condition.answer_option.body)
54
+ if original_display_condition.response_option
55
+ new_display_condition.response_option = find_response_option_by_body(destination_question_to_be_checked.response_options,
56
+ original_display_condition.response_option.body)
56
57
  end
57
58
  new_display_condition.save!
58
59
  destination_question.display_conditions << new_display_condition
@@ -63,8 +64,8 @@ module Decidim
63
64
  questions.to_a.find { |q| q.position == position }
64
65
  end
65
66
 
66
- def find_answer_option_by_body(answer_options, body)
67
- answer_options.to_a.find { |ao| ao.body == body }
67
+ def find_response_option_by_body(response_options, body)
68
+ response_options.to_a.find { |ao| ao.body == body }
68
69
  end
69
70
  end
70
71
  end
@@ -62,7 +62,7 @@ module Decidim
62
62
  on(:invalid) do |template|
63
63
  @template = template
64
64
  flash.now[:error] = I18n.t("templates.update.error", scope: "decidim.admin")
65
- render action: :edit
65
+ render action: :edit, status: :unprocessable_entity
66
66
  end
67
67
  end
68
68
  end
@@ -85,7 +85,7 @@ module Decidim
85
85
 
86
86
  on(:invalid) do
87
87
  flash.now[:alert] = I18n.t("templates.create.error", scope: "decidim.admin")
88
- render :new
88
+ render :new, status: :unprocessable_entity
89
89
  end
90
90
  end
91
91
  end
@@ -39,7 +39,7 @@ module Decidim
39
39
 
40
40
  on(:invalid) do
41
41
  flash.now[:alert] = I18n.t("templates.create.error", scope: "decidim.admin")
42
- render :new
42
+ render :new, status: :unprocessable_entity
43
43
  end
44
44
  end
45
45
  end
@@ -86,7 +86,7 @@ module Decidim
86
86
  on(:invalid) do |template|
87
87
  @template = template
88
88
  flash.now[:error] = I18n.t("templates.update.error", scope: "decidim.admin")
89
- render action: :edit
89
+ render action: :edit, status: :unprocessable_entity
90
90
  end
91
91
  end
92
92
  end
@@ -48,7 +48,7 @@ module Decidim
48
48
 
49
49
  on(:invalid) do
50
50
  flash.now[:alert] = I18n.t("templates.create.error", scope: "decidim.admin")
51
- render :new
51
+ render :new, status: :unprocessable_entity
52
52
  end
53
53
  end
54
54
  end
@@ -87,7 +87,7 @@ module Decidim
87
87
  on(:invalid) do |template|
88
88
  @template = template
89
89
  flash.now[:error] = I18n.t("templates.update.error", scope: "decidim.admin")
90
- render action: :edit
90
+ render action: :edit, status: :unprocessable_entity
91
91
  end
92
92
  end
93
93
  end
@@ -1 +1 @@
1
- @import "stylesheets/decidim/templates/templates";
1
+ @use "stylesheets/decidim/templates/templates";
@@ -1,5 +1,5 @@
1
1
  // Choose a Block User Message template, get it by AJAX and add the Template in the justification textarea
2
- document.addEventListener("DOMContentLoaded", () => {
2
+ document.addEventListener("turbo:load", () => {
3
3
  const blockTemplateChooser = document.getElementById("block_template_chooser");
4
4
  if (blockTemplateChooser) {
5
5
  blockTemplateChooser.addEventListener("change", () => {
@@ -1,13 +1,63 @@
1
1
  import { datalistSelect } from "src/decidim/datalist_select";
2
2
 
3
- $(() => {
4
- const wrapper = document.querySelector("#choose-template");
5
- if (!wrapper) {
3
+ document.addEventListener("turbo:load", () => {
4
+ const chooseTemplateForm = document.querySelector("[data-choose-questionnaire-templates]");
5
+ if (!chooseTemplateForm) {
6
6
  return;
7
7
  }
8
8
 
9
+ const chooseTemplateWrapper = document.querySelector("#choose-template");
10
+ if (!chooseTemplateWrapper) {
11
+ return;
12
+ }
13
+
14
+ const createNewFormButton = document.querySelector("[data-create-new-form-button]");
15
+ const withTemplateButton = document.querySelector("[data-with-template-button]");
16
+ const disabledContinueButton = document.querySelector("[data-disabled-button]");
17
+ const questionnaireTemplatePreview = document.querySelector("[data-questionnaire-template-preview]");
18
+
19
+ const toggleElementsOnChange = () => {
20
+ const radios = document.querySelectorAll("input[name='template']");
21
+
22
+ radios.forEach((radio) => {
23
+ radio.addEventListener("change", function() {
24
+ switch (radio.value) {
25
+ case "create_new_form":
26
+ disabledContinueButton.classList.add("!hidden");
27
+ withTemplateButton.classList.add("!hidden");
28
+ createNewFormButton.classList.remove("!hidden");
29
+
30
+ chooseTemplateWrapper.classList.add("hidden");
31
+
32
+ questionnaireTemplatePreview.classList.add("hidden");
33
+ break;
34
+
35
+ case "select_template":
36
+ disabledContinueButton.classList.remove("!hidden");
37
+ createNewFormButton.classList.add("!hidden");
38
+
39
+ chooseTemplateWrapper.classList.remove("hidden");
40
+ questionnaireTemplatePreview.classList.remove("hidden");
41
+
42
+ // Clean-up old values in case the admin is changing between the options after filling 'Select template'
43
+ // chooseTemplateWrapper.classList.add("hide");
44
+ document.querySelector("#questionnaire_questionnaire_template_id").value = "";
45
+ document.querySelector("input[name=select-template]").value = "";
46
+ document.querySelector("[data-template-name]").innerHTML = "";
47
+ document.querySelector("[data-template-description]").innerHTML = "";
48
+ document.querySelector("[data-choose-template-preview]").innerHTML = "";
49
+
50
+ break;
51
+
52
+ default:
53
+ console.error("Unknown template type for choosing a questionnaire template");
54
+ }
55
+ });
56
+ });
57
+ }
58
+
9
59
  const preview = (id) => {
10
- const options = wrapper.dataset;
60
+ const options = chooseTemplateWrapper.dataset;
11
61
  const previewURL = options.previewurl;
12
62
  if (!previewURL) {
13
63
  return;
@@ -18,7 +68,11 @@ $(() => {
18
68
  type: "GET",
19
69
  error: (data) => (console.error(data))
20
70
  });
71
+
72
+ disabledContinueButton.classList.add("!hidden");
73
+ withTemplateButton.classList.remove("!hidden");
21
74
  }
22
75
 
23
- datalistSelect(wrapper, preview)
76
+ datalistSelect(chooseTemplateWrapper, preview)
77
+ toggleElementsOnChange();
24
78
  })
@@ -1,5 +1,5 @@
1
1
  // Choose a Proposal Answer template, get it by AJAX and add the Template in the Proposal Answer textarea
2
- document.addEventListener("DOMContentLoaded", () => {
2
+ document.addEventListener("turbo:load", () => {
3
3
  const proposalAnswerTemplateChooser = document.getElementById("proposal_answer_template_chooser");
4
4
  if (proposalAnswerTemplateChooser) {
5
5
  proposalAnswerTemplateChooser.addEventListener("change", () => {
@@ -1,5 +1,9 @@
1
- .questionnaire-template-preview {
2
- .card {
3
- @apply w-full m-auto border-0;
1
+ .questionnaire-template__form {
2
+ .form__wrapper input[type="radio"] {
3
+ @apply mt-0;
4
+ }
5
+
6
+ &-card {
7
+ @apply p-4 block border border-background rounded-lg cursor-pointer has-[:checked]:border-secondary has-[:checked]:border-2;
4
8
  }
5
9
  }
@@ -9,31 +9,65 @@
9
9
  </h1>
10
10
  </div>
11
11
  <% if @templates.any? %>
12
- <div class="table-scroll">
12
+ <div class="table-stacked">
13
13
  <table class="table-list user_block-templates">
14
14
  <thead>
15
15
  <tr>
16
16
  <th><%= t("template.name", scope: "decidim.models") %></th>
17
17
  <th><%= t("template.fields.created_at", scope: "decidim.models") %></th>
18
- <th></th>
18
+ <th><%= t("decidim.admin.actions.actions") %></th>
19
19
  </tr>
20
20
  </thead>
21
21
  <tbody>
22
22
  <% @templates.each do |template| %>
23
23
  <tr data-questionnaire_template-id="<%= template.id %>">
24
- <td><%= link_to translated_attribute(template.name), edit_block_user_template_path(template) %></td>
25
- <td><%= l template.created_at, format: :long %></td>
26
- <td class="table-list__actions">
27
- <% if allowed_to?(:update, :template, questionnaire_template: template) %>
28
- <%= icon_link_to "pencil-line", edit_block_user_template_path(template), t("actions.edit", scope: "decidim.admin"), class: "edit" %>
29
- <% end %>
30
- <% if allowed_to?(:copy, :template, questionnaire_template: template) %>
31
- <%= icon_link_to "file-copy-line", copy_block_user_template_path(template), t("actions.duplicate", scope: "decidim.admin"), method: :post %>
32
- <% end %>
33
- <% if allowed_to?(:destroy, :template, questionnaire_template: template) %>
34
- <%= icon_link_to "delete-bin-line", block_user_template_path(template), t("actions.destroy", scope: "decidim.admin"), method: :delete, data: { confirm: t(".confirm_delete") }, class: "action-icon--remove" %>
35
- <% end %>
24
+ <td data-label="<%= t("template.name", scope: "decidim.models") %>">
25
+ <%= link_to translated_attribute(template.name), edit_block_user_template_path(template) %>
36
26
  </td>
27
+ <td data-label="<%= t("template.fields.created_at", scope: "decidim.models") %>">
28
+ <%= l template.created_at, format: :long %>
29
+ </td>
30
+ <td data-label="<%= t("decidim.admin.actions.actions") %>" class="table-list__actions">
31
+ <button type="button" data-controller="dropdown" data-target="actions-block-user-template-<%= template.id %>" aria-label="<%= t("decidim.admin.actions.actions_label", resource: template.name) %>">
32
+ <%= icon "more-fill", class: "text-secondary" %>
33
+ </button>
34
+
35
+ <div class="inline-block relative">
36
+ <ul id="actions-block-user-template-<%= template.id %>" class="dropdown dropdown__action" aria-hidden="true">
37
+ <% if allowed_to?(:update, :template, questionnaire_template: template) %>
38
+ <li class="dropdown__item">
39
+ <%= link_to edit_block_user_template_path(template), class: "dropdown__button edit" do %>
40
+ <%= icon "pencil-line" %>
41
+ <%= t("actions.edit", scope: "decidim.admin") %>
42
+ <% end %>
43
+ </li>
44
+
45
+ <hr>
46
+ <% end %>
47
+
48
+ <% if allowed_to?(:copy, :template, questionnaire_template: template) %>
49
+ <li class="dropdown__item">
50
+ <%= link_to copy_block_user_template_path(template), method: :post, class: "dropdown__button" do %>
51
+ <%= icon "file-copy-line" %>
52
+ <%= t("actions.duplicate", scope: "decidim.admin") %>
53
+ <% end %>
54
+ </li>
55
+
56
+ <hr>
57
+ <% end %>
58
+
59
+ <% if allowed_to?(:destroy, :template, questionnaire_template: template) %>
60
+ <li class="dropdown__item">
61
+ <%= link_to block_user_template_path(template), method: :delete, data: { confirm: t(".confirm_delete") }, class: "dropdown__button" do %>
62
+ <%= icon "delete-bin-line" %>
63
+ <%= t("actions.destroy", scope: "decidim.admin") %>
64
+ <% end %>
65
+ </li>
66
+ <% end %>
67
+ </ul>
68
+ </div>
69
+ </td>
70
+
37
71
  </tr>
38
72
  <% end %>
39
73
  </tbody>
@@ -10,7 +10,7 @@
10
10
  </h1>
11
11
  </div>
12
12
  <% if @templates.any? %>
13
- <div class="table-scroll">
13
+ <div class="table-stacked">
14
14
  <table class="table-list">
15
15
  <thead>
16
16
  <tr>
@@ -18,28 +18,65 @@
18
18
  <th><%= t(".proposal_state_id") %></th>
19
19
  <th><%= t(".component_constraint") %></th>
20
20
  <th><%= t("template.fields.created_at", scope: "decidim.models") %></th>
21
- <th></th>
21
+ <th><%= t("decidim.admin.actions.actions") %></th>
22
22
  </tr>
23
23
  </thead>
24
24
  <tbody>
25
25
  <% @templates.each do |template| %>
26
26
  <tr data-proposal_answer-id="<%= template.id %>">
27
- <td><%= link_to_if allowed_to?(:update, :template, template:) , translated_attribute(template.name), edit_proposal_answer_template_path(template) %></td>
28
- <td> <%= proposal_state(template) %></td>
29
- <td><%= availability_option_as_text(template) %></td>
30
- <td><%= l template.created_at, format: :long %></td>
27
+ <td data-label="<%= t("template.name", scope: "decidim.models") %>">
28
+ <%= link_to_if allowed_to?(:update, :template, template: template), translated_attribute(template.name), edit_proposal_answer_template_path(template) %>
29
+ </td>
30
+ <td data-label="<%= t(".proposal_state_id") %>">
31
+ <%= proposal_state(template) %>
32
+ </td>
33
+ <td data-label="<%= t(".component_constraint") %>">
34
+ <%= availability_option_as_text(template) %>
35
+ </td>
36
+ <td data-label="<%= t("template.fields.created_at", scope: "decidim.models") %>">
37
+ <%= l template.created_at, format: :long %>
38
+ </td>
39
+ <td data-label="<%= t("decidim.admin.actions.actions") %>" class="table-list__actions">
40
+ <button type="button" data-controller="dropdown" data-target="actions-proposal-answer-template-<%= template.id %>" aria-label="<%= t("decidim.admin.actions.actions_label", resource: template.name) %>">
41
+ <%= icon "more-fill", class: "text-secondary" %>
42
+ </button>
43
+
44
+ <div class="inline-block relative">
45
+ <ul id="actions-proposal-answer-template-<%= template.id %>" class="dropdown dropdown__action" aria-hidden="true">
46
+ <% if allowed_to?(:update, :template, template: template) %>
47
+ <li class="dropdown__item">
48
+ <%= link_to edit_proposal_answer_template_path(template), class: "dropdown__button edit" do %>
49
+ <%= icon "pencil-line" %>
50
+ <%= t("actions.edit", scope: "decidim.admin") %>
51
+ <% end %>
52
+ </li>
31
53
 
32
- <td class="table-list__actions">
33
- <% if allowed_to?(:update, :template, template:) %>
34
- <%= icon_link_to "pencil-line", edit_proposal_answer_template_path(template), t("actions.edit", scope: "decidim.admin"), class: "edit" %>
35
- <% end %>
36
- <% if allowed_to?(:copy, :template, template:) %>
37
- <%= icon_link_to "file-copy-line", copy_proposal_answer_template_path(template), t("actions.duplicate", scope: "decidim.admin"), method: :post %>
38
- <% end %>
39
- <% if allowed_to?(:destroy, :template, template:) %>
40
- <%= icon_link_to "delete-bin-line", proposal_answer_template_path(template), t("actions.destroy", scope: "decidim.admin"), method: :delete, data: { confirm: t(".confirm_delete") }, class: "action-icon--remove" %>
41
- <% end %>
54
+ <hr>
55
+ <% end %>
56
+
57
+ <% if allowed_to?(:copy, :template, template: template) %>
58
+ <li class="dropdown__item">
59
+ <%= link_to copy_proposal_answer_template_path(template), method: :post, class: "dropdown__button" do %>
60
+ <%= icon "file-copy-line" %>
61
+ <%= t("actions.duplicate", scope: "decidim.admin") %>
62
+ <% end %>
63
+ </li>
64
+
65
+ <hr>
66
+ <% end %>
67
+
68
+ <% if allowed_to?(:destroy, :template, template: template) %>
69
+ <li class="dropdown__item">
70
+ <%= link_to proposal_answer_template_path(template), method: :delete, data: { confirm: t(".confirm_delete") }, class: "dropdown__button" do %>
71
+ <%= icon "delete-bin-line" %>
72
+ <%= t("actions.destroy", scope: "decidim.admin") %>
73
+ <% end %>
74
+ </li>
75
+ <% end %>
76
+ </ul>
77
+ </div>
42
78
  </td>
79
+
43
80
  </tr>
44
81
  <% end %>
45
82
  </tbody>
@@ -1,42 +1,61 @@
1
1
  <div class="item_show__header">
2
2
  <h1 class="item_show__header-title">
3
3
  <%= form_title %>
4
- <div class="ml-auto">
5
- <%= link_to t(".skip_template"), decidim_admin_templates.skip_questionnaire_templates_path(questionnaire_id: questionnaire, url: request.url), class: "button button__sm button__secondary", method: :post %>
6
- </div>
7
4
  </h1>
5
+
6
+ <% if show_buttons %>
7
+ <%= button_tag t("continue", scope: "decidim.templates.admin.questionnaire_templates.choose"), class: "main-tabs-menu__cta-button disabled", data: { disabled_button: true } %>
8
+ <%= link_to t("continue", scope: "decidim.templates.admin.questionnaire_templates.choose"), decidim_admin_templates.skip_questionnaire_templates_path(questionnaire_id: questionnaire, url: request.url), class: "main-tabs-menu__cta-button hidden", data: { create_new_form_button: true }, method: :post %>
9
+ <%= button_tag t("continue", scope: "decidim.templates.admin.questionnaire_templates.choose"), class: "main-tabs-menu__cta-button hidden", data: { with_template_button: true }, form: "choose-template-form" %>
10
+ <% end %>
8
11
  </div>
9
- <div class="item__edit item__edit-1col">
10
- <div class="item__edit-form">
11
- <%= decidim_form_for([questionnaire], url: decidim_admin_templates.apply_questionnaire_templates_url(questionnaire_id: questionnaire, url: request.url), method: :post, html: { class: "form form-defaults choose_questionnaire_templates" }) do |form| %>
12
+
13
+ <div class="grid-cols-1">
14
+ <div class="item__edit-form questionnaire-template__form">
15
+ <%= decidim_form_for([questionnaire], url: decidim_admin_templates.apply_questionnaire_templates_url(questionnaire_id: questionnaire, url: request.url),
16
+ method: :post,
17
+ html: { id: "choose-template-form", class: "form form-defaults choose_questionnaire_templates", "data-choose-questionnaire-templates": true }) do |form| %>
12
18
  <div class="form__wrapper">
13
- <div class="card p-4">
19
+ <div class="p-4 ">
14
20
  <%= t(".description") %>
21
+
22
+ <div class="grid grid-cols-2 gap-4 my-4">
23
+ <%= label_tag :template_create_new_form, class: "questionnaire-template__form-card" do %>
24
+ <%= radio_button_tag :template, :create_new_form, false, class: "hidden peer" %>
25
+ <span class="text-lg font-normal">
26
+ <%= t(".options.create_new_form") %>
27
+ </span>
28
+ <% end %>
29
+
30
+ <%= label_tag :template_select_template, class: "questionnaire-template__form-card" do %>
31
+ <%= radio_button_tag :template, :select_template, false, class: "hidden peer" %>
32
+ <span class="text-lg font-normal">
33
+ <%= t(".options.select_template") %>
34
+ </span>
35
+ <% end %>
36
+ </div>
37
+
15
38
  <%= datalist_select(templates,
16
39
  {
17
40
  id: "choose-template",
18
41
  list: "template-list",
19
42
  label: t(".label"),
20
43
  name: "select-template",
44
+ class: "hidden",
21
45
  placeholder: t("placeholder", scope: "decidim.templates.admin.questionnaire_templates.choose"),
22
46
  data: {
23
47
  previewurl: decidim_admin_templates.preview_questionnaire_templates_url(format: :js)
24
48
  }
25
49
  }
26
50
  ) { form.hidden_field :questionnaire_template_id } %>
27
- <div class="card-section questionnaire-template-preview pt-4 hide">
51
+
52
+ <div class="card-section questionnaire-template-preview pt-4 hide" data-questionnaire-template-preview="true">
28
53
  <h2 class="item_show__header-title" data-template-name></h2>
29
54
  <p class="py-4" data-template-description></p>
30
55
  <div class="row column" data-choose-template-preview></div>
31
56
  </div>
32
57
  </div>
33
58
  </div>
34
-
35
- <div class="item__edit-sticky">
36
- <div class="item__edit-sticky-container">
37
- <%= form.submit t(".create_from_template"), class: "button button__sm button__secondary" %>
38
- </div>
39
- </div>
40
59
  <% end %>
41
60
  </div>
42
61
  </div>
@@ -6,11 +6,11 @@
6
6
  </div>
7
7
 
8
8
  <div class="row columns">
9
- <%= decidim_form_for(@preview_form, url: "", method: :post, authenticity_token: !defined?(skip_authenticity_token), html: { class: "form form-defaults answer-questionnaire" }, data: { "safe-path" => "" }) do |form| %>
9
+ <%= decidim_form_for(@preview_form, url: "", method: :post, authenticity_token: !defined?(skip_authenticity_token), html: { class: "form form-defaults response-questionnaire" }, data: { "safe-path" => "" }) do |form| %>
10
10
  <%= invisible_captcha %>
11
- <% answer_idx = 0 %>
12
- <% cleaned_answer_idx = 0 %>
13
- <% @preview_form.responses_by_step.each_with_index do |step_answers, step_index| %>
11
+ <% response_idx = 0 %>
12
+ <% cleaned_response_idx = 0 %>
13
+ <% @preview_form.responses_by_step.each_with_index do |step_responses, step_index| %>
14
14
  <div id="step-<%= step_index %>" class="<%= step_index.zero? ? "questionnaire-step" : "questionnaire-step hide" %>" data-toggler=".hide">
15
15
  <div class="form__wrapper">
16
16
  <% if @preview_form.total_steps > 1 %>
@@ -19,23 +19,23 @@
19
19
  </h4>
20
20
  <% end %>
21
21
 
22
- <% step_answers.each do |answer| %>
23
- <div class="mb-4 answer" data-max-choices="<%= answer.question.max_choices %>">
24
- <%= fields_for "questionnaire[responses][#{answer_idx}]", answer do |answer_form| %>
22
+ <% step_responses.each do |response| %>
23
+ <div class="mb-4 response" data-max-choices="<%= response.question.max_choices %>">
24
+ <%= fields_for "questionnaire[responses][#{response_idx}]", response do |response_form| %>
25
25
  <%= render(
26
- "decidim/forms/questionnaires/answer",
27
- answer_form:,
28
- answer:,
29
- answer_idx:,
30
- cleaned_answer_idx:,
26
+ "decidim/forms/questionnaires/response",
27
+ response_form:,
28
+ response:,
29
+ response_idx:,
30
+ cleaned_response_idx:,
31
31
  disabled: false
32
32
  ) %>
33
33
  <% end %>
34
34
  </div>
35
- <% if !answer.question.separator? %>
36
- <% cleaned_answer_idx += 1 %>
35
+ <% if !response.question.separator? %>
36
+ <% cleaned_response_idx += 1 %>
37
37
  <% end %>
38
- <% answer_idx += 1 %>
38
+ <% response_idx += 1 %>
39
39
  <% end %>
40
40
 
41
41
  <% if step_index + 1 == @preview_form.total_steps %>
@@ -9,7 +9,7 @@
9
9
  </h1>
10
10
  </div>
11
11
  <% if @templates.any? %>
12
- <div class="table-scroll">
12
+ <div class="table-stacked">
13
13
  <table class="table-list questionnaire-templates">
14
14
  <thead>
15
15
  <tr>
@@ -17,28 +17,63 @@
17
17
  <th><%= t("questionnaire_template.fields.title", scope: "decidim.models") %></th>
18
18
  <th><%= t("questionnaire_template.fields.questions", scope: "decidim.models") %></th>
19
19
  <th><%= t("template.fields.created_at", scope: "decidim.models") %></th>
20
- <th></th>
20
+ <th><%= t("decidim.admin.actions.actions") %></th>
21
21
  </tr>
22
22
  </thead>
23
23
  <tbody>
24
24
  <% @templates.each do |template| %>
25
25
  <tr data-questionnaire_template-id="<%= template.id %>">
26
- <td><%= link_to translated_attribute(template.name), edit_questionnaire_template_path(template) %></td>
27
- <td><%= link_to translated_attribute(template.templatable.title), edit_questionnaire_path(template) %></td>
28
- <td><%= template.templatable.questions.count.to_i %></td>
29
- <td><%= l template.created_at, format: :long %></td>
30
- <td class="table-list__actions">
31
- <% if allowed_to?(:update, :template, questionnaire_template: template) %>
32
- <%= icon_link_to "pencil-line", edit_questionnaire_template_path(template), t("actions.edit", scope: "decidim.admin"), class: "edit" %>
33
- <% end %>
26
+ <td data-label="<%= t("template.name", scope: "decidim.models") %>">
27
+ <%= link_to translated_attribute(template.name), edit_questionnaire_template_path(template) %>
28
+ </td>
29
+ <td data-label="<%= t("questionnaire_template.fields.title", scope: "decidim.models") %>">
30
+ <%= link_to translated_attribute(template.templatable.title), edit_questionnaire_path(template) %>
31
+ </td>
32
+ <td data-label="<%= t("questionnaire_template.fields.questions", scope: "decidim.models") %>">
33
+ <%= template.templatable.questions.count.to_i %>
34
+ </td>
35
+ <td data-label="<%= t("template.fields.created_at", scope: "decidim.models") %>">
36
+ <%= l template.created_at, format: :long %>
37
+ </td>
38
+ <td data-label="<%= t("decidim.admin.actions.actions") %>" class="table-list__actions">
39
+ <button type="button" data-controller="dropdown" data-target="actions-template-<%= template.id %>" aria-label="<%= t("decidim.admin.actions.actions_label", resource: template.name) %>">
40
+ <%= icon "more-fill", class: "text-secondary" %>
41
+ </button>
42
+
43
+ <div class="inline-block relative">
44
+ <ul id="actions-template-<%= template.id %>" class="dropdown dropdown__action" aria-hidden="true">
45
+ <% if allowed_to?(:update, :template, questionnaire_template: template) %>
46
+ <li class="dropdown__item">
47
+ <%= link_to edit_questionnaire_template_path(template), class: "dropdown__button edit" do %>
48
+ <%= icon "pencil-line" %>
49
+ <%= t("actions.edit", scope: "decidim.admin") %>
50
+ <% end %>
51
+ </li>
52
+
53
+ <hr>
54
+ <% end %>
55
+
56
+ <% if allowed_to?(:copy, :template, questionnaire_template: template) %>
57
+ <li class="dropdown__item">
58
+ <%= link_to copy_questionnaire_template_path(template), method: :post, class: "dropdown__button" do %>
59
+ <%= icon "file-copy-line" %>
60
+ <%= t("actions.duplicate", scope: "decidim.admin") %>
61
+ <% end %>
62
+ </li>
34
63
 
35
- <% if allowed_to?(:copy, :template, questionnaire_template: template) %>
36
- <%= icon_link_to "file-copy-line", copy_questionnaire_template_path(template), t("actions.duplicate", scope: "decidim.admin"), method: :post %>
37
- <% end %>
64
+ <hr>
65
+ <% end %>
38
66
 
39
- <% if allowed_to?(:destroy, :template, questionnaire_template: template) %>
40
- <%= icon_link_to "delete-bin-line", questionnaire_template_path(template), t("actions.destroy", scope: "decidim.admin"), method: :delete, data: { confirm: t(".confirm_delete") }, class: "action-icon--remove" %>
41
- <% end %>
67
+ <% if allowed_to?(:destroy, :template, questionnaire_template: template) %>
68
+ <li class="dropdown__item">
69
+ <%= link_to questionnaire_template_path(template), method: :delete, data: { confirm: t(".confirm_delete") }, class: "dropdown__button" do %>
70
+ <%= icon "delete-bin-line" %>
71
+ <%= t("actions.destroy", scope: "decidim.admin") %>
72
+ <% end %>
73
+ </li>
74
+ <% end %>
75
+ </ul>
76
+ </div>
42
77
  </td>
43
78
  </tr>
44
79
  <% end %>