decidim-initiatives 0.30.2 → 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 (146) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +46 -9
  3. data/app/cells/decidim/initiatives/content_blocks/highlighted_initiatives_settings_form/show.erb +7 -2
  4. data/app/cells/decidim/initiatives/initiative_g_cell.rb +5 -1
  5. data/app/commands/decidim/initiatives/admin/publish_initiative.rb +1 -5
  6. data/app/commands/decidim/initiatives/admin/update_initiative.rb +1 -2
  7. data/app/commands/decidim/initiatives/create_initiative.rb +0 -1
  8. data/app/commands/decidim/initiatives/update_initiative.rb +1 -3
  9. data/app/commands/decidim/initiatives/vote_initiative.rb +1 -11
  10. data/app/controllers/concerns/decidim/initiatives/has_signature_workflow.rb +36 -0
  11. data/app/controllers/concerns/decidim/initiatives/needs_initiative.rb +1 -12
  12. data/app/controllers/decidim/initiatives/admin/initiatives_controller.rb +2 -2
  13. data/app/controllers/decidim/initiatives/admin/initiatives_settings_controller.rb +1 -1
  14. data/app/controllers/decidim/initiatives/admin/initiatives_type_scopes_controller.rb +2 -2
  15. data/app/controllers/decidim/initiatives/admin/initiatives_types_controller.rb +2 -2
  16. data/app/controllers/decidim/initiatives/committee_requests_controller.rb +10 -2
  17. data/app/controllers/decidim/initiatives/create_initiative_controller.rb +84 -18
  18. data/app/controllers/decidim/initiatives/initiative_signatures_controller.rb +133 -42
  19. data/app/controllers/decidim/initiatives/initiative_votes_controller.rb +3 -2
  20. data/app/controllers/decidim/initiatives/initiatives_controller.rb +21 -2
  21. data/app/forms/decidim/initiatives/admin/initiative_form.rb +0 -1
  22. data/app/forms/decidim/initiatives/initiative_form.rb +0 -3
  23. data/app/helpers/decidim/initiatives/application_helper.rb +2 -0
  24. data/app/helpers/decidim/initiatives/initiatives_helper.rb +0 -1
  25. data/app/models/decidim/initiative.rb +7 -31
  26. data/app/models/decidim/initiatives_committee_member.rb +1 -1
  27. data/app/models/decidim/initiatives_type.rb +5 -2
  28. data/app/models/decidim/initiatives_vote.rb +2 -2
  29. data/app/packs/entrypoints/decidim_initiatives.js +1 -1
  30. data/app/packs/entrypoints/decidim_initiatives_admin.scss +1 -1
  31. data/app/packs/src/decidim/initiatives/admin/initiatives_types.js +2 -11
  32. data/app/packs/src/decidim/initiatives/admin/invite_users.js +1 -1
  33. data/app/packs/src/decidim/initiatives/application.js +1 -1
  34. data/app/packs/src/decidim/initiatives/check_code.js +114 -0
  35. data/app/packs/src/decidim/initiatives/initiative_creation_wizard.js +16 -0
  36. data/app/packs/src/decidim/initiatives/scoped_type.js +1 -1
  37. data/app/packs/stylesheets/initiatives.scss +16 -2
  38. data/app/permissions/decidim/initiatives/admin/permissions.rb +1 -4
  39. data/app/permissions/decidim/initiatives/permissions.rb +26 -16
  40. data/app/presenters/decidim/initiative_presenter.rb +12 -6
  41. data/app/presenters/decidim/initiatives/admin_log/initiative_presenter.rb +1 -2
  42. data/app/queries/decidim/initiatives/initiatives_stats_followers_count.rb +14 -0
  43. data/app/queries/decidim/initiatives/initiatives_stats_participants_count.rb +14 -0
  44. data/app/serializers/decidim/initiatives/open_data_initiative_serializer.rb +0 -1
  45. data/app/services/decidim/initiatives/data_encryptor.rb +1 -1
  46. data/app/services/decidim/initiatives/legacy_signature_handler.rb +25 -0
  47. data/app/services/decidim/initiatives/progress_notifier.rb +1 -7
  48. data/app/services/decidim/initiatives/signature_handler.rb +248 -0
  49. data/app/services/decidim/initiatives/status_change_notifier.rb +1 -7
  50. data/app/views/decidim/initiatives/admin/committee_requests/index.html.erb +29 -11
  51. data/app/views/decidim/initiatives/admin/exports/_dropdown.html.erb +17 -20
  52. data/app/views/decidim/initiatives/admin/initiatives/_form.html.erb +7 -13
  53. data/app/views/decidim/initiatives/admin/initiatives/_initiative_attachments.erb +2 -2
  54. data/app/views/decidim/initiatives/admin/initiatives/index.html.erb +76 -47
  55. data/app/views/decidim/initiatives/admin/initiatives_types/_form.html.erb +13 -21
  56. data/app/views/decidim/initiatives/admin/initiatives_types/_initiative_type_scopes.html.erb +28 -12
  57. data/app/views/decidim/initiatives/admin/initiatives_types/index.html.erb +33 -15
  58. data/app/views/decidim/initiatives/create_initiative/_committee_member.html.erb +27 -0
  59. data/app/views/decidim/initiatives/create_initiative/_return_to_initiatives_button.html.erb +3 -0
  60. data/app/views/decidim/initiatives/create_initiative/_send_to_technical_validation_button.html.erb +10 -0
  61. data/app/views/decidim/initiatives/create_initiative/_share_committee_link.html.erb +5 -1
  62. data/app/views/decidim/initiatives/create_initiative/fill_data.html.erb +7 -11
  63. data/app/views/decidim/initiatives/create_initiative/finish.html.erb +16 -13
  64. data/app/views/decidim/initiatives/create_initiative/promotal_committee.html.erb +33 -6
  65. data/app/views/decidim/initiatives/create_initiative/select_initiative_type.html.erb +40 -26
  66. data/app/views/decidim/initiatives/initiative_signatures/_sms_code_form.html.erb +22 -0
  67. data/app/views/decidim/initiatives/initiative_signatures/_sms_phone_number_form.html.erb +13 -0
  68. data/app/views/decidim/initiatives/initiative_signatures/fill_personal_data.html.erb +23 -22
  69. data/app/views/decidim/initiatives/initiative_signatures/finish.html.erb +17 -5
  70. data/app/views/decidim/initiatives/initiative_signatures/sms_code.html.erb +6 -8
  71. data/app/views/decidim/initiatives/initiative_signatures/sms_phone_number.html.erb +3 -8
  72. data/app/views/decidim/initiatives/initiative_signatures/update_buttons_and_counters.js.erb +3 -14
  73. data/app/views/decidim/initiatives/initiative_votes/update_buttons_and_counters.js.erb +3 -14
  74. data/app/views/decidim/initiatives/initiatives/_committee_members.html.erb +1 -1
  75. data/app/views/decidim/initiatives/initiatives/_form.html.erb +1 -3
  76. data/app/views/decidim/initiatives/initiatives/_new_initiative_button.html.erb +10 -3
  77. data/app/views/decidim/initiatives/initiatives/_pending_initiatives.html.erb +5 -0
  78. data/app/views/decidim/initiatives/initiatives/index.html.erb +8 -0
  79. data/app/views/decidim/initiatives/initiatives/show.html.erb +2 -2
  80. data/app/views/layouts/decidim/_initiative_signature_creation_header.html.erb +20 -2
  81. data/app/views/layouts/decidim/admin/_manage_initiatives.html.erb +1 -1
  82. data/app/views/layouts/decidim/initiative_signature_creation.html.erb +3 -1
  83. data/config/assets.rb +2 -2
  84. data/config/locales/ar.yml +0 -45
  85. data/config/locales/bg.yml +0 -54
  86. data/config/locales/ca-IT.yml +99 -51
  87. data/config/locales/ca.yml +99 -51
  88. data/config/locales/cs.yml +93 -54
  89. data/config/locales/de.yml +99 -51
  90. data/config/locales/el.yml +0 -45
  91. data/config/locales/en.yml +99 -51
  92. data/config/locales/es-MX.yml +99 -51
  93. data/config/locales/es-PY.yml +99 -51
  94. data/config/locales/es.yml +99 -51
  95. data/config/locales/eu.yml +99 -51
  96. data/config/locales/fi-plain.yml +99 -51
  97. data/config/locales/fi.yml +99 -51
  98. data/config/locales/fr-CA.yml +44 -51
  99. data/config/locales/fr.yml +44 -51
  100. data/config/locales/ga-IE.yml +0 -17
  101. data/config/locales/gl.yml +0 -41
  102. data/config/locales/hu.yml +0 -54
  103. data/config/locales/id-ID.yml +0 -40
  104. data/config/locales/is-IS.yml +0 -22
  105. data/config/locales/it.yml +0 -53
  106. data/config/locales/ja.yml +98 -49
  107. data/config/locales/lb.yml +0 -50
  108. data/config/locales/lt.yml +0 -56
  109. data/config/locales/lv.yml +0 -46
  110. data/config/locales/nl.yml +0 -47
  111. data/config/locales/no.yml +0 -53
  112. data/config/locales/pl.yml +0 -56
  113. data/config/locales/pt-BR.yml +0 -53
  114. data/config/locales/pt.yml +0 -53
  115. data/config/locales/ro-RO.yml +92 -50
  116. data/config/locales/ru.yml +0 -25
  117. data/config/locales/sk.yml +0 -43
  118. data/config/locales/sl.yml +0 -1
  119. data/config/locales/sv.yml +10 -53
  120. data/config/locales/tr-TR.yml +0 -53
  121. data/config/locales/uk.yml +0 -25
  122. data/config/locales/zh-CN.yml +0 -45
  123. data/config/locales/zh-TW.yml +0 -53
  124. data/db/migrate/20250605104500_remove_hashtag_column_initiatives.rb +7 -0
  125. data/lib/decidim/api/initiative_api_type.rb +3 -0
  126. data/lib/decidim/api/initiative_type.rb +23 -4
  127. data/lib/decidim/exporters/initiative_votes_pdf.rb +1 -1
  128. data/lib/decidim/initiatives/default_signature_authorizer.rb +17 -0
  129. data/lib/decidim/initiatives/engine.rb +17 -14
  130. data/lib/decidim/initiatives/participatory_space.rb +15 -1
  131. data/lib/decidim/initiatives/seeds.rb +1 -2
  132. data/lib/decidim/initiatives/signature_workflow_manifest.rb +176 -0
  133. data/lib/decidim/initiatives/signatures.rb +12 -0
  134. data/lib/decidim/initiatives/test/factories.rb +7 -7
  135. data/lib/decidim/initiatives/test/initiatives_signatures_test_helpers.rb +19 -0
  136. data/lib/decidim/initiatives/validatable_authorizations.rb +83 -0
  137. data/lib/decidim/initiatives/version.rb +1 -1
  138. data/lib/decidim/initiatives.rb +23 -12
  139. metadata +33 -21
  140. data/app/events/decidim/initiatives/endorse_initiative_event.rb +0 -13
  141. data/app/forms/decidim/initiatives/vote_form.rb +0 -208
  142. data/app/packs/src/decidim/initiatives/identity_selector_dialog.js +0 -14
  143. data/app/services/decidim/initiatives/pdf_signature_example.rb +0 -110
  144. data/app/views/decidim/initiatives/initiative_signatures/_wizard_steps.html.erb +0 -15
  145. data/app/views/decidim/initiatives/initiatives/_interactions.html.erb +0 -10
  146. data/app/views/layouts/decidim/_initiative_header.html.erb +0 -27
@@ -13,11 +13,9 @@
13
13
 
14
14
  <%= f.hidden_field :type_id %>
15
15
 
16
- <%= f.text_field :title, autofocus: true, value: translated_attribute(f.object.title) %>
16
+ <%= f.text_field :title, value: translated_attribute(f.object.title), data: { controller: "character-counter" } %>
17
17
 
18
- <%= text_editor_for(f, :description, lines: 8, toolbar: :content, value: translated_attribute(f.object.description)) %>
19
-
20
- <%= f.text_field :hashtag %>
18
+ <%= text_editor_for(f, :description, lines: 20, toolbar: :content, value: translated_attribute(f.object.description)) %>
21
19
 
22
20
  <% signature_type_options = signature_type_options(f.object) %>
23
21
  <% if signature_type_options.length == 1 %>
@@ -40,10 +38,6 @@
40
38
  <%= f.areas_select :area_id, areas_for_select(current_organization), prompt: t(".select_area") %>
41
39
  <% end %>
42
40
 
43
- <% if Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.any? %>
44
- <%= f.select :decidim_user_group_id, Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.map { |g| [g.name, g.id] }, include_blank: current_user.name %>
45
- <% end %>
46
-
47
41
  <% if initiative_type.attachments_enabled? %>
48
42
  <%= f.attachment :documents,
49
43
  multiple: true,
@@ -66,9 +60,11 @@
66
60
  <% end %>
67
61
 
68
62
  <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
69
- <%= link_to :back, class: "button button__sm md:button__lg button__text-secondary" do %>
70
- <%= icon "arrow-left-line", class: "fill-current" %>
71
- <%= t(".back") %>
63
+ <% if current_initiative %>
64
+ <%= link_to discard_initiative_path(current_initiative), class: "button button__sm md:button__lg button__text-secondary", method: :delete, data: { confirm: t(".confirm_discard") } do %>
65
+ <%= icon "delete-bin-line", class: "fill-current" %>
66
+ <%= t(".discard") %>
67
+ <% end %>
72
68
  <% end %>
73
69
  <%= f.submit t(".continue"), class: "button button__sm md:button__lg button__secondary", data: { disable_with: true } %>
74
70
  </div>
@@ -6,28 +6,31 @@
6
6
  <% end %>
7
7
  <% end %>
8
8
 
9
+ <% is_validating = current_initiative.validating? %>
10
+
9
11
  <% announcement_body = capture do %>
10
- <%= t("callout_text", scope: "decidim.initiatives.create_initiative.finish") %>
11
- <%= link_to t(".more_information"), decidim.page_path("initiatives"), target: "_blank", class: "button button__sm button__text-secondary block text-left" %>
12
+ <% if is_validating %>
13
+ <%= t("callout_text_validating", scope: "decidim.initiatives.create_initiative.finish") %>
14
+ <% else %>
15
+ <%= t("callout_text_created", scope: "decidim.initiatives.create_initiative.finish") %>
16
+ <% end %>
12
17
  <% end %>
13
18
 
14
19
  <%= cell("decidim/announcement", { body: announcement_body }, callout_class: "secondary") %>
15
20
 
16
21
  <div class="form__wrapper">
17
- <p><%== t "publish_helper_text", scope: "decidim.initiatives.create_initiative.finish_help" %></p>
22
+ <p><%= t "publish_helper_text_html", scope: "decidim.initiatives.create_initiative.finish" %></p>
18
23
  </div>
19
24
 
20
25
  <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
21
- <%= link_to initiatives_path, class: "button button__sm md:button__lg button__text-secondary" do %>
22
- <%= icon "arrow-left-line" %>
23
- <span><%= t(".back_to_initiatives") %></span>
24
- <% end %>
25
-
26
- <%= link_to t(".edit_my_initiative"), edit_initiative_path(current_initiative), class: "button button__sm md:button__lg button__transparent-secondary md:ml-auto" %>
27
-
28
- <%= link_to t(".go_to_my_initiatives"), decidim_initiatives.initiatives_path(filter: { author: "myself", with_any_state: "" }), class: "button button__sm md:button__lg button__secondary" %>
26
+ <% if is_validating %>
27
+ <%= link_to t(".go_to_initiatives"), decidim_initiatives.initiatives_path, class: "button button__sm md:button__lg button__secondary" %>
28
+ <% else %>
29
+ <%= link_to fill_data_create_initiative_index_path, class: "button button__sm md:button__lg button__text-secondary" do %>
30
+ <%= icon "arrow-left-line", class: "fill-current" %>
31
+ <%= t("back", scope: "decidim.initiatives.create_initiative.previous_form") %>
32
+ <% end %>
29
33
 
30
- <% unless promotal_committee_required? %>
31
- <%= link_to t(".send_my_initiative"), decidim_initiatives.send_to_technical_validation_initiative_path(current_initiative), class: "button button__sm md:button__lg button__secondary", data: { confirm: t(".confirm") } %>
34
+ <%= render partial: "send_to_technical_validation_button" %>
32
35
  <% end %>
33
36
  </div>
@@ -1,19 +1,46 @@
1
1
  <% add_decidim_page_title(t("new", scope: "decidim.initiatives.create_initiative.select_initiative_type")) %>
2
2
  <% announcement_body = capture do %>
3
- <%= t ".individual_help_text", committee_size: current_initiative.minimum_committee_members %>
4
- <%= link_to t(".more_information"), decidim.page_path("initiatives"), target: "_blank", class: "button button__sm button__text-secondary block text-left" %>
3
+ <%= t ".individual_help_text" %>
5
4
  <% end %>
6
5
 
7
6
  <%= cell("decidim/announcement", { body: announcement_body }, callout_class: "secondary") %>
8
7
 
9
- <div class="form__wrapper">
10
- <%= render partial: "share_committee_link" %>
8
+ <h3 class="title-decorator text-2xl my-8"><%= t(".invite_link_title") %></h3>
9
+
10
+ <%= render partial: "share_committee_link" %>
11
+
12
+ <h3 class="title-decorator text-2xl mb-8 mt-10"><%= t(".promoters_committee_title") %></h3>
13
+
14
+ <div class="block">
15
+ <span class="help-text mb-4">
16
+ <%= t(".promoters_committee_help_html", committee_members_left: minimum_committee_members - promoters_committee_members.count,
17
+ committee_members_count: promoters_committee_members.count,
18
+ committee_size: minimum_committee_members) %>
19
+ </span>
20
+ </div>
21
+
22
+ <% if promoters_committee_members.count.positive? %>
23
+ <div class="block">
24
+ <% current_initiative.committee_members.each do |request| %>
25
+ <%= render partial: "committee_member", locals: { request: request } %>
26
+ <% end %>
27
+ </div>
28
+ <% end %>
29
+
30
+ <div class="block">
31
+ <span class="help-text mt-4 mb-8 font-semibold">
32
+ <%= t(".promoters_committee_help_2") %>
33
+ </span>
11
34
  </div>
12
35
 
13
36
  <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
14
- <%= link_to :back, class: "button button__sm md:button__lg button__text-secondary" do %>
37
+ <%= link_to fill_data_create_initiative_index_path, class: "button button__sm md:button__lg button__text-secondary" do %>
15
38
  <%= icon "arrow-left-line", class: "fill-current" %>
16
39
  <%= t("back", scope: "decidim.initiatives.create_initiative.previous_form") %>
17
40
  <% end %>
18
- <%= link_to t("continue", scope: "decidim.initiatives.create_initiative.previous_form"), finish_create_initiative_index_path, class: "button button__sm md:button__lg button__secondary" %>
41
+ <div>
42
+ <%= render partial: "send_to_technical_validation_button" %>
43
+ </div>
19
44
  </div>
45
+
46
+ <%= render partial: "return_to_initiatives_button" %>
@@ -1,46 +1,60 @@
1
1
  <% add_decidim_page_title(t("new", scope: "decidim.initiatives.create_initiative.select_initiative_type")) %>
2
2
  <% default_type = available_initiative_types.first %>
3
3
  <% announcement_body = capture do %>
4
- <%= t("select_initiative_type_help", scope: "decidim.initiatives.create_initiative.select_initiative_type") %>
4
+ <%= t("select_initiative_type_help_html", scope: "decidim.initiatives.create_initiative.select_initiative_type") %>
5
+ <br>
5
6
  <%= link_to t("more_information", scope: "decidim.initiatives.create_initiative.select_initiative_type"), decidim.page_path("initiatives"), target: "_blank", class: "button button__sm button__text-secondary block text-left" %>
6
7
  <% end %>
7
8
 
8
9
  <%= cell("decidim/announcement", { body: announcement_body }, callout_class: "secondary") %>
9
10
 
10
- <div class="initiatives__selection">
11
- <% initiative_types_each do |type| %>
12
- <% if allowed_to?(:create, :initiative, { initiative_type: type }) %>
13
- <%= decidim_form_for(@form, url: select_initiative_type_create_initiative_index_path, method: :put, html: { id: "new_initiative_#{type.id}", class: "form-defaults " }) do |f| %>
14
- <%= f.hidden_field :type_id, value: type.id, id: "initiative_type_id_#{type.id}" %>
15
- <button class="card__highlight w-full">
16
- <%= icon "lightbulb-flash-line", class: "verification__icon " %>
17
- <div class="initiatives__selection__text">
18
- <h2 class="h5 text-secondary"><%= translated_attribute(type.title) %></h2>
19
- <span><%= decidim_sanitize_admin(translated_attribute(type.description)) %></span>
20
- </div>
21
- <%= icon "arrow-right-s-line", class: "fill-secondary initiatives__selection__icon" %>
22
- </button>
23
- <% end %>
24
- <% else %>
25
- <div class="card__highlight card__highlight-authorized">
26
- <%= icon "lightbulb-flash-line", class: "verification__icon " %>
27
- <div class="initiatives__selection__text">
28
- <h2 class="h5 text-secondary"><%= translated_attribute(type.title) %></h2>
29
- <span><%= decidim_sanitize_admin(translated_attribute(type.description)) %></span>
30
- <%= action_authorized_link_to(
11
+ <h3 class="title-decorator text-2xl mt-8"><%= t(".subtitle") %></h3>
12
+
13
+ <div class="initiatives__selection" id="select-initiative-type">
14
+ <%= decidim_form_for(@form, url: select_initiative_type_create_initiative_index_path, method: :put, html: { id: "new_initiative_form", class: "form-defaults " }) do |f| %>
15
+ <% initiative_types_each do |type| %>
16
+ <% is_allowed = allowed_to?(:create, :initiative, { initiative_type: type }) %>
17
+
18
+ <%= render layout: "decidim/application/radio_accordion",
19
+ locals: {
20
+ panel_id: type.id,
21
+ title: translated_attribute(type.title),
22
+ input_radio_name: "initiative[type_id]",
23
+ input_radio_value: type.id,
24
+ show_more_text: t("show_more", scope: "decidim.initiatives.create_initiative.select_initiative_type"),
25
+ show_less_text: t("show_less", scope: "decidim.initiatives.create_initiative.select_initiative_type"),
26
+ disabled: !is_allowed
27
+ } do %>
28
+ <p>
29
+ <%= decidim_sanitize_admin(translated_attribute(type.description)) %>
30
+ </p>
31
+
32
+ <% if !is_allowed %>
33
+ <p>
34
+ <%= action_authorized_link_to(
31
35
  :create,
32
36
  fill_data_create_initiative_index_path(initiative: { type_id: type.id }),
33
37
  authorizations_modal_path: authorization_create_modal_initiative_path(type),
34
38
  permissions_holder: type,
35
- class: "button button__sm button__secondary",
39
+ class: "button button__sm button__transparent-secondary",
36
40
  "data-dialog-open": "not-authorized-modal",
37
41
  onclick: "event.preventDefault();"
38
42
  ) do %>
39
43
  <%= t("verification_required", scope: "decidim.initiatives.create_initiative.select_initiative_type") %>
40
- <% end %>
41
- </div>
42
- </div>
44
+ <% end %>
45
+ </p>
46
+ <% end %>
47
+
48
+ <p>
49
+ <%= link_to t("consult_existing_initiatives", scope: "decidim.initiatives.create_initiative.select_initiative_type"),
50
+ initiatives_path(filter: { with_any_type: type.id }), target: "_blank" %>
51
+ </p>
52
+ <% end %>
43
53
  <% end %>
54
+
55
+ <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between border-0">
56
+ <%= f.submit t(".continue"), class: "button button__sm md:button__lg button__secondary" %>
57
+ </div>
44
58
  <% end %>
45
59
  </div>
46
60
 
@@ -0,0 +1,22 @@
1
+ <div class="form__wrapper">
2
+ <label for="mobile_phone_verification_code">
3
+ <%= t("decidim.initiatives.initiative_signatures.sms_phone_number.your_confirmation_code") %>
4
+ <div class="flex gap-x-4" data-check-code>
5
+ <% (0..5).each do |i| %>
6
+ <input pattern="^[0-9]$" maxlength="1" size="1" type="tel" class="" name="mobile_phone[verification_code][<%= i %>]" data-verification-code="<%= i %>">
7
+ <% end %>
8
+ <%= form.hidden_field(:verification_code, data: { check_code_path: sms_code_initiative_signatures_path }) %>
9
+ </div>
10
+ </label>
11
+ <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.sms_phone_number.your_code_is_correct"), callout_class: "success code-correct-announcement hidden") %>
12
+ <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.sms_phone_number.your_code_is_incorrect"), callout_class: "warning code-incorrect-announcement hidden") %>
13
+
14
+ <button type="submit" class="button button__lg button__secondary hidden" disabled data-submit-verification-code>
15
+ <span><%= t("decidim.initiatives.initiative_signatures.sms_phone_number.continue") %></span>
16
+ <%= icon "arrow-right-line", class: "fill-current" %>
17
+ </button>
18
+ </div>
19
+
20
+ <div class="editor-content" data-resend-code>
21
+ <%= t("decidim.initiatives.initiative_signatures.sms_phone_number.resend_code_html", new_code_path: sms_phone_number_initiative_signatures_path) %>
22
+ </div>
@@ -0,0 +1,13 @@
1
+ <% disabled = local_assigns[:disabled] %>
2
+
3
+ <div class="text-left editor-content">
4
+ <p><%= t("decidim.initiatives.initiative_signatures.sms_phone_number.help_enter_your_number") %></p>
5
+ </div>
6
+
7
+ <div class="form__wrapper">
8
+ <%= sms_phone_number_form.text_field :mobile_phone_number, type: "tel", disabled: %>
9
+ <button class="button button__lg button__secondary" <%= disabled ? "disabled" : "" %>>
10
+ <span><%= t("decidim.initiatives.initiative_signatures.sms_phone_number.receive_code") %></span>
11
+ <%= icon "arrow-right-line", class: "fill-current" %>
12
+ </button>
13
+ </div>
@@ -1,32 +1,33 @@
1
- <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.fill_personal_data.help"), callout_class: "secondary") %>
1
+ <% custom_partial_path = lookup_context.exists?(@form.to_partial_path, [], true) && @form.to_partial_path %>
2
+ <% unless custom_partial_path %>
3
+ <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.fill_personal_data.help"), callout_class: "secondary") %>
4
+ <% end %>
2
5
 
3
- <%= decidim_form_for(@form, url: fill_personal_data_initiative_signatures_path, method: :put) do |f| %>
6
+ <%= decidim_form_for(@form, url: fill_personal_data_initiative_signatures_path, method: :put, builder: Decidim::AuthorizationFormBuilder) do |f| %>
4
7
  <%= form_required_explanation %>
5
- <div>
6
- <div class="form__wrapper">
7
- <%= f.text_field :name_and_surname, autofocus: true, required: true %>
8
- </div>
9
-
10
- <div class="form__wrapper">
11
- <%= f.text_field :document_number, required: true %>
12
- </div>
13
8
 
9
+ <% if custom_partial_path %>
10
+ <%= render partial: custom_partial_path, locals: { handler: @form, form: f } %>
11
+ <% else %>
14
12
  <div class="form__wrapper">
15
- <%= f.date_field :date_of_birth, min: 120.years.ago.to_date, max: 16.years.ago.to_date, value: 35.years.ago.to_date %>
13
+ <%= f.all_fields %>
16
14
  </div>
15
+ <% end %>
17
16
 
18
- <div class="form__wrapper">
19
- <%= f.text_field :postal_code, required: true %>
20
- </div>
21
-
22
- <div>
23
- <small>
24
- <%= strip_tags(translated_attribute(extra_data_legal_information)) %>
25
- </small>
26
- </div>
17
+ <div class="editor-content">
18
+ <small>
19
+ <%= decidim_sanitize_admin(translated_attribute(extra_data_legal_information)) %>
20
+ </small>
27
21
  </div>
28
22
 
29
- <div class="form__wrapper-block">
30
- <%= f.submit t(".continue"), class: "button button__sm md:button__lg button__secondary" %>
23
+ <% if current_user.ephemeral? && !current_user.tos_accepted? %>
24
+ <%= render partial: "/decidim/verifications/authorizations/tos_acceptance_field", locals: { form: f } %>
25
+ <% end %>
26
+
27
+ <div class="form__wrapper">
28
+ <button type="submit" class="button button__lg button__secondary">
29
+ <span><%= t(".continue") %></span>
30
+ <%= icon "arrow-right-line", class: "fill-current" %>
31
+ </button>
31
32
  </div>
32
33
  <% end %>
@@ -1,6 +1,18 @@
1
- <%= cell("decidim/announcement", t("decidim.initiatives.initiative_votes.create.success_html", title: translated_attribute(current_initiative.title)), callout_class: "secondary") %>
1
+ <div class="flex flex-col gap-4 items-center text-center my-12">
2
+ <%= success_animation %>
2
3
 
3
- <%= link_to initiative_path(current_initiative), class: "button button__sm md:button__lg button__text-secondary" do %>
4
- <%= icon "arrow-left-line" %>
5
- <%= t(".back_to_initiative") %>
6
- <% end %>
4
+ <h1 class="h1 inline-block">
5
+ <%= t("title", scope: "decidim.initiatives.initiative_signatures.finish") %>
6
+ </h1>
7
+
8
+ <p>
9
+ <%= t("decidim.initiatives.initiative_votes.create.success_html", title: translated_attribute(current_initiative.title)) %>
10
+ </p>
11
+ </div>
12
+
13
+ <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
14
+ <%= link_to initiative_path(current_initiative), class: "button button__sm md:button__lg button__secondary mr-auto !ml-0" do %>
15
+ <%= icon "arrow-left-line", class: "fill-current" %>
16
+ <%= t("back_to_initiative", scope: "decidim.initiatives.initiative_signatures.finish") %>
17
+ <% end %>
18
+ </div>
@@ -1,11 +1,9 @@
1
- <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.sms_code.help"), callout_class: "secondary") %>
1
+ <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.sms_phone_number.confirmed_data"), callout_class: "secondary") %>
2
2
 
3
- <%= decidim_form_for(@form, url: sms_code_initiative_signatures_path, method: :put) do |f| %>
4
- <div class="form__wrapper">
5
- <%= f.text_field :verification_code %>
6
- </div>
3
+ <%= decidim_form_for(@phone_number_form, url: sms_phone_number_initiative_signatures_path, method: :put) do |f| %>
4
+ <%= render partial: "sms_phone_number_form", object: f, locals: { disabled: true } %>
5
+ <% end %>
7
6
 
8
- <div class="form__wrapper-block">
9
- <%= f.submit t(".continue"), class: "button button__sm md:button__lg button__secondary" %>
10
- </div>
7
+ <%= decidim_form_for(@sms_code_form, url: sms_code_initiative_signatures_path, method: :put) do |form| %>
8
+ <%= render partial: "sms_code_form", locals: { handler: @sms_code_form, form: } %>
11
9
  <% end %>
@@ -1,10 +1,5 @@
1
- <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.sms_phone_number.help"), callout_class: "secondary") %>
2
- <%= decidim_form_for(@form, url: sms_phone_number_initiative_signatures_path, method: :put) do |f| %>
3
- <div class="form__wrapper">
4
- <%= f.text_field :mobile_phone_number %>
5
- </div>
1
+ <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.sms_phone_number.confirmed_data"), callout_class: "secondary") %>
6
2
 
7
- <div class="form__wrapper-block">
8
- <%= f.submit t(".continue"), class: "button button__sm md:button__lg button__secondary" %>
9
- </div>
3
+ <%= decidim_form_for(@form, url: sms_phone_number_initiative_signatures_path, method: :put) do |f| %>
4
+ <%= render partial: "sms_phone_number_form", object: f %>
10
5
  <% end %>
@@ -1,21 +1,10 @@
1
1
  (function () {
2
2
  'use strict';
3
3
 
4
- var $initiativeVotesCount = $('#initiative-<%= current_initiative.id %>-progress-bar'),
5
- userIdentitiesDialog = $('#user-identities'),
6
- refreshUrl;
4
+ var $initiativeVotesCount = $('#initiative-<%= current_initiative.id %>-progress-bar');
7
5
 
8
6
  $initiativeVotesCount.html('<%= j(render partial: "decidim/initiatives/initiatives/progress_bar", locals: { initiative: current_initiative }) %>');
9
7
 
10
- // Update the identities dialog, if exists.
11
- if (userIdentitiesDialog.length) {
12
- refreshUrl = userIdentitiesDialog.data('refresh-url');
13
-
14
- $.ajax(refreshUrl).done(function(response){
15
- userIdentitiesDialog.html(response);
16
- });
17
- } else {
18
- var $initiativeVoteButton = $('#initiative-<%= current_initiative.id %>-vote-cabin');
19
- $initiativeVoteButton.html('<%= j(render partial: "decidim/initiatives/initiatives/vote_cabin", locals: { initiative: current_initiative }) %>');
20
- }
8
+ var $initiativeVoteButton = $('#initiative-<%= current_initiative.id %>-vote-cabin');
9
+ $initiativeVoteButton.html('<%= j(render partial: "decidim/initiatives/initiatives/vote_cabin", locals: { initiative: current_initiative }) %>');
21
10
  }());
@@ -1,21 +1,10 @@
1
1
  (function () {
2
2
  'use strict';
3
3
 
4
- var $initiativeVotesCount = $('#initiative-<%= current_initiative.id %>-progress-bar'),
5
- userIdentitiesDialog = $('#user-identities'),
6
- refreshUrl;
4
+ var $initiativeVotesCount = $('#initiative-<%= current_initiative.id %>-progress-bar');
7
5
 
8
6
  $initiativeVotesCount.html('<%= j(render partial: "decidim/initiatives/initiatives/progress_bar", locals: { initiative: current_initiative }) %>');
9
7
 
10
- // Update the identities dialog, if exists.
11
- if (userIdentitiesDialog.length) {
12
- refreshUrl = userIdentitiesDialog.data('refresh-url');
13
-
14
- $.ajax(refreshUrl).done(function(response){
15
- userIdentitiesDialog.html(response);
16
- });
17
- } else {
18
- var $initiativeVoteButton = $('#initiative-<%= current_initiative.id %>-vote-cabin');
19
- $initiativeVoteButton.html('<%= j(render partial: "decidim/initiatives/initiatives/vote_cabin", locals: { initiative: current_initiative }) %>');
20
- }
8
+ var $initiativeVoteButton = $('#initiative-<%= current_initiative.id %>-vote-cabin');
9
+ $initiativeVoteButton.html('<%= j(render partial: "decidim/initiatives/initiatives/vote_cabin", locals: { initiative: current_initiative }) %>');
21
10
  }());
@@ -9,7 +9,7 @@
9
9
  <%= decidim_initiatives.new_initiative_committee_request_url(current_initiative) %>
10
10
  </span>
11
11
  <div class="ml-auto fill-secondary inline-block">
12
- <button type="button" class="button button__sm button__text-secondary" data-clipboard-copy="#urlShareLink-committee">
12
+ <button type="button" class="button button__sm button__text-secondary" data-controller="clipboard-copy" data-clipboard-copy="#urlShareLink-committee">
13
13
  <%= render_committee_tooltip %>
14
14
  <span class="sr-only"><%= t("decidim.shared.share_modal.copy_share_link") %></span>
15
15
  </button>
@@ -15,12 +15,10 @@
15
15
  } %>
16
16
  <% end %>
17
17
 
18
- <%= form.text_field :title, autofocus: true, disabled: !allowed_to?(:update, :initiative, initiative: current_initiative), value: translated_attribute(@form.title) %>
18
+ <%= form.text_field :title, autofocus: true, disabled: !allowed_to?(:update, :initiative, initiative: current_initiative), value: translated_attribute(@form.title), data: { controller: "character-counter" } %>
19
19
 
20
20
  <%= text_editor_for(form, :description, toolbar: :content, lines: 8, disabled: !allowed_to?(:update, :initiative, initiative: current_initiative), value: translated_attribute(@form.description)) %>
21
21
 
22
- <%= form.text_field :hashtag, disabled: !allowed_to?(:update, :initiative, initiative: current_initiative) %>
23
-
24
22
  <% if @form.state_updatable? %>
25
23
  <%= form.select :state, Decidim::Initiative.states.keys.map { |state| [I18n.t(state, scope: "decidim.initiatives.admin_states"), state] }, {} %>
26
24
  <% end %>
@@ -1,9 +1,16 @@
1
1
  <% if Decidim::Initiatives.creation_enabled %>
2
2
  <% if available_initiative_types.size > 1 %>
3
3
  <% if current_user %>
4
- <%= link_to create_initiative_path(:select_initiative_type), class: "!px-4 title-action__action button button__xl button__secondary w-full" do %>
5
- <%= t("new_initiative", scope: "decidim.initiatives.initiatives.index_header") %>
6
- <%= icon "add-fill" %>
4
+ <% if current_user.ephemeral? %>
5
+ <button class="!px-4 button button__xl button__secondary w-full" disabled>
6
+ <%= t("new_initiative", scope: "decidim.initiatives.initiatives.index_header") %>
7
+ <%= icon "add-fill" %>
8
+ </button>
9
+ <% else %>
10
+ <%= link_to create_initiative_path(:select_initiative_type), class: "!px-4 title-action__action button button__xl button__secondary w-full" do %>
11
+ <%= t("new_initiative", scope: "decidim.initiatives.initiatives.index_header") %>
12
+ <%= icon "add-fill" %>
13
+ <% end %>
7
14
  <% end %>
8
15
  <% else %>
9
16
  <% content_for(:redirect_after_login) { create_initiative_url(:select_initiative_type) } %>
@@ -0,0 +1,5 @@
1
+ <h2 class="h5 md:h3 decorator"><%= t("title", scope: "decidim.initiatives.initiatives.pending_initiatives") %></h2>
2
+
3
+ <div class="card__grid-grid">
4
+ <%= render pending_initiatives %>
5
+ </div>
@@ -22,6 +22,14 @@ edit_link(
22
22
  <%= render layout: "layouts/decidim/shared/layout_two_col" do %>
23
23
  <%= participatory_space_floating_help %>
24
24
 
25
+ <% if pending_initiatives.any? %>
26
+ <div class="pending-initiatives">
27
+ <section id="pending_initiatives" class="layout-main__section layout-main__heading">
28
+ <%= render partial: "pending_initiatives" %>
29
+ </section>
30
+ </div>
31
+ <% end %>
32
+
25
33
  <section id="initiatives" class="layout-main__section layout-main__heading">
26
34
  <%= render partial: "initiatives" %>
27
35
  </section>
@@ -58,7 +58,7 @@ edit_link(
58
58
  </span>
59
59
  <div class="ml-auto fill-secondary inline-block">
60
60
  <input id="urlShareLink-committee" type="text" class="!hidden" value="<%= decidim_initiatives.new_initiative_committee_request_url(current_initiative) %>" readonly>
61
- <button type="button" class="button button__sm button__text-secondary" data-clipboard-copy="#urlShareLink-committee">
61
+ <button type="button" class="button button__sm button__text-secondary" data-controller="clipboard-copy" data-clipboard-copy="#urlShareLink-committee">
62
62
  <%= render_committee_tooltip %>
63
63
  <span class="sr-only"><%= t("decidim.shared.share_modal.copy_share_link") %></span>
64
64
  </button>
@@ -181,7 +181,7 @@ edit_link(
181
181
 
182
182
  <section class="layout-main__section">
183
183
  <% if tabs.any? %>
184
- <div class="mt-8" data-component="accordion" data-multiselectable="false" data-collapsible="false">
184
+ <div class="mt-8" data-controller="accordion" data-multiselectable="false" data-collapsible="false">
185
185
  <ul class="tab-x-container">
186
186
  <% tabs.each_with_index do |tab, i| %>
187
187
  <li>
@@ -1,6 +1,24 @@
1
1
  <div class="flex justify-center">
2
2
  <h1 class="title-decorator my-12">
3
- <%= t(".title", initiative_title: translated_attribute(current_initiative.title)) %>
3
+ <% if content_for :title %>
4
+ <%= yield :title %>
5
+ <% else %>
6
+ <%= t("verify_your_identity", scope: "layouts.decidim.initiative_signature_creation_header") %>
7
+ <% end %>
4
8
  </h1>
5
9
  </div>
6
- <%= render partial: "wizard_steps" %>
10
+
11
+ <% if content_for :help %>
12
+ <%= yield :help %>
13
+ <% else %>
14
+ <div class="form__wrapper">
15
+ <p>
16
+ <%= t(
17
+ "help_information_html",
18
+ initiative_title: translated_attribute(current_initiative.title),
19
+ initiative_author: decidim_sanitize(present(current_initiative.author).name),
20
+ scope: "layouts.decidim.initiative_signature_creation_header"
21
+ ) %>
22
+ </p>
23
+ </div>
24
+ <% end %>
@@ -1,5 +1,5 @@
1
1
  <div class="inline-block relative">
2
- <%= button_tag data: { component: "dropdown", target: "initiatives-dropdown-menu-settings" }, class: "dropdown__trigger button button__transparent" do %>
2
+ <%= button_tag data: { controller: "dropdown", target: "initiatives-dropdown-menu-settings" }, class: "dropdown__trigger button button__transparent" do %>
3
3
  <span>
4
4
  <%= t("menu.manage", scope: "decidim.admin") %>
5
5
  </span>
@@ -1,6 +1,8 @@
1
1
  <%= render "layouts/decidim/application" do %>
2
2
  <%= render layout:"layouts/decidim/shared/layout_center", locals: { main_enabled: false } do %>
3
- <%= render partial: "layouts/decidim/initiative_signature_creation_header" %>
3
+ <% if action_name == "fill_personal_data" %>
4
+ <%= render partial: "layouts/decidim/initiative_signature_creation_header" %>
5
+ <% end %>
4
6
  <%= yield %>
5
7
  <%= append_javascript_pack_tag "decidim_initiatives" %>
6
8
  <% end %>
data/config/assets.rb CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  base_path = File.expand_path("..", __dir__)
4
4
 
5
- Decidim::Webpacker.register_path("#{base_path}/app/packs")
6
- Decidim::Webpacker.register_entrypoints(
5
+ Decidim::Shakapacker.register_path("#{base_path}/app/packs")
6
+ Decidim::Shakapacker.register_entrypoints(
7
7
  decidim_initiatives: "#{base_path}/app/packs/entrypoints/decidim_initiatives.js",
8
8
  decidim_initiatives_admin: "#{base_path}/app/packs/entrypoints/decidim_initiatives_admin.js"
9
9
  )