decidim-term_customizer 0.16.6 → 0.17.0

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/decidim/term_customizer/admin/translations_admin_bulk.js.es6 +113 -0
  3. data/app/commands/decidim/term_customizer/admin/destroy_translations.rb +40 -0
  4. data/app/commands/decidim/term_customizer/admin/import_set_translations.rb +139 -0
  5. data/app/controllers/decidim/term_customizer/admin/translation_sets_controller.rb +11 -0
  6. data/app/controllers/decidim/term_customizer/admin/translations_controller.rb +23 -0
  7. data/app/controllers/decidim/term_customizer/admin/translations_destroys_controller.rb +54 -0
  8. data/app/forms/decidim/term_customizer/admin/translations_destroy_form.rb +46 -0
  9. data/app/forms/decidim/term_customizer/admin/translations_import_form.rb +48 -0
  10. data/app/helpers/decidim/term_customizer/admin/translations_helper.rb +21 -0
  11. data/app/jobs/decidim/term_customizer/admin/export_job.rb +19 -0
  12. data/app/permissions/decidim/term_customizer/admin/permissions.rb +11 -1
  13. data/app/views/decidim/term_customizer/admin/add_translations/index.html.erb +26 -6
  14. data/app/views/decidim/term_customizer/admin/translation_sets/_form.html.erb +25 -1
  15. data/app/views/decidim/term_customizer/admin/translation_sets/index.html.erb +39 -33
  16. data/app/views/decidim/term_customizer/admin/translations/_export_dropdown.html.erb +8 -0
  17. data/app/views/decidim/term_customizer/admin/translations/_form.html.erb +27 -1
  18. data/app/views/decidim/term_customizer/admin/translations/bulk_actions/_destroy.html.erb +13 -0
  19. data/app/views/decidim/term_customizer/admin/translations/bulk_actions/_dropdown.html.erb +26 -0
  20. data/app/views/decidim/term_customizer/admin/translations/index.html.erb +66 -38
  21. data/app/views/decidim/term_customizer/admin/translations/new_import.html.erb +40 -0
  22. data/app/views/decidim/term_customizer/admin/translations_destroys/new.html.erb +36 -0
  23. data/config/locales/ca.yml +72 -26
  24. data/config/locales/en.yml +109 -26
  25. data/config/locales/es.yml +72 -26
  26. data/config/locales/fi.yml +72 -26
  27. data/config/locales/fr.yml +72 -26
  28. data/config/locales/sv.yml +72 -26
  29. data/lib/decidim/term_customizer.rb +4 -0
  30. data/lib/decidim/term_customizer/admin_engine.rb +11 -1
  31. data/lib/decidim/term_customizer/import.rb +12 -0
  32. data/lib/decidim/term_customizer/import/importer.rb +69 -0
  33. data/lib/decidim/term_customizer/import/importer_factory.rb +17 -0
  34. data/lib/decidim/term_customizer/import/parser.rb +49 -0
  35. data/lib/decidim/term_customizer/import/readers.rb +39 -0
  36. data/lib/decidim/term_customizer/import/readers/base.rb +36 -0
  37. data/lib/decidim/term_customizer/import/readers/csv.rb +23 -0
  38. data/lib/decidim/term_customizer/import/readers/json.rb +25 -0
  39. data/lib/decidim/term_customizer/import/readers/xls.rb +25 -0
  40. data/lib/decidim/term_customizer/translation_import_collection.rb +71 -0
  41. data/lib/decidim/term_customizer/translation_parser.rb +13 -0
  42. data/lib/decidim/term_customizer/translation_serializer.rb +28 -0
  43. data/lib/decidim/term_customizer/version.rb +2 -2
  44. metadata +39 -14
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module TermCustomizer
5
+ module Admin
6
+ # A form object to be used when admin users want to import a collection of proposals
7
+ # from a participatory text.
8
+ class TranslationsImportForm < Decidim::Form
9
+ ACCEPTED_MIME_TYPES = Decidim::TermCustomizer::Import::Readers::ACCEPTED_MIME_TYPES
10
+ MIME_TYPE_ZIP = "application/zip"
11
+
12
+ mimic :translations_import
13
+
14
+ attribute :file
15
+
16
+ validates :file, presence: true
17
+ validate :accepted_mime_type
18
+
19
+ def file_path
20
+ file&.path
21
+ end
22
+
23
+ def mime_type
24
+ file&.content_type
25
+ end
26
+
27
+ def zip_file?
28
+ mime_type == MIME_TYPE_ZIP
29
+ end
30
+
31
+ def accepted_mime_type
32
+ accepted_mime_types = ACCEPTED_MIME_TYPES.values + [MIME_TYPE_ZIP]
33
+ return if accepted_mime_types.include?(mime_type)
34
+
35
+ errors.add(
36
+ :file,
37
+ I18n.t(
38
+ "activemodel.errors.models.translations_import.attributes.file.invalid_mime_type",
39
+ valid_mime_types: ACCEPTED_MIME_TYPES.keys.map do |m|
40
+ I18n.t("decidim.term_customizer.admin.translations.new_import.accepted_mime_types.#{m}")
41
+ end.join(", ")
42
+ )
43
+ )
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module TermCustomizer
5
+ module Admin
6
+ module TranslationsHelper
7
+ # Public: A formatted collection of mime_type to be used
8
+ # in forms.
9
+ def mime_types
10
+ types = ""
11
+ accepted_mime_types = Decidim::TermCustomizer::Import::Readers::ACCEPTED_MIME_TYPES.keys
12
+ accepted_mime_types.each_with_index do |mime_type, index|
13
+ types += t(".accepted_mime_types.#{mime_type}")
14
+ types += ", " unless accepted_mime_types.length == index + 1
15
+ end
16
+ types
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module TermCustomizer
5
+ module Admin
6
+ class ExportJob < ApplicationJob
7
+ queue_as :default
8
+
9
+ def perform(user, set, name, format)
10
+ export_data = Decidim::Exporters.find_exporter(format).new(
11
+ set.translations, TranslationSerializer
12
+ ).export
13
+
14
+ ExportMailer.export(user, name, export_data).deliver_now
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -20,6 +20,7 @@ module Decidim
20
20
 
21
21
  allowed_translation_set_action?
22
22
  allowed_translation_action?
23
+ allowed_translation_bulk_action?
23
24
 
24
25
  permission_action
25
26
  end
@@ -40,7 +41,7 @@ module Decidim
40
41
  case permission_action.action
41
42
  when :create, :read
42
43
  allow!
43
- when :update, :destroy
44
+ when :update, :destroy, :import, :export
44
45
  toggle_allow(translation_set.present?)
45
46
  end
46
47
  end
@@ -56,6 +57,15 @@ module Decidim
56
57
  end
57
58
  end
58
59
 
60
+ def allowed_translation_bulk_action?
61
+ return unless permission_action.subject == :translations
62
+
63
+ case permission_action.action
64
+ when :destroy
65
+ toggle_allow(translation_set.present?)
66
+ end
67
+ end
68
+
59
69
  def read_admin_dashboard_action?
60
70
  permission_action.action == :read &&
61
71
  permission_action.subject == :admin_dashboard
@@ -1,12 +1,32 @@
1
1
  <div class="card" id="add-translations-search">
2
2
  <div class="card-divider">
3
- <h2 class="card-title">
4
- <%= t "decidim.admin.titles.translations" %>
3
+ <h2 class="card-title flex--sbc">
4
+ <div>
5
+ <%= link_to t("decidim.term_customizer.menu.term_customizer"), root_path %>
6
+ &gt;
7
+ <%= link_to translated_attribute(set.name), translation_set_translations_path(set) %>
8
+ &gt;
9
+ <%= t "decidim.term_customizer.admin.titles.add_multiple_translations" %>
5
10
 
6
- <%= link_to t("actions.back", scope: "decidim.admin"), translation_set_translations_path(set), class: "button tiny button--title" %>
11
+ <a data-toggle="help-panel" class="label secondary">
12
+ <%= icon("info") %>
13
+ <%= t("actions.help", scope: "decidim.term_customizer.admin") %>
14
+ </a>
15
+ </div>
16
+
17
+ <div class="flex--cc flex-gap--1">
18
+ <div id="js-other-actions-wrapper">
19
+ <%= link_to t("actions.back", scope: "decidim.term_customizer.admin"), translation_set_translations_path(set), class: "button hollow tiny button--simple" %>
20
+ </div>
21
+ </div>
7
22
  </h2>
8
23
  </div>
9
24
  <div class="card-section">
25
+ <div id="help-panel" class="callout help-text hide" data-toggler=".hide">
26
+ <p><strong><%= t ".help_title" %></strong></p>
27
+ <%= t ".help_html", button_name: t(".add") %>
28
+ </div>
29
+
10
30
  <div class="filters row">
11
31
  <div class="column medium-4">
12
32
  <%= form_tag search_translation_set_add_translations_path, method: :get do %>
@@ -29,7 +49,7 @@
29
49
  <td>{{translation_key}}</td>
30
50
  <td>{{translation_term}}</td>
31
51
  <td>
32
- <input type="hidden" name="keys[]" value="{{translation_key}}">
52
+ <input type="hidden" name="keys[]" value="{{translation_key}}" />
33
53
  <%= icon_link_to "circle-x", "#", t("actions.destroy", scope: "decidim.admin"), class: "remove-translation-key action-icon--remove" %>
34
54
  </td>
35
55
  </tr>
@@ -38,8 +58,8 @@
38
58
  <table class="table-list">
39
59
  <thead>
40
60
  <tr>
41
- <th><%= t("models.translations.fields.key", scope: "decidim.admin") %></th>
42
- <th><%= t("models.translations.fields.term", scope: "decidim.admin") %></th>
61
+ <th><%= t("models.translations.fields.key", scope: "decidim.term_customizer.admin") %></th>
62
+ <th><%= t("models.translations.fields.term", scope: "decidim.term_customizer.admin") %></th>
43
63
  <th></th>
44
64
  </tr>
45
65
  </thead>
@@ -1,9 +1,33 @@
1
1
  <div class="card">
2
2
  <div class="card-divider">
3
- <h2 class="card-title"><%= t "translation_sets.form.title", scope: "decidim.term_customizer.admin" %></h2>
3
+ <h2 class="card-title flex--sbc">
4
+ <div>
5
+ <%= link_to t("decidim.term_customizer.menu.term_customizer"), root_path %>
6
+ &gt;
7
+ <%= t "translation_sets.form.title", scope: "decidim.term_customizer.admin" %>
8
+
9
+ <a data-toggle="help-panel" class="label secondary">
10
+ <%= icon("info") %>
11
+ <%= t("actions.help", scope: "decidim.term_customizer.admin") %>
12
+ </a>
13
+ </div>
14
+
15
+ <div class="flex--cc flex-gap--1">
16
+ <div id="js-other-actions-wrapper">
17
+ <%= link_to t("actions.back", scope: "decidim.term_customizer.admin"), root_path, class: "button hollow tiny button--simple" %>
18
+ </div>
19
+ </div>
20
+ </h2>
4
21
  </div>
5
22
 
6
23
  <div class="card-section">
24
+ <div id="help-panel" class="callout help-text hide" data-toggler=".hide">
25
+ <p><strong><%= t ".help_title" %></strong></p>
26
+ <%= t ".help_html" %>
27
+ <p><strong><%= t ".constraint_help_title" %></strong></p>
28
+ <%= t ".constraint_help_html" %>
29
+ </div>
30
+
7
31
  <div class="row column">
8
32
  <%= form.translated :text_field, :name, autofocus: true %>
9
33
  </div>
@@ -2,53 +2,59 @@
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title flex--sbc">
4
4
  <div>
5
- <%= t "decidim.admin.titles.translation_sets" %>
5
+ <%= t "decidim.term_customizer.admin.titles.translation_sets" %>
6
6
  </div>
7
7
 
8
8
  <div class="flex--cc flex-gap--1">
9
9
  <div id="js-other-actions-wrapper">
10
10
  <% if allowed_to? :create, :translation_set %>
11
- <%= link_to t("actions.new_translation_set", scope: "decidim.admin"), new_translation_set_path, class: "button tiny button--simple" %>
11
+ <%= link_to t("actions.new_translation_set", scope: "decidim.term_customizer.admin"), new_translation_set_path, class: "button tiny button--simple" %>
12
12
  <% end %>
13
13
  <% if allowed_to? :update, :organization %>
14
- <%= link_to t("actions.clear_cache", scope: "decidim.admin"), clear_caches_path, method: :delete, class: "button tiny button--simple", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
14
+ <%= link_to t("actions.clear_cache", scope: "decidim.term_customizer.admin"), clear_caches_path, method: :delete, class: "button tiny button--simple", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
15
15
  <% end %>
16
16
  </div>
17
17
  </div>
18
18
  </h2>
19
19
  </div>
20
20
  <div class="card-section">
21
- <div class="table-scroll">
22
- <table class="table-list">
23
- <thead>
24
- <tr>
25
- <th><%= t("models.translation_sets.fields.name", scope: "decidim.admin") %></th>
26
- <th></th>
27
- </tr>
28
- </thead>
29
- <tbody>
30
- <% @sets.each do |set| %>
21
+ <% if @sets.count > 0 %>
22
+ <div class="table-scroll">
23
+ <table class="table-list">
24
+ <thead>
31
25
  <tr>
32
- <td>
33
- <% if allowed_to? :read, :translation %>
34
- <%= link_to translated_attribute(set.name), translation_set_translations_path(set) %><br />
35
- <% else %>
36
- <%= translated_attribute(set.name) %>
37
- <% end %>
38
- </td>
39
- <td class="table-list__actions">
40
- <% if allowed_to? :update, :translation_set, translation_set: set %>
41
- <%= icon_link_to "pencil", edit_translation_set_path(set), t("actions.configure", scope: "decidim.admin"), class: "action-icon--new" %>
42
- <% end %>
43
-
44
- <% if allowed_to? :destroy, :translation_set, translation_set: set %>
45
- <%= icon_link_to "circle-x", translation_set_path(set), t("actions.destroy", scope: "decidim.admin"), method: :delete, class: "action-icon--remove", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
46
- <% end %>
47
- </td>
26
+ <th><%= t("models.translation_sets.fields.name", scope: "decidim.term_customizer.admin") %></th>
27
+ <th></th>
48
28
  </tr>
49
- <% end %>
50
- </tbody>
51
- </table>
52
- </div>
29
+ </thead>
30
+ <tbody>
31
+ <% @sets.each do |set| %>
32
+ <tr>
33
+ <td>
34
+ <% if allowed_to? :read, :translation %>
35
+ <%= link_to translated_attribute(set.name), translation_set_translations_path(set) %><br />
36
+ <% else %>
37
+ <%= translated_attribute(set.name) %>
38
+ <% end %>
39
+ </td>
40
+ <td class="table-list__actions">
41
+ <% if allowed_to? :update, :translation_set, translation_set: set %>
42
+ <%= icon_link_to "pencil", edit_translation_set_path(set), t("actions.configure", scope: "decidim.admin"), class: "action-icon--new" %>
43
+ <% end %>
44
+
45
+ <% if allowed_to? :destroy, :translation_set, translation_set: set %>
46
+ <%= icon_link_to "circle-x", translation_set_path(set), t("actions.destroy", scope: "decidim.admin"), method: :delete, class: "action-icon--remove", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
47
+ <% end %>
48
+ </td>
49
+ </tr>
50
+ <% end %>
51
+ </tbody>
52
+ </table>
53
+ </div>
54
+ <% else %>
55
+ <div class="text-center">
56
+ <%= t ".no_records_html", new_set_link: new_translation_set_path, button_name: t("decidim.term_customizer.admin.actions.new_translation_set") %>
57
+ </div>
58
+ <% end %>
53
59
  </div>
54
60
  </div>
@@ -0,0 +1,8 @@
1
+ <span class="exports dropdown tiny button button--simple" data-toggle="export-dropdown"><%= t "actions.export", scope: "decidim.admin" %></span>
2
+ <div class="dropdown-pane" id="export-dropdown" data-dropdown data-position=bottom data-alignment=right data-auto-focus="true" data-close-on-click="true">
3
+ <ul class="vertical menu add-components">
4
+ <% %w{CSV JSON Excel}.each do |format| %>
5
+ <li class="exports--format--<%= format.downcase %> exports--translations"><%= link_to t("decidim.admin.exports.export_as", name: t("decidim.term_customizer.admin.titles.translations"), export_format: format.upcase), export_translation_set_path(set, format: format), method: :post %></li>
6
+ <% end %>
7
+ </ul>
8
+ </div>
@@ -1,9 +1,35 @@
1
1
  <div class="card">
2
2
  <div class="card-divider">
3
- <h2 class="card-title"><%= t "translations.form.title", scope: "decidim.term_customizer.admin" %></h2>
3
+ <h2 class="card-title flex--sbc">
4
+ <div>
5
+ <%= link_to t("decidim.term_customizer.menu.term_customizer"), root_path %>
6
+ &gt;
7
+ <%= link_to translated_attribute(set.name), translation_set_translations_path(set) %>
8
+ &gt;
9
+ <%= t "translations.form.title", scope: "decidim.term_customizer.admin" %>
10
+
11
+ <a data-toggle="help-panel" class="label secondary">
12
+ <%= icon("info") %>
13
+ <%= t("actions.help", scope: "decidim.term_customizer.admin") %>
14
+ </a>
15
+ </div>
16
+
17
+ <div class="flex--cc flex-gap--1">
18
+ <div id="js-other-actions-wrapper">
19
+ <%= link_to t("actions.back", scope: "decidim.term_customizer.admin"), translation_set_translations_path(set), class: "button hollow tiny button--simple" %>
20
+ </div>
21
+ </div>
22
+ </h2>
4
23
  </div>
5
24
 
6
25
  <div class="card-section">
26
+ <div id="help-panel" class="callout help-text hide" data-toggler=".hide">
27
+ <p><strong><%= t ".help_title" %></strong></p>
28
+ <%= t ".help_html" %>
29
+ <p><strong><%= t ".term_help_title" %></strong></p>
30
+ <%= t ".term_help_html" %>
31
+ </div>
32
+
7
33
  <div class="row column">
8
34
  <%= form.text_field :key, autofocus: true %>
9
35
  </div>
@@ -0,0 +1,13 @@
1
+ <div id="js-destroy-translations-actions" class="hide js-bulk-action-form">
2
+ <%= form_tag(translation_set_translations_destroy_path(set), method: :delete, id: "js-form-destroy-translations", class: "flex--cc flex-gap--1") do %>
3
+ <div class="checkboxes hide">
4
+ <% translations.each do |translation| %>
5
+ <%= check_box_tag "translation_ids[]", translation.id, false, class: "js-check-all-translation js-translation-id-#{translation.id}" %>
6
+ <% end %>
7
+ </div>
8
+
9
+ <%= submit_tag(t("actions.destroy", scope: "decidim.admin"), id: "js-submit-destroy-translations", class: "button small button--simple float-left") %>
10
+
11
+ <button id="js-cancel-destroy-translations" class="button tiny clear compact js-cancel-bulk-action" type="button"><%= t("decidim.term_customizer.admin.actions.cancel") %></button>
12
+ <% end %>
13
+ </div>
@@ -0,0 +1,26 @@
1
+ <div id="js-bulk-actions-wrapper">
2
+ <button
3
+ id="js-bulk-actions-button"
4
+ class="button button--nomargin tiny success light dropdown"
5
+ type="button"
6
+ data-toggle="js-bulk-actions-dropdown">
7
+ <%= t("decidim.term_customizer.admin.translations.index.actions") %>
8
+ </button>
9
+
10
+ <div
11
+ id="js-bulk-actions-dropdown"
12
+ class="dropdown-pane"
13
+ data-position="bottom"
14
+ data-alignment="right"
15
+ data-dropdown="dropdown"
16
+ data-auto-focus="false"
17
+ data-events="resize">
18
+ <ul class="list-reset">
19
+ <li>
20
+ <button type="button" data-action="destroy-translations">
21
+ <%= t("actions.destroy", scope: "decidim.admin") %>
22
+ </button>
23
+ </li>
24
+ </ul>
25
+ </div>
26
+ </div>
@@ -2,56 +2,84 @@
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title flex--sbc">
4
4
  <div>
5
- <%= t "decidim.admin.titles.translations" %>
5
+ <%= link_to t("decidim.term_customizer.menu.term_customizer"), root_path %>
6
+ &gt;
7
+ <%= translated_attribute(set.name) %>
8
+
9
+ <span id="js-selected-proposals-count" class="component-counter component-counter--inline" title="<%= t("decidim.term_customizer.admin.translations.index.selected") %>"></span>
6
10
  </div>
7
11
 
8
12
  <div class="flex--cc flex-gap--1">
13
+ <%= render partial: "decidim/term_customizer/admin/translations/bulk_actions/dropdown" %>
14
+
9
15
  <div id="js-other-actions-wrapper">
10
16
  <% if allowed_to? :create, :translation %>
11
- <%= link_to t("actions.add_multiple_translations", scope: "decidim.admin"), translation_set_add_translations_path(set), class: "button tiny button--simple" %>
12
- <%= link_to t("actions.new_translation", scope: "decidim.admin"), new_translation_set_translation_path(set), class: "button tiny button--simple" %>
17
+ <%= link_to t("actions.add_multiple_translations", scope: "decidim.term_customizer.admin"), translation_set_add_translations_path(set), class: "button tiny button--simple" %>
18
+ <%= link_to t("actions.new_translation", scope: "decidim.term_customizer.admin"), new_translation_set_translation_path(set), class: "button tiny button--simple" %>
19
+ <% end %>
20
+ <% if allowed_to? :import, :translation_set, translation_set: set %>
21
+ <%= link_to t("actions.import", scope: "decidim.term_customizer.admin"), import_translation_set_translations_path(set), class: "button tiny button--simple" %>
22
+ <% end %>
23
+ <% if allowed_to? :export, :translation_set, translation_set: set %>
24
+ <%= render partial: "export_dropdown" %>
13
25
  <% end %>
14
26
  </div>
27
+
28
+ <%= render partial: "decidim/term_customizer/admin/translations/bulk_actions/destroy" %>
15
29
  </div>
16
30
  </h2>
17
31
  </div>
18
32
  <div class="card-section">
19
- <div class="table-scroll">
20
- <table class="table-list">
21
- <thead>
22
- <tr>
23
- <th><%= t("models.translations.fields.key", scope: "decidim.admin") %></th>
24
- <th><%= t("models.translations.fields.original_term", scope: "decidim.admin") %></th>
25
- <th><%= t("models.translations.fields.term", scope: "decidim.admin") %></th>
26
- <th></th>
27
- </tr>
28
- </thead>
29
- <tbody>
30
- <% @translations.each do |translation| %>
33
+ <% if @translations.count > 0 %>
34
+ <div class="table-scroll">
35
+ <table class="table-list">
36
+ <thead>
31
37
  <tr>
32
- <td>
33
- <%= translation.key %>
34
- </td>
35
- <td>
36
- <%= @directory.translations.term(translation.key) %>
37
- </td>
38
- <td>
39
- <%= translation.value %>
40
- </td>
41
- <td class="table-list__actions">
42
- <% if allowed_to? :update, :translation, translation: translation %>
43
- <%= icon_link_to "pencil", edit_translation_set_translation_path(set, translation), t("actions.configure", scope: "decidim.admin"), class: "action-icon--new" %>
44
- <% end %>
45
-
46
- <% if allowed_to? :destroy, :translation, translation: translation %>
47
- <%= icon_link_to "circle-x", translation_set_translation_path(set, translation), t("actions.destroy", scope: "decidim.admin"), method: :delete, class: "action-icon--remove", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
48
- <% end %>
49
- </td>
38
+ <th>
39
+ <%= check_box_tag "translations_bulk", "all", false, class: "js-check-all" %>
40
+ </th>
41
+ <th><%= t("models.translations.fields.key", scope: "decidim.term_customizer.admin") %></th>
42
+ <th><%= t("models.translations.fields.original_term", scope: "decidim.term_customizer.admin") %></th>
43
+ <th><%= t("models.translations.fields.term", scope: "decidim.term_customizer.admin") %></th>
44
+ <th></th>
50
45
  </tr>
51
- <% end %>
52
- </tbody>
53
- </table>
54
- <%= paginate @translations, theme: "decidim" %>
55
- </div>
46
+ </thead>
47
+ <tbody>
48
+ <% @translations.each do |translation| %>
49
+ <tr>
50
+ <td>
51
+ <%= check_box_tag "translation_ids_s[]", translation.id, false, class: "js-check-all-translation js-translation-list-check js-translation-id-#{translation.id}" %><br />
52
+ </td>
53
+ <td>
54
+ <%= translation.key %>
55
+ </td>
56
+ <td>
57
+ <%= @directory.translations.term(translation.key) %>
58
+ </td>
59
+ <td>
60
+ <%= translation.value %>
61
+ </td>
62
+ <td class="table-list__actions">
63
+ <% if allowed_to? :update, :translation, translation: translation %>
64
+ <%= icon_link_to "pencil", edit_translation_set_translation_path(set, translation), t("actions.configure", scope: "decidim.admin"), class: "action-icon--new" %>
65
+ <% end %>
66
+
67
+ <% if allowed_to? :destroy, :translation, translation: translation %>
68
+ <%= icon_link_to "circle-x", translation_set_translation_path(set, translation), t("actions.destroy", scope: "decidim.admin"), method: :delete, class: "action-icon--remove", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
69
+ <% end %>
70
+ </td>
71
+ </tr>
72
+ <% end %>
73
+ </tbody>
74
+ </table>
75
+ <%= paginate @translations, theme: "decidim" %>
76
+ </div>
77
+ <% else %>
78
+ <div class="text-center">
79
+ <%= t ".no_records_html", add_multiple_link: translation_set_add_translations_path(set), button_name: t("decidim.term_customizer.admin.actions.add_multiple_translations") %>
80
+ </div>
81
+ <% end %>
56
82
  </div>
57
83
  </div>
84
+
85
+ <%= javascript_include_tag "decidim/term_customizer/admin/translations_admin_bulk" %>