decidim-term_customizer 0.16.6 → 0.17.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/decidim/term_customizer/admin/translations_admin_bulk.js.es6 +113 -0
- data/app/commands/decidim/term_customizer/admin/destroy_translations.rb +40 -0
- data/app/commands/decidim/term_customizer/admin/import_set_translations.rb +139 -0
- data/app/controllers/decidim/term_customizer/admin/translation_sets_controller.rb +11 -0
- data/app/controllers/decidim/term_customizer/admin/translations_controller.rb +23 -0
- data/app/controllers/decidim/term_customizer/admin/translations_destroys_controller.rb +54 -0
- data/app/forms/decidim/term_customizer/admin/translations_destroy_form.rb +46 -0
- data/app/forms/decidim/term_customizer/admin/translations_import_form.rb +48 -0
- data/app/helpers/decidim/term_customizer/admin/translations_helper.rb +21 -0
- data/app/jobs/decidim/term_customizer/admin/export_job.rb +19 -0
- data/app/permissions/decidim/term_customizer/admin/permissions.rb +11 -1
- data/app/views/decidim/term_customizer/admin/add_translations/index.html.erb +26 -6
- data/app/views/decidim/term_customizer/admin/translation_sets/_form.html.erb +25 -1
- data/app/views/decidim/term_customizer/admin/translation_sets/index.html.erb +39 -33
- data/app/views/decidim/term_customizer/admin/translations/_export_dropdown.html.erb +8 -0
- data/app/views/decidim/term_customizer/admin/translations/_form.html.erb +27 -1
- data/app/views/decidim/term_customizer/admin/translations/bulk_actions/_destroy.html.erb +13 -0
- data/app/views/decidim/term_customizer/admin/translations/bulk_actions/_dropdown.html.erb +26 -0
- data/app/views/decidim/term_customizer/admin/translations/index.html.erb +66 -38
- data/app/views/decidim/term_customizer/admin/translations/new_import.html.erb +40 -0
- data/app/views/decidim/term_customizer/admin/translations_destroys/new.html.erb +36 -0
- data/config/locales/ca.yml +72 -26
- data/config/locales/en.yml +109 -26
- data/config/locales/es.yml +72 -26
- data/config/locales/fi.yml +72 -26
- data/config/locales/fr.yml +72 -26
- data/config/locales/sv.yml +72 -26
- data/lib/decidim/term_customizer.rb +4 -0
- data/lib/decidim/term_customizer/admin_engine.rb +11 -1
- data/lib/decidim/term_customizer/import.rb +12 -0
- data/lib/decidim/term_customizer/import/importer.rb +69 -0
- data/lib/decidim/term_customizer/import/importer_factory.rb +17 -0
- data/lib/decidim/term_customizer/import/parser.rb +49 -0
- data/lib/decidim/term_customizer/import/readers.rb +39 -0
- data/lib/decidim/term_customizer/import/readers/base.rb +36 -0
- data/lib/decidim/term_customizer/import/readers/csv.rb +23 -0
- data/lib/decidim/term_customizer/import/readers/json.rb +25 -0
- data/lib/decidim/term_customizer/import/readers/xls.rb +25 -0
- data/lib/decidim/term_customizer/translation_import_collection.rb +71 -0
- data/lib/decidim/term_customizer/translation_parser.rb +13 -0
- data/lib/decidim/term_customizer/translation_serializer.rb +28 -0
- data/lib/decidim/term_customizer/version.rb +2 -2
- 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
|
-
|
3
|
+
<h2 class="card-title flex--sbc">
|
4
|
+
<div>
|
5
|
+
<%= link_to t("decidim.term_customizer.menu.term_customizer"), root_path %>
|
6
|
+
>
|
7
|
+
<%= link_to translated_attribute(set.name), translation_set_translations_path(set) %>
|
8
|
+
>
|
9
|
+
<%= t "decidim.term_customizer.admin.titles.add_multiple_translations" %>
|
5
10
|
|
6
|
-
|
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
|
3
|
+
<h2 class="card-title flex--sbc">
|
4
|
+
<div>
|
5
|
+
<%= link_to t("decidim.term_customizer.menu.term_customizer"), root_path %>
|
6
|
+
>
|
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
|
-
|
22
|
-
<
|
23
|
-
<
|
24
|
-
<
|
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
|
-
<
|
33
|
-
|
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
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
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
|
3
|
+
<h2 class="card-title flex--sbc">
|
4
|
+
<div>
|
5
|
+
<%= link_to t("decidim.term_customizer.menu.term_customizer"), root_path %>
|
6
|
+
>
|
7
|
+
<%= link_to translated_attribute(set.name), translation_set_translations_path(set) %>
|
8
|
+
>
|
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
|
5
|
+
<%= link_to t("decidim.term_customizer.menu.term_customizer"), root_path %>
|
6
|
+
>
|
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
|
-
|
20
|
-
<
|
21
|
-
<
|
22
|
-
<
|
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
|
-
<
|
33
|
-
<%=
|
34
|
-
</
|
35
|
-
<
|
36
|
-
|
37
|
-
|
38
|
-
<
|
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
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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" %>
|