openrat-cms

OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs | README

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 });