🏠 Home 

All tables sortable

Make all tables on any page sortable by converting them to dataTables

// ==UserScript==
// @name         All tables sortable
// @namespace	 https://greasyfork.org/ru/users/303426
// @version      1.3
// @description  Make all tables on any page sortable by converting them to dataTables
// @author       Титан
// @match        *://*/*
// @icon         data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iI2ZmZiIgY2xhc3M9ImJpIGJpLXRhYmxlIiB2aWV3Qm94PSIwIDAgMTYgMTYiPgogIDxwYXRoIGQ9Ik0wIDJhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJ6bTE1IDJoLTR2M2g0VjR6bTAgNGgtNHYzaDRWOHptMCA0aC00djNoM2ExIDEgMCAwIDAgMS0xdi0yem0tNSAzdi0zSDZ2M2g0em0tNSAwdi0zSDF2MmExIDEgMCAwIDAgMSAxaDN6bS00LTRoNFY4SDF2M3ptMC00aDRWNEgxdjN6bTUtM3YzaDRWNEg2em00IDRINnYzaDRWOHoiLz4KPC9zdmc+
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js
// @grant       GM_registerMenuCommand
// @require https://cdn.jsdelivr.net/npm/[email protected]/js/jquery.dataTables.min.js
// @license MIT
// ==/UserScript==
(function() {
'use strict';
let autolaunch = false;
function ConvertTables() {
if (document.querySelector("head > link[href=\"https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css\"]") == null)
$('head').append('<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">'); // add dataTAbles css
let tables = $('table')
for (let i = 0; i < tables.length; i++) {
try {
ConvertTable_ToDataTable(tables[i]);
} catch (e) {
console.log(`[All tables sortable] table ${i}/${tables.length} error: ${e}`);
console.log(tables[i]);
}
}
}
function ConvertTable_ToDataTable(table) {
if (!table.querySelector("thead")) {
ConvertHeadlessTable_ToHeadedTable(table);
}
$(table).DataTable({
"paging": false,
});
}
function ConvertHeadlessTable_ToHeadedTable(table) {
let tbody = table.querySelector("tbody");
if (tbody && tbody.rows.length > 0) {
let thead = document.createElement("thead");
let firstRow = tbody.rows[0]; // first row = header
thead.appendChild(firstRow); // move it to <thead>
table.insertBefore(thead, tbody); // add <thead> before <tbody>
}
}
GM_registerMenuCommand('Convert Tables', () => {
ConvertTables();
});
$(document).ready(function() {
window.alert = (function() {  // suppress DataTables alert
let nativeAlert = window.alert;
return function(message) {
//window.alert = nativeAlert;
message.indexOf("DataTables warning") === 0 ?
console.warn(message) :
nativeAlert(message);
}
})();
if (autolaunch) {
ConvertTables();
}
});
})();