1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-12 17:54:44 +02:00

Add method to MarkupAdminDataTable for specifying that a particular column is not sortable in an otherwise sortable table

This commit is contained in:
Ryan Cramer
2023-03-31 11:08:35 -04:00
parent 4f75a7e81c
commit de8307a2a9
3 changed files with 27 additions and 2 deletions

View File

@@ -100,14 +100,24 @@ var AdminDataTable = {
$("table.AdminDataTableSortable").each(function() {
var $table = $(this);
var options = {};
var ths = [];
if($table.hasClass('AdminDataTableResizable')) {
options = {
widgets: ['resizable'],
widgetOptions: { resizable: true }
}
}
$table.find('th.sorter-false').each(function() {
var $th = $(this);
$th.data('sorter', false);
ths.push($th);
});
if(jQuery().tablesorter) {
$table.tablesorter(options);
for(var n = 0; n < ths.length; n++) {
var $th = ths[n];
$th.removeClass('tablesorter-headerUnSorted');
}
}
});
$("table.AdminDataTableResizable").each(function() {

View File

@@ -1 +1 @@
var AdminDataTable={ready:false,tables:[],isMobileSize:function(){return $(window).width()<=767},setupShiftClick:function($table){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).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){if($th.children(".tablesorter-header-inner").length)$th=$th.children();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;$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()});
var AdminDataTable={ready:false,tables:[],isMobileSize:function(){return $(window).width()<=767},setupShiftClick:function($table){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).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){if($th.children(".tablesorter-header-inner").length)$th=$th.children();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={};var ths=[];if($table.hasClass("AdminDataTableResizable")){options={widgets:["resizable"],widgetOptions:{resizable:true}}}$table.find("th.sorter-false").each(function(){var $th=$(this);$th.data("sorter",false);ths.push($th)});if(jQuery().tablesorter){$table.tablesorter(options);for(var n=0;n<ths.length;n++){var $th=ths[n];$th.removeClass("tablesorter-headerUnSorted")}}});$("table.AdminDataTableResizable").each(function(){var $table=$(this);if($table.hasClass("AdminDataTableSortable"))return;$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()});

View File

@@ -62,7 +62,9 @@ class MarkupAdminDataTable extends ModuleJS {
protected $rowAttrs = array();
protected $actions = array();
protected $colsNotSortable = array();
/**
* Initialize module and default settings
*
@@ -269,6 +271,7 @@ class MarkupAdminDataTable extends ModuleJS {
foreach($this->headerRow as $th) {
$class = '';
if(is_array($th)) list($th, $class) = $th;
if(isset($this->colsNotSortable[$maxCols])) $class = trim("$class sorter-false");
$th = $this->encode($th);
if($class) $class = " class='" . $this->encode($class) . "'";
$out .= "\n\t\t<th$class>$th</th>";
@@ -411,6 +414,18 @@ class MarkupAdminDataTable extends ModuleJS {
$this->id = $id;
}
/**
* Set a column as not sortable (first column is 0)
*
* @param int $index
* @since 3.0.215
*
*/
public function setColNotSortable($index) {
$index = (int) $index;
$this->colsNotSortable[$index] = $index;
}
/**
* Set the responsive mode of this table
*