decidim-collaborative_texts 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 (159) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +24 -0
  3. data/Rakefile +3 -0
  4. data/app/cells/decidim/collaborative_texts/document_cell.rb +23 -0
  5. data/app/cells/decidim/collaborative_texts/document_l_cell.rb +15 -0
  6. data/app/commands/decidim/collaborative_texts/admin/create_document.rb +25 -0
  7. data/app/commands/decidim/collaborative_texts/admin/publish_document.rb +52 -0
  8. data/app/commands/decidim/collaborative_texts/admin/unpublish_document.rb +44 -0
  9. data/app/commands/decidim/collaborative_texts/admin/update_document.rb +101 -0
  10. data/app/commands/decidim/collaborative_texts/admin/update_document_settings.rb +13 -0
  11. data/app/commands/decidim/collaborative_texts/create_suggestion.rb +28 -0
  12. data/app/commands/decidim/collaborative_texts/rollout.rb +50 -0
  13. data/app/controllers/concerns/decidim/collaborative_texts/admin/filterable.rb +23 -0
  14. data/app/controllers/decidim/collaborative_texts/admin/application_controller.rb +15 -0
  15. data/app/controllers/decidim/collaborative_texts/admin/documents_controller.rb +142 -0
  16. data/app/controllers/decidim/collaborative_texts/application_controller.rb +14 -0
  17. data/app/controllers/decidim/collaborative_texts/documents_controller.rb +57 -0
  18. data/app/controllers/decidim/collaborative_texts/suggestions_controller.rb +55 -0
  19. data/app/events/decidim/collaborative_texts/suggestion_accepted_event.rb +6 -0
  20. data/app/forms/decidim/collaborative_texts/admin/document_form.rb +29 -0
  21. data/app/forms/decidim/collaborative_texts/rollout_form.rb +26 -0
  22. data/app/forms/decidim/collaborative_texts/suggestion_form.rb +42 -0
  23. data/app/helpers/decidim/collaborative_texts/application_helper.rb +20 -0
  24. data/app/models/decidim/collaborative_texts/application_record.rb +10 -0
  25. data/app/models/decidim/collaborative_texts/document.rb +78 -0
  26. data/app/models/decidim/collaborative_texts/suggestion.rb +36 -0
  27. data/app/models/decidim/collaborative_texts/version.rb +35 -0
  28. data/app/packs/entrypoints/decidim_collaborative_texts.js +7 -0
  29. data/app/packs/images/decidim/collaborative_texts/decidim_collaborative_texts.svg +1 -0
  30. data/app/packs/src/decidim/collaborative_texts/document.js +168 -0
  31. data/app/packs/src/decidim/collaborative_texts/editor.js +80 -0
  32. data/app/packs/src/decidim/collaborative_texts/init_documents.js +27 -0
  33. data/app/packs/src/decidim/collaborative_texts/manager.js +106 -0
  34. data/app/packs/src/decidim/collaborative_texts/selection.js +106 -0
  35. data/app/packs/src/decidim/collaborative_texts/suggestion.js +243 -0
  36. data/app/packs/src/decidim/collaborative_texts/suggestions_list.js +103 -0
  37. data/app/packs/src/decidim/collaborative_texts/test/document.test.js +83 -0
  38. data/app/packs/src/decidim/collaborative_texts/test/manager.test.js +149 -0
  39. data/app/packs/src/decidim/collaborative_texts/test/selection.test.js +125 -0
  40. data/app/packs/src/decidim/collaborative_texts/test/suggestions.test.js +233 -0
  41. data/app/packs/src/decidim/collaborative_texts/test/toc.test.js +70 -0
  42. data/app/packs/src/decidim/collaborative_texts/toc.js +48 -0
  43. data/app/packs/stylesheets/decidim/collaborative_texts/collaborative_texts.scss +287 -0
  44. data/app/permissions/decidim/collaborative_texts/admin/permissions.rb +28 -0
  45. data/app/permissions/decidim/collaborative_texts/permissions.rb +36 -0
  46. data/app/presenters/decidim/collaborative_texts/admin_log/document_presenter.rb +54 -0
  47. data/app/presenters/decidim/collaborative_texts/admin_log/suggestion_presenter.rb +62 -0
  48. data/app/presenters/decidim/collaborative_texts/admin_log/suggestion_resource_presenter.rb +20 -0
  49. data/app/presenters/decidim/collaborative_texts/admin_log/version_presenter.rb +53 -0
  50. data/app/presenters/decidim/collaborative_texts/official_author_presenter.rb +11 -0
  51. data/app/presenters/decidim/collaborative_texts/suggestion_presenter.rb +57 -0
  52. data/app/views/decidim/collaborative_texts/admin/documents/_actions.html.erb +82 -0
  53. data/app/views/decidim/collaborative_texts/admin/documents/_document-tr.html.erb +15 -0
  54. data/app/views/decidim/collaborative_texts/admin/documents/_documents-thead.html.erb +7 -0
  55. data/app/views/decidim/collaborative_texts/admin/documents/_draft_options.html.erb +6 -0
  56. data/app/views/decidim/collaborative_texts/admin/documents/_form.html.erb +16 -0
  57. data/app/views/decidim/collaborative_texts/admin/documents/_non_draft_options.html.erb +9 -0
  58. data/app/views/decidim/collaborative_texts/admin/documents/_versions.html.erb +18 -0
  59. data/app/views/decidim/collaborative_texts/admin/documents/edit.html.erb +33 -0
  60. data/app/views/decidim/collaborative_texts/admin/documents/edit_settings.html.erb +18 -0
  61. data/app/views/decidim/collaborative_texts/admin/documents/index.html.erb +32 -0
  62. data/app/views/decidim/collaborative_texts/admin/documents/manage_trash.html.erb +19 -0
  63. data/app/views/decidim/collaborative_texts/admin/documents/new.html.erb +18 -0
  64. data/app/views/decidim/collaborative_texts/admin/settings/_form.html.erb +9 -0
  65. data/app/views/decidim/collaborative_texts/documents/_editor_template.html.erb +15 -0
  66. data/app/views/decidim/collaborative_texts/documents/_manager.html.erb +9 -0
  67. data/app/views/decidim/collaborative_texts/documents/_suggestions_box_item_template.html.erb +33 -0
  68. data/app/views/decidim/collaborative_texts/documents/_suggestions_box_template.html.erb +20 -0
  69. data/app/views/decidim/collaborative_texts/documents/index.html.erb +29 -0
  70. data/app/views/decidim/collaborative_texts/documents/show.html.erb +70 -0
  71. data/config/assets.rb +8 -0
  72. data/config/locales/am-ET.yml +1 -0
  73. data/config/locales/ar.yml +1 -0
  74. data/config/locales/bg.yml +1 -0
  75. data/config/locales/bn-BD.yml +1 -0
  76. data/config/locales/bs-BA.yml +1 -0
  77. data/config/locales/ca-IT.yml +154 -0
  78. data/config/locales/ca.yml +154 -0
  79. data/config/locales/cs.yml +122 -0
  80. data/config/locales/da.yml +1 -0
  81. data/config/locales/de.yml +154 -0
  82. data/config/locales/el.yml +1 -0
  83. data/config/locales/en.yml +154 -0
  84. data/config/locales/eo.yml +1 -0
  85. data/config/locales/es-MX.yml +154 -0
  86. data/config/locales/es-PY.yml +154 -0
  87. data/config/locales/es.yml +154 -0
  88. data/config/locales/et.yml +1 -0
  89. data/config/locales/eu.yml +154 -0
  90. data/config/locales/fa-IR.yml +1 -0
  91. data/config/locales/fi-plain.yml +154 -0
  92. data/config/locales/fi.yml +154 -0
  93. data/config/locales/fr-CA.yml +125 -0
  94. data/config/locales/fr.yml +125 -0
  95. data/config/locales/ga-IE.yml +1 -0
  96. data/config/locales/gl.yml +1 -0
  97. data/config/locales/gn-PY.yml +1 -0
  98. data/config/locales/he-IL.yml +1 -0
  99. data/config/locales/hr.yml +1 -0
  100. data/config/locales/hu.yml +1 -0
  101. data/config/locales/id-ID.yml +1 -0
  102. data/config/locales/is-IS.yml +1 -0
  103. data/config/locales/it.yml +1 -0
  104. data/config/locales/ja.yml +153 -0
  105. data/config/locales/ka-GE.yml +1 -0
  106. data/config/locales/kaa.yml +1 -0
  107. data/config/locales/ko.yml +1 -0
  108. data/config/locales/lb.yml +1 -0
  109. data/config/locales/lo-LA.yml +1 -0
  110. data/config/locales/lt.yml +1 -0
  111. data/config/locales/lv.yml +1 -0
  112. data/config/locales/mt.yml +1 -0
  113. data/config/locales/nl.yml +1 -0
  114. data/config/locales/no.yml +6 -0
  115. data/config/locales/oc-FR.yml +1 -0
  116. data/config/locales/om-ET.yml +1 -0
  117. data/config/locales/pl.yml +1 -0
  118. data/config/locales/pt-BR.yml +1 -0
  119. data/config/locales/pt.yml +1 -0
  120. data/config/locales/ro-RO.yml +89 -0
  121. data/config/locales/ru.yml +1 -0
  122. data/config/locales/si-LK.yml +1 -0
  123. data/config/locales/sk.yml +1 -0
  124. data/config/locales/sl.yml +1 -0
  125. data/config/locales/so-SO.yml +1 -0
  126. data/config/locales/sq-AL.yml +1 -0
  127. data/config/locales/sr-CS.yml +1 -0
  128. data/config/locales/sv.yml +117 -0
  129. data/config/locales/sw-KE.yml +1 -0
  130. data/config/locales/th-TH.yml +1 -0
  131. data/config/locales/ti-ER.yml +1 -0
  132. data/config/locales/tr-TR.yml +69 -0
  133. data/config/locales/uk.yml +1 -0
  134. data/config/locales/val-ES.yml +1 -0
  135. data/config/locales/vi.yml +1 -0
  136. data/config/locales/zh-CN.yml +1 -0
  137. data/config/locales/zh-TW.yml +1 -0
  138. data/db/migrate/20250205215038_create_decidim_collaborative_texts_documents.rb +16 -0
  139. data/db/migrate/20250213113536_create_collaborative_texts_versions.rb +13 -0
  140. data/db/migrate/20250227204839_create_collaborative_texts_suggestions.rb +13 -0
  141. data/db/migrate/20250312140133_add_counter_caches_to_collaborative_texts_documents.rb +13 -0
  142. data/db/migrate/20250408205231_add_counter_caches_to_collaborative_text_versions.rb +8 -0
  143. data/decidim-collaborative_texts.gemspec +36 -0
  144. data/lib/decidim/api/document_input_filter.rb +29 -0
  145. data/lib/decidim/api/document_input_sort.rb +14 -0
  146. data/lib/decidim/api/document_type.rb +31 -0
  147. data/lib/decidim/api/documents_type.rb +39 -0
  148. data/lib/decidim/api/suggestion_type.rb +18 -0
  149. data/lib/decidim/api/version_type.rb +21 -0
  150. data/lib/decidim/collaborative_texts/admin.rb +10 -0
  151. data/lib/decidim/collaborative_texts/admin_engine.rb +34 -0
  152. data/lib/decidim/collaborative_texts/api.rb +12 -0
  153. data/lib/decidim/collaborative_texts/component.rb +54 -0
  154. data/lib/decidim/collaborative_texts/engine.rb +28 -0
  155. data/lib/decidim/collaborative_texts/seeds.rb +117 -0
  156. data/lib/decidim/collaborative_texts/test/factories.rb +80 -0
  157. data/lib/decidim/collaborative_texts/version.rb +9 -0
  158. data/lib/decidim/collaborative_texts.rb +13 -0
  159. metadata +233 -0
@@ -0,0 +1,15 @@
1
+ <tr>
2
+ <td data-label="<%= t("models.collaborative_text.fields.title", scope: "decidim.collaborative_texts") %>">
3
+ <% if allowed_to? :update, :collaborative_text, document: document %>
4
+ <%= link_to translated_attribute(document.title), edit_document_path(document) %><br>
5
+ <% else %>
6
+ <%= translated_attribute(document.title) %><br>
7
+ <% end %>
8
+ </td>
9
+ <td data-label="<%= t("models.collaborative_text.fields.suggestions", scope: "decidim.collaborative_texts") %>">
10
+ <%= t("booleans.#{document.accepting_suggestions}") %>
11
+ </td>
12
+ <td class="table-list__actions" data-label="<%= t("actions.title", scope: "decidim.collaborative_texts") %>">
13
+ <%= render partial: "decidim/collaborative_texts/admin/documents/actions", locals: { document:, view: } %>
14
+ </td>
15
+ </tr>
@@ -0,0 +1,7 @@
1
+ <thead>
2
+ <tr>
3
+ <th><%= t("models.collaborative_text.fields.title", scope: "decidim.collaborative_texts") %></th>
4
+ <th><%= t("models.collaborative_text.fields.suggestions", scope: "decidim.collaborative_texts") %></th>
5
+ <th><%= t("actions.title", scope: "decidim.collaborative_texts") %></th>
6
+ </tr>
7
+ </thead>
@@ -0,0 +1,6 @@
1
+ <div class="row column">
2
+ <%= form.check_box :draft, help_text: t(".draft_help_html"), label: t(".draft") %>
3
+ </div>
4
+ <div class="row column">
5
+ <%= form.check_box :accepting_suggestions, help_text: t(".accepting_suggestions_help"), label: t(".accepting_suggestions") %>
6
+ </div>
@@ -0,0 +1,16 @@
1
+ <div class="form__wrapper">
2
+ <div class="card">
3
+ <div class="card-section">
4
+ <div class="row column">
5
+ <%= form.text_field :title, autofocus: true, aria: { label: :title } %>
6
+ </div>
7
+
8
+ <div class="row column">
9
+ <% if local_assigns[:has_suggestions] %>
10
+ <%= cell("decidim/announcement", t("decidim.collaborative_texts.admin.documents.edit.document_has_suggestions_html", url: resource_locator(document).path), callout_class: "warning") %>
11
+ <% end %>
12
+ <%= form.editor :body, lines: 40, aria: { label: :body }, disabled: local_assigns[:has_suggestions] %>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </div>
@@ -0,0 +1,9 @@
1
+ <% if document.has_suggestions? %>
2
+ <div class="row column">
3
+ <%= form.check_box :draft, help_text: t(".draft_help_html"), label: t(".create_draft") %>
4
+ </div>
5
+ <% end %>
6
+
7
+ <div class="row column">
8
+ <%= form.check_box :accepting_suggestions, help_text: t(".enable_suggestions_help"), label: t(".enable_suggestions") %>
9
+ </div>
@@ -0,0 +1,18 @@
1
+ <h4 class="h4 mb-4"><%= t("decidim.collaborative_texts.admin.documents.edit.previous_versions") %></h4>
2
+ <ul class="previous-versions">
3
+ <% document.document_versions.each do |version| %>
4
+ <% next unless version && version.id %>
5
+ <li class="<%= "underline" if version == document.current_version %>">
6
+ <%= t("decidim.collaborative_texts.admin.documents.edit.version", version_number: version.version_number,
7
+ created_at: l(version.created_at,
8
+ format: :decidim_short),
9
+ suggestions_count: version.suggestions.count) %>
10
+ <% if version == document.consolidated_version %>
11
+ (<%= t("decidim.collaborative_texts.admin.documents.edit.public_version") %>)
12
+ <% end %>
13
+ <% if version.draft? %>
14
+ (<%= t("decidim.collaborative_texts.admin.documents.edit.draft") %>)
15
+ <% end %>
16
+ </li>
17
+ <% end %>
18
+ </ul>
@@ -0,0 +1,33 @@
1
+ <% add_decidim_page_title(t(".title")) %>
2
+ <div class="item_show__header">
3
+ <h1 class="item_show__header-title">
4
+ <%= t(".title") %>
5
+ </h1>
6
+ </div>
7
+ <div class="item__edit item__edit-1col">
8
+ <div class="item__edit-form">
9
+ <%= decidim_form_for(@form, url: document_path(document), html: { class: "form-defaults form edit_document" }) do |f| %>
10
+ <%= render partial: "form", object: f, locals: { has_suggestions: document.has_suggestions? } %>
11
+
12
+ <div class="form__wrapper">
13
+ <div class="card">
14
+ <div class="card-section">
15
+ <% if document.draft? %>
16
+ <%= render "draft_options", form: f %>
17
+ <% else %>
18
+ <%= render "non_draft_options", form: f %>
19
+ <% end %>
20
+ </div>
21
+ </div>
22
+ </div>
23
+
24
+ <%= render partial: "versions" %>
25
+
26
+ <div class="item__edit-sticky">
27
+ <div class="item__edit-sticky-container">
28
+ <%= f.submit t(".update"), class: "button button__sm button__secondary" %>
29
+ </div>
30
+ </div>
31
+ <% end %>
32
+ </div>
33
+ </div>
@@ -0,0 +1,18 @@
1
+ <% add_decidim_page_title(t(".title")) %>
2
+ <div class="item_show__header">
3
+ <h1 class="item_show__header-title">
4
+ <%= t(".title") %>
5
+ </h1>
6
+ </div>
7
+ <div class="item__edit item__edit-1col">
8
+ <div class="item__edit-form">
9
+ <%= decidim_form_for(@form, url: update_settings_document_path(document), html: { class: "form-defaults form edit_document" }) do |f| %>
10
+ <%= render partial: "decidim/collaborative_texts/admin/settings/form", object: f %>
11
+ <div class="item__edit-sticky">s
12
+ <div class="item__edit-sticky-container">
13
+ <%= f.submit t(".update"), class: "button button__sm button__secondary" %>
14
+ </div>
15
+ </div>
16
+ <% end %>
17
+ </div>
18
+ </div>
@@ -0,0 +1,32 @@
1
+ <% add_decidim_page_title(t(".title")) %>
2
+ <div class="card">
3
+ <div class="item_show__header">
4
+ <h1 class="item_show__header-title">
5
+ <%= t(".title") %>
6
+ <%= link_to t("actions.new", scope: "decidim.collaborative_texts"), new_document_path, class: "button button__sm button__secondary" %>
7
+ <%= render partial: "decidim/admin/components/resource_action" %>
8
+ </h1>
9
+ </div>
10
+ <div class="table-stacked">
11
+ <table class="table-list">
12
+ <%= render partial: "documents-thead" %>
13
+ <tbody>
14
+ <%= render partial: "decidim/collaborative_texts/admin/documents/document-tr",
15
+ collection: documents,
16
+ as: :document,
17
+ locals: { view: :index } %>
18
+ </tbody>
19
+ </table>
20
+ </div>
21
+ <% if allowed_to? :manage_trash, :collaborative_text, participatory_space: current_participatory_space %>
22
+ <div class="card mt-4">
23
+ <%= link_to manage_trash_documents_path, class: "flex items-center text-secondary" do %>
24
+ <%= icon "delete-bin-2-line", class: "mr-2 fill-current text-secondary", role: "img" %>
25
+ <%= t("actions.view_deleted_documents", scope: "decidim.collaborative_texts") %>
26
+ <span class="ml-2">
27
+ <%= icon_with_tooltip("information-line", t("actions.deleted_document_info", scope: "decidim.collaborative_texts")) %>
28
+ </span>
29
+ <% end %>
30
+ </div>
31
+ <% end %>
32
+ </div>
@@ -0,0 +1,19 @@
1
+ <% add_decidim_page_title(t(".title")) %>
2
+ <div class="card">
3
+ <div class="item_show__header">
4
+ <h1 class="item_show__header-title">
5
+ <%= t(".title") %>
6
+ </h1>
7
+ </div>
8
+ <div class="table-stacked">
9
+ <table class="table-list">
10
+ <%= render partial: "documents-thead" %>
11
+ <tbody>
12
+ <%= render partial: "decidim/collaborative_texts/admin/documents/document-tr",
13
+ collection: trashable_deleted_collection,
14
+ as: :document,
15
+ locals: { view: :deleted } %>
16
+ </tbody>
17
+ </table>
18
+ </div>
19
+ </div>
@@ -0,0 +1,18 @@
1
+ <% add_decidim_page_title(t(".title")) %>
2
+ <div class="item_show__header">
3
+ <h1 class="item_show__header-title">
4
+ <%= t(".title") %>
5
+ </h1>
6
+ </div>
7
+ <div class="item__edit item__edit-1col">
8
+ <div class="item__edit-form">
9
+ <%= decidim_form_for(@form, url: documents_path, method: :post, html: { class: "form form-defaults new_document" }) do |f| %>
10
+ <%= render partial: "form", object: f, locals: { title: t(".title") } %>
11
+ <div class="item__edit-sticky">
12
+ <div class="item__edit-sticky-container">
13
+ <%= f.submit(t(".create"), class: "button button__sm button__secondary") %>
14
+ </div>
15
+ </div>
16
+ <% end %>
17
+ </div>
18
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="form__wrapper">
2
+ <div class="card">
3
+ <div class="card-section">
4
+ <div class="row column">
5
+ <%= form.translated :editor, :announcement, lines: 15, aria: { label: :announcement } %>
6
+ </div>
7
+ </div>
8
+ </div>
9
+ </div>
@@ -0,0 +1,15 @@
1
+ <div class="collaborative-texts-editor-header">
2
+ <%= icon("edit-line") %>
3
+ <button class="collaborative-texts-button-cancel" aria-label="<%= t("decidim.collaborative_texts.document.cancel") %>" type="button">
4
+ <span aria-hidden="true">&times;</span>
5
+ </button>
6
+ </div>
7
+ <div class="collaborative-texts-editor-profile">
8
+ <%= cell("decidim/author", current_user.presenter) if user_signed_in? %>
9
+ </div>
10
+ <div class="collaborative-texts-editor-container"></div>
11
+ <div class="collaborative-texts-editor-menu">
12
+ <%= action_authorized_button_to(:suggest, "#suggest", disabled: true, class: "collaborative-texts-button-save button button__primary button__sm") do %>
13
+ <%= t("decidim.collaborative_texts.document.save") %>
14
+ <% end %>
15
+ </div>
@@ -0,0 +1,9 @@
1
+ <div>
2
+ <%= button_tag(t("decidim.collaborative_texts.document.rollout.new"), class:"button button__lg button__primary", data: { collaborative_texts_manager_rollout: true }) %>
3
+ <%= button_tag(t("decidim.collaborative_texts.document.consolidate.new"), class:"button button__lg button__transparent-primary", data: { collaborative_texts_manager_consolidate: true }) %>
4
+ <%= button_tag(t("decidim.collaborative_texts.document.cancel"), class:"button button__lg button__transparent-primary", data: { collaborative_texts_manager_cancel: true }) %>
5
+ </div>
6
+ <% %w(draft_counter consolidate_counter).each do |key| %>
7
+ <p class="help-text"><%= t("decidim.collaborative_texts.document.#{key}", applied: '<span class="collaborative-texts-manager-applied"></span>',
8
+ pending: '<span class="collaborative-texts-manager-pending"></span>' ).html_safe %></p>
9
+ <% end %>
@@ -0,0 +1,33 @@
1
+ <div class="collaborative-texts-suggestions-box-item-header">
2
+ <div>{{PROFILE}}</div>
3
+ <div class="relative z-1">
4
+ <button class="collaborative-texts-suggestions-box-item-dropdown"
5
+ id="dropdown-trigger-{{ID}}"
6
+ data-controller="dropdown"
7
+ data-target="dropdown-menu-{{ID}}"
8
+ data-auto-close="true"
9
+ aria-label="<%= t("decidim.collaborative_texts.document.controls_label") %>">
10
+ <span class="sr-only"><%= t("decidim.collaborative_texts.document.controls_label") %></span>
11
+ <%# NOTE: having two times the icon call is intentional, as that is how the `dropdown` CSS code is done %>
12
+ <%= icon "more-fill" %>
13
+ <%= icon "more-fill" %>
14
+ </button>
15
+
16
+ <div class="collaborative-texts-suggestions-box-header-menu" id="dropdown-menu-{{ID}}" role="menu" aria-labelledby="dropdown-trigger-{{ID}}" tabindex="-1" aria-hidden="true">
17
+ <ul class="dropdown dropdown__bottom divide-y divide-gray-3 pt-1 pb-0" role="menu">
18
+ <li role="menuitem" class="dropdown__item">
19
+ <button class="button-apply dropdown__button">
20
+ <%= icon "checkbox-circle-line" %>
21
+ <%= t("decidim.collaborative_texts.document.apply") %>
22
+ </button>
23
+ <button class="button-restore dropdown__button">
24
+ <%= icon "arrow-go-back-line" %>
25
+ <%= t("decidim.collaborative_texts.document.restore") %>
26
+ </button>
27
+ </li>
28
+ </ul>
29
+ </div>
30
+ </div>
31
+ </div>
32
+
33
+ <div class="collaborative-texts-suggestions-box-item-text"></div>
@@ -0,0 +1,20 @@
1
+ <div data-controller="accordion" id="collaborative-texts-box-{{ID}}">
2
+ <button class="button button__sm button__text-secondary mt-2 mb-4 px-2" data-controls="panel-box-{{ID}}" aria-label="<%= t("decidim.collaborative_texts.document.toggle") %>" aria-expanded="false">
3
+ <span>
4
+ <%= icon("award-line", class: "icon icon-pending") %>
5
+ <%= icon("check-line", class: "icon icon-hover") %>
6
+ <%= icon("check-double-fill", class: "icon icon-applied") %>
7
+
8
+ <%= counter = t("decidim.collaborative_texts.document.suggestions_count", count: '<span class="collaborative-texts-suggestions-box-items-count"></span>').html_safe %>
9
+ </span>
10
+ <%= icon "arrow-down-s-line" %>
11
+ <span>
12
+ <%= icon("award-line", class: "icon icon-pending") %>
13
+ <%= icon("check-line", class: "icon icon-hover") %>
14
+ <%= icon("check-double-fill", class: "icon icon-applied") %>
15
+ <%= counter %>
16
+ </span>
17
+ <%= icon "arrow-up-s-line" %>
18
+ </button>
19
+ <div class="collaborative-texts-suggestions-box-items" id="panel-box-{{ID}}" aria-hidden="true"></div>
20
+ </div>
@@ -0,0 +1,29 @@
1
+ <% add_decidim_meta_tags(
2
+ description: translated_attribute(current_component.participatory_space.try(:description)),
3
+ title: component_name,
4
+ url: documents_url,
5
+ resource: current_component) %>
6
+
7
+ <% content_for :aside do %>
8
+ <h1 class="title-decorator"><%= component_name %></h1>
9
+ <% end %>
10
+
11
+ <%= render layout: "layouts/decidim/shared/layout_two_col" do %>
12
+
13
+ <%= render partial: "decidim/shared/component_announcement" %>
14
+
15
+ <section id="collaborative_texts" class="layout-main__section layout-main__heading">
16
+ <% if paginate_documents.empty? %>
17
+ <%= cell("decidim/announcement", t("empty", scope: "decidim.collaborative_texts.documents.index")) %>
18
+ <% else %>
19
+ <h2 class="h5 md:h3 decorator"><%= t("count", scope: "decidim.collaborative_texts.documents.index", count: documents.length) %></h2>
20
+ <% end %>
21
+
22
+ <% paginate_documents.each do |document| %>
23
+ <%= card_for document, size: :l %>
24
+ <% end %>
25
+
26
+ <%= decidim_paginate paginate_documents %>
27
+ </section>
28
+
29
+ <% end %>
@@ -0,0 +1,70 @@
1
+ <% provide(:title, document.title) %>
2
+
3
+ <% add_decidim_meta_tags(
4
+ title: document.title,
5
+ url: document_url(document.id),
6
+ resource: document) %>
7
+
8
+ <%
9
+ edit_link(
10
+ resource_locator(document).edit,
11
+ :update,
12
+ :collaborative_text,
13
+ document:
14
+ )
15
+ %>
16
+
17
+ <% content_for :aside do %>
18
+ <div class="collaborative-texts-toc" data-collaborative-texts-toc="collaborative-text-<%= document.id %>">
19
+ <h4 class="h4 mb-4"><%= t("decidim.collaborative_texts.document.index") %></h4>
20
+ <ul class="spinner-container"></ul>
21
+ </div>
22
+ <% end %>
23
+
24
+ <%= render layout: "layouts/decidim/shared/layout_two_col", locals: { columns: 10, large: true } do %>
25
+ <%= render partial: "decidim/shared/component_announcement" %>
26
+
27
+ <section class="layout-main__section">
28
+ <div class="flex justify-center">
29
+ <h1 class="title-decorator my-12"><%= document.title %></h1>
30
+ </div>
31
+
32
+ <%= cell("decidim/announcement", translated_attribute(document.announcement)) if strip_tags(document.announcement&.values&.join)&.strip.present? %>
33
+ <%= cell("decidim/announcement", t("decidim.collaborative_texts.document.status.draft"), callout_class: "warning") if document.draft? %>
34
+ <%= cell("decidim/announcement", t("decidim.collaborative_texts.document.status.accepting_suggestions")) if document.suggestions_enabled? %>
35
+ <%= cell("decidim/announcement", t("decidim.collaborative_texts.document.status.not_accepting_suggestions")) unless document.suggestions_enabled? || document.draft? %>
36
+
37
+ <div class="collaborative-texts-manager hidden"><%= render "manager" %></div>
38
+
39
+ <div class="collaborative-texts-alert hidden">
40
+ <div></div>
41
+ </div>
42
+
43
+ <script type="text/template" class="decidim-template" id="collaborative-texts-editor-template"><%= render "editor_template" %></script>
44
+ <script type="text/template" class="decidim-template" id="collaborative-texts-suggestions-box-template"><%= render "suggestions_box_template" %></script>
45
+ <script type="text/template" class="decidim-template" id="collaborative-texts-suggestions-box-item-template"><%= render "suggestions_box_item_template" %></script>
46
+
47
+ <div id="collaborative-text-<%= document.id %>" data-collaborative-texts-document="<%= document.suggestions_enabled? %>"
48
+ data-collaborative-texts-i18n="<%= document_i18n.to_json %>"
49
+ data-collaborative-texts-suggestions-editor-template="#collaborative-texts-editor-template"
50
+ data-collaborative-texts-suggestions-box-template="#collaborative-texts-suggestions-box-template"
51
+ data-collaborative-texts-suggestions-box-item-template="#collaborative-texts-suggestions-box-item-template"
52
+ data-collaborative-texts-suggestions-url="<%= document_suggestions_path(document) %>"
53
+ data-collaborative-texts-rollout-url="<%= document_path(document) if allowed_to?(:rollout, :collaborative_text, document:) %>"
54
+ class="collaborative-texts-container editor-content">
55
+ <%= decidim_sanitize decidim_rich_text(document.consolidated_body), { scrubber: Decidim::AdminInputScrubber.new } %>
56
+ </div>
57
+
58
+ <hr class="text-gray-6 my-12">
59
+
60
+ <% if document.coauthorships.any? %>
61
+ <div class="my-12">
62
+ <h5 class="h5 my-4"><%= t("decidim.collaborative_texts.documents.show.contributors") %></h5>
63
+ <%= cell "decidim/coauthorships", document, context_actions: [:date] %>
64
+ </div>
65
+ <% end %>
66
+ </section>
67
+ <% end %>
68
+
69
+ <% append_javascript_pack_tag("decidim_collaborative_texts") %>
70
+ <% append_stylesheet_pack_tag("decidim_collaborative_texts") %>
data/config/assets.rb ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ base_path = File.expand_path("..", __dir__)
4
+
5
+ Decidim::Shakapacker.register_path("#{base_path}/app/packs")
6
+ Decidim::Shakapacker.register_entrypoints(
7
+ decidim_collaborative_texts: "#{base_path}/app/packs/entrypoints/decidim_collaborative_texts.js"
8
+ )
@@ -0,0 +1 @@
1
+ am:
@@ -0,0 +1 @@
1
+ ar:
@@ -0,0 +1 @@
1
+ bg:
@@ -0,0 +1 @@
1
+ bn:
@@ -0,0 +1 @@
1
+ bs:
@@ -0,0 +1,154 @@
1
+ ---
2
+ ca-IT:
3
+ activemodel:
4
+ attributes:
5
+ collaborative_texts:
6
+ document:
7
+ body: Cos del text
8
+ draft: Esborrany
9
+ title: Títol
10
+ version_number: Número de versió
11
+ suggestion:
12
+ nodes: Nodes DOM
13
+ original: Text original
14
+ replace: Substitució
15
+ version:
16
+ body: Cos del text
17
+ draft: Esborrany
18
+ version_number: Número de versió
19
+ decidim:
20
+ admin:
21
+ tooltips:
22
+ deleted_collaborative_texts_info: No es pot esborrar aquest document
23
+ collaborative_texts:
24
+ actions:
25
+ confirm_delete_document: Segur que vols esborrar aquest document?
26
+ deleted_document_info: Els documents eliminats es poden restaurar des de la paperera.
27
+ edit: Editar
28
+ manage: Configurar
29
+ new: Nou text
30
+ title: Accions
31
+ view_deleted_documents: Veure els documents eliminats
32
+ admin:
33
+ documents:
34
+ create:
35
+ invalid: S'ha produït un error en crear el comentari.
36
+ success: Document creat correctament.
37
+ draft_options:
38
+ accepting_suggestions: Habilitar suggeriments a la pròxima versió
39
+ accepting_suggestions_help: Habilitar els suggeriments iniciarà una nova ronda de suggeriments per a aquest document. Els suggeriments existents no seran visibles a la nova versió.
40
+ draft: Versió de l'esborrany
41
+ draft_help_html: 'Una versió esborrany no és pública i les administradores poden editar-la. Per fer publica la versió d''aquest contingut: suprimeix l''estat d''esborrany. <strong>Tingues en compte que mentre la versió esborrany estigui activa, les participants veuran la versió anterior i no podran fer suggeriments.</strong>'
42
+ edit:
43
+ document_has_suggestions_html: <a href="%{url}">Aquest document té suggeriments</a> i no es pot editar directament. Si us plau, accepta o rebutja els suggeriments per generar una nova versió d'esborrany que es pugui editar.
44
+ draft: Versió de l'esborrany
45
+ previous_versions: Versions prèvies
46
+ public_version: Versió pública
47
+ title: Editar el text col·laboratiu
48
+ update: Actualitzar
49
+ version: Versió %{version_number}, creada a %{created_at} ha rebut suggeriments %{suggestions_count}.
50
+ edit_settings:
51
+ title: Configurar els textos col·laboratius
52
+ update: Actualitzar
53
+ index:
54
+ title: Textos col·laboratius
55
+ manage_trash:
56
+ title: Documents esborrats
57
+ new:
58
+ create: Crear
59
+ title: Crea textos col·laboratius
60
+ non_draft_options:
61
+ create_draft: Descartar suggeriments i crear una nova versió d'esborrany
62
+ draft_help_html: 'Una versió esborrany no és pública i les administradores poden editar-la. Per fer publica la versió d''aquest contingut: suprimeix l''estat d''esborrany. <strong>Tingues en compte que mentre la versió esborrany estigui activa, les participants veuran la versió anterior i no podran fer suggeriments.</strong>'
63
+ enable_suggestions: Activa els suggeriments
64
+ enable_suggestions_help: Habilitar els suggeriments permetrà a les participants fer suggeriments sobre aquesta versió.
65
+ publish:
66
+ invalid: S'ha produït un error en publicar aquest document.
67
+ success: Document publicat amb èxit.
68
+ unpublish:
69
+ invalid: Hi ha hagut un problema en despublicar aquest document.
70
+ success: El document s'ha despublicat correctament.
71
+ update:
72
+ invalid: S'ha produït un error en actualitzar el document.
73
+ success: Document actualitzat correctament.
74
+ update_settings:
75
+ invalid: S'ha produït un error en actualitzar el document.
76
+ success: Document actualitzat correctament.
77
+ admin_log:
78
+ document:
79
+ create: "%{user_name} ha creat el text col·laboratiu \"%{resource_name}\" a %{space_name}"
80
+ delete: "%{user_name} ha eliminat el text col·laboratiu \"%{resource_name}\" a %{space_name}"
81
+ publish: "%{user_name} ha publicat el text col·laboratiu \"%{resource_name}\" a %{space_name}"
82
+ restore: "%{user_name} ha restaurat el text col·laboratiu \"%{resource_name}\" a %{space_name}"
83
+ soft_delete: "%{user_name} ha mogut a la paperera el text col·laboratiu \"%{resource_name}\" a %{space_name}"
84
+ unpublish: "%{user_name} ha despublicat el text col·laboratiu \"%{resource_name}\" a %{space_name}"
85
+ update: "%{user_name} ha actualitzat el text col·laboratiu \"%{resource_name}\" a %{space_name}"
86
+ suggestion:
87
+ create: "%{user_name} va suggerir canvis al text col·laboratiu: \"%{resource_name}\" a %{space_name}"
88
+ version:
89
+ delete: "%{user_name} ha eliminat el text col·laboratiu \"%{resource_name}\" a %{space_name}"
90
+ update: "%{user_name} ha actualitzat el text col·laboratiu \"%{resource_name}\" a %{space_name}"
91
+ document:
92
+ apply: Aplicar
93
+ cancel: Cancel·lar
94
+ consolidate:
95
+ confirm: Aquesta acció consolidarà tots els suggeriments acceptats en una nova versió del document. Els suggeriments no acceptats seran transferits a la nova versió per a la posterior revisió. Aquesta acció mantindrà els suggeriments habilitats.
96
+ new: Consolidar suggeriments acceptats
97
+ consolidate_counter: En consolidar es combinaran els %{applied} suggeriments aplicats i es mouran els %{pending} suggeriments pendents a la nova versió.
98
+ controls_label: Controls dels suggeriments
99
+ draft_counter: L'esborrany combinarà els suggeriments aplicats a %{applied} i descartarà els suggeriments pendents a %{pending}.
100
+ index: Índex
101
+ restore: Restaurar
102
+ rollout:
103
+ confirm: Aquesta acció crearà una nova versió d'esborrany del document i se us redirigirà a la pàgina d'edició per als refinaments finals. La versió actual continuarà sent pública i es desactivaran els suggeriments.
104
+ invalid: Hi ha hagut un problema en crear una nova versió del document (%{errors}).
105
+ new: Esborrany d'una nova versió
106
+ save: Suggerir canvis
107
+ status:
108
+ accepting_suggestions: Per suggerir canvis, selecciona o fes doble clic al text que vols editar, després fes clic al botó 'Suggerir canvis'.
109
+ draft: Actualment, aquest document està sent revisat per les administradores. No es poden fer suggeriments en aquest moment, però pots veure suggeriments fets per altres participants.
110
+ not_accepting_suggestions: Els suggeriments no estan permesos en aquest moment.
111
+ selection_active: Una selecció és activa. Si us plau, cancel·leu la selecció actual per crear-ne una de nova.
112
+ suggestions_count: "%{count} suggeriments"
113
+ toggle: Mostrar o amagar els suggeriments
114
+ documents:
115
+ index:
116
+ count:
117
+ one: "%{count} text col·laboratiu"
118
+ other: "%{count} textos col·laboratius"
119
+ empty: Encara no hi ha cap text col·laboratiu.
120
+ show:
121
+ contributors: Contribuïdores
122
+ models:
123
+ collaborative_text:
124
+ fields:
125
+ suggestions: Accepta el(s) suggeriment(s)
126
+ title: Títol
127
+ suggestion:
128
+ add_html: <span class="type">Afegir:</span> <span class="text">%{text}</span>
129
+ remove_html: <span class="type">Eliminar:</span> <span class="text">%{text}</span>
130
+ replace_html: <span class="type">Reemplaçar:</span> <span class="text">%{text}</span>
131
+ suggestions:
132
+ create:
133
+ invalid: S'ha produït un error en crear aquest suggeriment.
134
+ success: Suggeriment creat amb èxit.
135
+ errors:
136
+ blank_changeset: El conjunt de canvis no poden estar en blanc.
137
+ invalid_nodes: Nodes seleccionats invàlids.
138
+ components:
139
+ collaborative_texts:
140
+ actions:
141
+ create: Crear
142
+ destroy: Destruir
143
+ update: Actualitzar
144
+ name: Textos col·laboratius
145
+ settings:
146
+ global:
147
+ announcement: Avís
148
+ comments_blocked: Comentaris bloquejats
149
+ step:
150
+ announcement: Avís
151
+ statistics:
152
+ all_collaborative_texts_count: Tots els textos col·laboratius
153
+ collaborative_texts_count: Textos col·laboratius
154
+ collaborative_texts_count_tooltip: El número textos col·laboratius