140 lines
4 KiB
JavaScript
140 lines
4 KiB
JavaScript
|
var AdminDataTable = {
|
||
|
|
||
|
ready: false,
|
||
|
tables: [],
|
||
|
|
||
|
isMobileSize: function() {
|
||
|
return $(window).width() <= 767;
|
||
|
},
|
||
|
|
||
|
setupShiftClick: function($table) {
|
||
|
// @awt2542 PR #867
|
||
|
var lastChecked = null;
|
||
|
$table.on('click', 'input[type=checkbox]', function(e) {
|
||
|
var $checkboxes = $(this).closest('table').find('input[type=checkbox]');
|
||
|
if(!lastChecked) {
|
||
|
lastChecked = this;
|
||
|
return;
|
||
|
}
|
||
|
if(e.shiftKey) {
|
||
|
var start = $checkboxes.index(this);
|
||
|
var end = $checkboxes.index(lastChecked);
|
||
|
// $checkboxes.slice(Math.min(start,end), Math.max(start,end)+ 1).attr('checked', lastChecked.checked); // JQM
|
||
|
$checkboxes.slice(Math.min(start,end), Math.max(start,end)+ 1).prop('checked', lastChecked.checked ? true : false);
|
||
|
}
|
||
|
lastChecked = this;
|
||
|
});
|
||
|
},
|
||
|
|
||
|
setupMobile: function($table) {
|
||
|
if($table.hasClass('AdminDataTableMobile')) return;
|
||
|
if(!$table.hasClass('AdminDataTableResponsive')) return;
|
||
|
$table.addClass('AdminDataTableMobile');
|
||
|
var labels = [];
|
||
|
var thcolor = '';
|
||
|
$table.children('thead').children('tr').each(function() {
|
||
|
$(this).find("th").each(function(n) {
|
||
|
var $th = $(this);
|
||
|
if(!thcolor.length) thcolor = $th.css('color');
|
||
|
if($th.children().length) {
|
||
|
// get beyond the tablesorter-header if there is one
|
||
|
if($th.children('.tablesorter-header-inner').length) $th = $th.children();
|
||
|
// th might have hidden parts that we don't want
|
||
|
var $th2 = $th.clone();
|
||
|
$th2.children().remove();
|
||
|
if($th2.text().length) $th = $th2;
|
||
|
}
|
||
|
labels[n] = $th.html();
|
||
|
});
|
||
|
});
|
||
|
$table.children('tbody').children('tr').each(function() {
|
||
|
$(this).children('td').each(function(n) {
|
||
|
var $td = $(this);
|
||
|
if(typeof labels[n] == "undefined") return;
|
||
|
var $th = $("<div class='th'></div>").append(labels[n]).css('color', thcolor);
|
||
|
if($td.children('.td').length == 0) $td.wrapInner("<div class='td'></div>");
|
||
|
$td.prepend($th).addClass('ui-helper-clearfix');
|
||
|
$th.css('line-height', $td.css('line-height'));
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
|
||
|
undoMobile: function($table) {
|
||
|
if ($table.hasClass('AdminDataTableMobile')) {
|
||
|
$table.removeClass('AdminDataTableMobile');
|
||
|
$table.children('tbody').find("td").each(function () {
|
||
|
var $td = $(this);
|
||
|
$td.find(".th").remove();
|
||
|
$td.find(".td").removeClass('td');
|
||
|
$td.removeClass('ui-helper-clearfix');
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
|
||
|
resize: function() {
|
||
|
var $tables = $("table.AdminDataTableResponsive");
|
||
|
var isMobile = AdminDataTable.isMobileSize();
|
||
|
$tables.each(function () {
|
||
|
var $table = $(this);
|
||
|
if (isMobile) {
|
||
|
AdminDataTable.setupMobile($table);
|
||
|
} else if ($table.hasClass('AdminDataTableMobile')) {
|
||
|
AdminDataTable.undoMobile($table);
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
|
||
|
initTable: function($table) {
|
||
|
if (AdminDataTable.ready) {
|
||
|
if(AdminDataTable.isMobileSize()) AdminDataTable.setupMobile($table);
|
||
|
} else {
|
||
|
AdminDataTable.tables.push($table);
|
||
|
}
|
||
|
if($table.find("input[type=checkbox]").length > 1) {
|
||
|
AdminDataTable.setupShiftClick($table);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
init: function() {
|
||
|
AdminDataTable.ready = true;
|
||
|
$("table.AdminDataTableSortable").each(function() {
|
||
|
var $table = $(this);
|
||
|
var options = {};
|
||
|
if($table.hasClass('AdminDataTableResizable')) {
|
||
|
options = {
|
||
|
widgets: ['resizable'],
|
||
|
widgetOptions: { resizable: true }
|
||
|
}
|
||
|
}
|
||
|
if(jQuery().tablesorter) {
|
||
|
$table.tablesorter(options);
|
||
|
}
|
||
|
});
|
||
|
$("table.AdminDataTableResizable").each(function() {
|
||
|
var $table = $(this);
|
||
|
if($table.hasClass('AdminDataTableSortable')) return; // already handled above
|
||
|
$table.find('th').data("sorter", false);
|
||
|
if(jQuery().tablesorter) $table.tablesorter({
|
||
|
widgets: ['resizable'],
|
||
|
widgetOptions: { resizable: true }
|
||
|
});
|
||
|
});
|
||
|
|
||
|
var resizeTimeout = null;
|
||
|
$(window).resize(function() {
|
||
|
if(resizeTimeout) clearTimeout(resizeTimeout);
|
||
|
resizeTimeout = setTimeout(function() { AdminDataTable.resize() }, 500);
|
||
|
});
|
||
|
|
||
|
if(AdminDataTable.tables.length) {
|
||
|
for (var n = 0; n < AdminDataTable.tables.length; n++) {
|
||
|
AdminDataTable.initTable(AdminDataTable.tables[n]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$(document).ready(function() {
|
||
|
AdminDataTable.init();
|
||
|
});
|