diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/searchengine/elasticsearch/mappings.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/searchengine/elasticsearch/mappings.tt
index 9adcfe0eaa..81beb1d311 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/searchengine/elasticsearch/mappings.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/searchengine/elasticsearch/mappings.tt
@@ -1,74 +1,17 @@
[% USE raw %]
[% USE Asset %]
+[% SET footerjs = 1 %]
[% PROCESS 'i18n.inc' %]
[% INCLUDE 'doc-head-open.inc' %]
Koha › Administration › Search engine configuration (Elasticsearch)
[% INCLUDE 'doc-head-close.inc' %]
-[% Asset.js("lib/jquery/plugins/jquery.tablednd.js") | $raw %]
-
+
[% INCLUDE 'header.inc' %]
[% INCLUDE 'prefs-admin-search.inc' %]
@@ -521,4 +464,9 @@ a.add, a.delete {
+[% MACRO jsinclude BLOCK %]
+ [% Asset.js("lib/jquery/plugins/jquery.tablednd.js") | $raw %]
+ [% Asset.js("js/elasticsearch-mappings.js") | $raw %]
+[% END %]
+
[% INCLUDE 'intranet-bottom.inc' %]
diff --git a/koha-tmpl/intranet-tmpl/prog/js/elasticsearch-mappings.js b/koha-tmpl/intranet-tmpl/prog/js/elasticsearch-mappings.js
new file mode 100644
index 0000000000..3ebd600d7c
--- /dev/null
+++ b/koha-tmpl/intranet-tmpl/prog/js/elasticsearch-mappings.js
@@ -0,0 +1,58 @@
+/* global __ */
+
+function clean_line(line) {
+ $(line).find('input[type="text"]').val("");
+ $(line).find('select').find('option:first').attr("selected", "selected");
+}
+
+function clone_line(line) {
+ var new_line = $(line).clone();
+ $(new_line).removeClass("nodrag nodrop");
+ $(new_line).find('td:last-child>a').removeClass("add").addClass("delete").html( __("Delete") );
+ $(new_line).find('[data-id]').each(function () {
+ $(this).attr({ name: $(this).attr('data-id') }).removeAttr('data-id');
+ });
+ $(new_line).find("select").each(function () {
+ var attr = $(this).attr('name');
+ var val = $(line).find('[data-id="' + attr + '"]').val();
+ $(this).find('option[value="' + val + '"]').attr("selected", "selected");
+ });
+ return new_line;
+}
+
+$(document).ready(function () {
+ $("#tabs").tabs();
+ $('.delete').click(function () {
+ if ($(this).hasClass('mandatory') && $(".mandatory[data-field_name=" + $(this).attr('data-field_name') + "]").length < 2) {
+ alert( __("This field is mandatory and must have at least one mapping") );
+ return;
+ } else {
+ $(this).parents('tr').remove();
+ }
+ });
+
+ $("table.mappings").tableDnD({
+ onDragClass: "dragClass",
+ });
+ $('.add').click(function () {
+ var table = $(this).closest('table');
+ var index_name = $(table).attr('data-index_name');
+ var line = $(this).closest("tr");
+ var marc_field = $(line).find('input[data-id="mapping_marc_field"]').val();
+ if (marc_field.length > 0) {
+ var new_line = clone_line(line);
+ new_line.appendTo($('table[data-index_name="' + index_name + '"]>tbody'));
+ $('.delete').click(function () {
+ $(this).parents('tr').remove();
+ });
+ clean_line(line);
+
+ $(table).tableDnD({
+ onDragClass: "dragClass",
+ });
+ }
+ });
+ $("#facet_biblios > table").tableDnD({
+ onDragClass: "dragClass",
+ });
+});