table.js (2828B)
1 Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { 2 3 4 // Manuelles Sortieren von Tabellen per Drag and drop. 5 $(element).find('.or-table--sortable > tbody').sortable(); 6 7 8 $(element).find('.or-table--sortable > tbody').closest('form').submit( function() { 9 10 // Analyse the order of the objects in this folder. 11 var order = new Array(); 12 13 $(this).find('.or-table--sortable').find('tbody > tr.data').each(function () { 14 let objectid = $(this).data('id'); 15 order.push(objectid); 16 }); 17 18 // Set the comma-separated list of objects into a input field. 19 $(this).find('input[name=order]').val(order.join(',')); 20 } 21 ); 22 23 24 // Alle Checkboxen setzen oder nicht setzen. 25 $(element).find('tr.headline > td > input.checkbox').click( function() { 26 $(this).closest('table').find('tr.or-data > td > input.or-checkbox').attr('checked',Boolean( $(this).attr('checked') ) ); 27 }); 28 29 /** 30 * Table-Filter. 31 */ 32 $(element).find('.or-table-filter > input').keyup( function() { 33 34 let filterExpression = $(this).val().toLowerCase(); 35 36 let table = $(this).parents('.or-table-wrapper').find('table'); 37 table.addClass('loader'); 38 39 setTimeout( () => { 40 table.find('tr:not(.headline)').filter(function () { 41 $(this).toggle($(this).text().toLowerCase().indexOf(filterExpression) > -1) 42 }) 43 table.removeClass('loader'); 44 }, 50); 45 46 } ); 47 48 49 /** 50 * Table-Sortierung. 51 */ 52 $(element).find('table > tbody > tr.headline > td, table > tbody > tr > th').click( function() { 53 54 let column = $(this); 55 let table = column.parents('table'); 56 table.addClass('loader'); 57 58 let isAscending = !column.hasClass('sort-asc'); 59 table.find('tr.headline > td, tr > th').removeClass('sort-asc').removeClass('sort-desc'); 60 if ( isAscending ) column.addClass('sort-asc'); else column.addClass('sort-desc'); 61 62 setTimeout(function () { // Sorting should be asynchronous, because we do not want to block the UI. 63 64 let rows = table.find('tr:gt(0)').toArray().sort(comparer(column.index())) 65 if (!isAscending) { 66 rows = rows.reverse() 67 } 68 for (var i = 0; i < rows.length; i++) { 69 table.append(rows[i]) 70 } 71 table.removeClass('loader'); 72 }, 50); 73 74 } ); 75 76 function comparer(index) { 77 return function(a, b) { 78 let valA = getCellValue(a, index), valB = getCellValue(b, index) 79 return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.toString().localeCompare(valB) 80 } 81 } 82 83 function getCellValue(row, index) { 84 return $(row).children('td').eq(index).text(); 85 } 86 87 });