1 /* global __ dataTablesDefaults */
3 function clean_line(line) {
4 $(line).find('input[type="text"]').val("");
5 $(line).find('select').find('option:first').prop("selected", true);
8 function build_delete_link(del_class){
9 return '<a class="btn btn-default btn-xs %s" style="cursor: pointer;"><i class="fa fa-trash"></i> %s</a>'.format(del_class, __("Delete"));
12 function remove_line(line){
13 var table = $(line).closest('table');
14 let dt = $(table).DataTable();
15 dt.row(line).remove().draw();
18 function clone_line(line) {
19 var new_line = $(line).clone();
20 let type = $(line).data('type');
21 $(new_line).find('td:last-child').html(build_delete_link('delete-%s'.format(type)));
22 $(new_line).find('[data-id]').each(function () {
23 $(this).attr({ name: $(this).attr('data-id') }).removeAttr('data-id');
25 $(new_line).find("select").each(function () {
26 var attr = $(this).attr('name');
27 var val = $(line).find('[data-id="' + attr + '"]').val();
28 $(this).find('option').removeAttr('selected');
29 $(this).find('option[value="' + val + '"]').attr("selected", "selected");
34 function tableInit( oldtabid, newtabid ) {
36 var oldTableId = $("#" + oldtabid + "_table");
37 oldTableId.DataTable().destroy();
40 var newTableId = $("#" + newtabid + "_table");
42 $.extend(true, {}, dataTablesDefaults, {
44 { "orderable": false, "searchable": false, 'targets': ['NoSort'] },
51 $(document).ready(function () {
53 tableInit( "", "search_fields");
55 $("a[data-toggle='tab']").on("shown.bs.tab", function (e) {
56 var oldtabid = $(e.relatedTarget).data("tabname");
57 var newtabid = $(e.target).data("tabname");
58 tableInit( oldtabid, newtabid );
61 $(document).on('click', '.delete-facet', function() {
62 var line = $(this).closest("tr");
65 $(document).on('click', '.delete-mapping', function() {
66 var line = $(this).closest("tr");
69 $(document).on('click', '.delete-search-field', function() {
70 if ($(this).hasClass('mandatory') && $(".mandatory[data-field_name=" + $(this).attr('data-field_name') + "]").length < 2) {
71 alert( __("This field is mandatory and must have at least one mapping") );
74 var line = $(this).closest("tr");
77 // We clicked delete button on search fields tab.
78 if (name = $(line).find('input[name="search_field_name"]').val()) {
79 // Prevent user from using a search field for a mapping
80 // after removing it without saving.
81 $('select[data-id="mapping_search_field_name"]').each(function( index, element) {
82 $(element).find('option[value="' + name + '"]').remove();
86 var search_field_name = $(line).find('input[name="mapping_search_field_name"]').val();
87 var mappings = $('input[name="mapping_search_field_name"][type="hidden"][value="' + search_field_name + '"]');
88 if (mappings.length == 0) {
89 var search_field_line = $('input[name="search_field_name"][value="' + search_field_name + '"]').closest("tr");
90 $(search_field_line).find('a.btn-default').removeClass('disabled');
97 $('.add').click(function () {
98 var table = $(this).closest('table');
99 let table_id = table.attr('id');
100 let dt = $('#' + table_id).DataTable();
101 var line = $(this).closest("tr");
102 var marc_field = $(line).find('input[data-id="mapping_marc_field"]').val();
103 let dt_data = dt.data();
104 if ( marc_field.length ) {
105 var new_line = clone_line(line);
106 var index_name = $(table).attr('data-index_name');
107 let dt = $('#' + table_id).DataTable();
108 dt.row.add(new_line).draw();
114 $("#facet_biblios_table").DataTable(
115 $.extend(true, {}, dataTablesDefaults, {
117 { "orderable": false, "targets": [ "NoSort" ] },
118 { "searchable": false, "visible": false, "targets": 0 }
126 $("#es_mappings").on("submit", function(e){
127 let table_ids = ['search_fields_table', 'mapping_biblios_table', 'mapping_authorities_table'];
128 $(table_ids).each(function(){
130 // Remove warning "Cannot reinitialise DataTable"
131 if ( $.fn.dataTable.isDataTable( '#' + this ) ) {
132 table = $('#' + this).DataTable();
135 table = $('#' + this).DataTable( {
139 table.search('').draw();
144 $('.add-search-field').click(function() {
145 var table = $(this).closest('table');
146 let table_id = table.attr('id');
147 let dt = $('#' + table_id).DataTable();
148 var line = $(this).closest('tr');
149 var search_field_name = $(line).find('input[data-id="search_field_name"]').val();
150 let already_exists = dt.data().filter((row, idx) => row[0]['@data-order'] === search_field_name);
151 if ( already_exists.length ) {
152 alert(__("Search field '%s' already exists".format(search_field_name)));
155 if (search_field_name.length > 0) {
156 var new_line = clone_line(line);
157 new_line.find('td:first').attr({'data-order': search_field_name});
158 dt.row.add(new_line).draw();
164 $('.add-facet').click(function() {
165 var table = $(this).closest('table');
166 let table_id = table.attr('id');
167 let dt = $('#' + table_id).DataTable();
168 var line = $(this).closest('tr');
169 let selected_option = $(line).find('select[data-id="facet-search-field"] option:selected');
170 var search_field_name = selected_option.val();
171 let dt_data = dt.data();
172 let already_exists = dt_data.filter((row, idx) => row[1] === search_field_name);
173 if ( already_exists.length ) {
174 alert(__("Facet '%s' already exists".format(search_field_name)));
177 if (search_field_name.length > 0) {
178 const next_id = Math.max.apply(null, dt_data.map(row => row[0])) + 1;
179 const label = selected_option.data('label');
180 const av_cat_select = $(clone_line(line).find('td')[2]).find('select').attr({name: 'facet_av_cat_%s'.format(search_field_name.escapeHtml())});
181 new_line = [next_id, search_field_name, '<span>%s</span><input type="hidden" name="facet_name" value="%s" />'.format(label.escapeHtml(), search_field_name.escapeHtml()), av_cat_select[0].outerHTML, build_delete_link()]
182 dt.row.add(new_line).draw();