diff --git a/erkul_column_filter.user.js b/erkul_column_filter.user.js new file mode 100644 index 0000000..83de48f --- /dev/null +++ b/erkul_column_filter.user.js @@ -0,0 +1,112 @@ +// ==UserScript== +// @name Erkul Column Filter +// @namespace https://annabunch.es +// @version 0.2 +// @description Selectively hide columns on erkul.games +// @copyright 2021, annabunches@gmail.com +// @include https://www.erkul.games/* +// @require https://code.jquery.com/jquery-latest.js +// @require https://gist.githubusercontent.com/BrockA/2625891/raw/9c97aa67ff9c5d56be34a55ad6c18a314e5eb548/waitForKeyElements.js +// @grant none +// ==/UserScript== + +waitForKeyElements("tr.mat-header-row", makeColumnFilter); +waitForKeyElements("div.filter", makeRedundantButton); + +function makeButton(text) { + let button = $(document.createElement("div")); + button.html(''); + return button; +} + +function makeColumnFilter(jNode) { + let cols = $("th", jNode); + + for (let i = 0; i < $(cols).length; i++) { + let button = makeButton("Hide"); + $(cols[i]).append(button); + button.click(function() { + hideColumn(i); + }); + } +} + +function makeRedundantButton(jNode) { + let button = makeButton("Hide Redundant"); + jNode.append(button); + button.click(function() { + let headers = $("tr.mat-header-row th"); + // get all the rows + let rows = $("tr.mat-row"); + let nCols = $("td", rows[0]).length; + + // for each column... + for (let i = 0; i < nCols; i++) { + let last = ""; + let diff = false; + + // ... iterate over every row, checking whether that column is different + // on any row. If it is the same everywhere... + $.each(rows, function(j, row){ + let cols = $("td", row); + if (last == "") { + last = $(cols[i]).html(); + } else if ($(cols[i]).html() != last) { + diff = true; + } + }); + + // hide that column. + if (diff === false) { + hideColumn(i); + } + } + }); + + console.log("Erkul Column Filter Plugin fully loaded."); +} + +function getColumnIndex(name) { + let i; + let found = false; + let headers = $("tr.mat-header-row th"); + for (i = 0; i < headers.length; i++) { + if ($(headers[i]).text() == name) { + found = true; + break; + } + } + + if (!found) return -1; + return i; +} + +function hideColumnByName(name) { + let i = getColumnIndex(name); + if (i == -1) return; + hideColumn(i); +} + +function hideColumn(i) { + $($("tr.mat-header-row th")[i]).hide(); + + $.each($("tr.mat-row"), function(j, row) { + let cols = $("td", row); + $(cols[i]).hide(); + }); +} + +function showColumnByName(name) { + let i = getColumnIndex(name); + if (i == -1) return; + showColumn(i); +} + +function showColumn(i) { + $($("tr.mat-header-row th")[i]).show(); + + $.each($("tr.mat-row"), function(j, row) { + let cols = $("td", row); + $(cols[i]).show(); + }); +} diff --git a/erkul_redundancy_filter.user.js b/erkul_redundancy_filter.user.js deleted file mode 100644 index f83dfcf..0000000 --- a/erkul_redundancy_filter.user.js +++ /dev/null @@ -1,67 +0,0 @@ -// ==UserScript== -// @name Erkul Redundancy Filter -// @namespace https://annabunch.es -// @version 0.1 -// @description Hide identical columns on erkul.games -// @copyright 2021, annabunches -// @include https://www.erkul.games/* -// @require https://code.jquery.com/jquery-latest.js -// @require https://gist.githubusercontent.com/BrockA/2625891/raw/9c97aa67ff9c5d56be34a55ad6c18a314e5eb548/waitForKeyElements.js -// @grant none -// ==/UserScript== - -console.log("Erkul Redundancy Filter pre-loading."); - -waitForKeyElements("div.filter", loadWidgets); - -function makeButton() { - let button = $(document.createElement("div")); - button.html(''); - return button; -} - -function loadWidgets(jNode) { - console.log("Erkul Redundancy Filter loading."); - let button = makeButton(); - $("div.filter").append(button); - button.click(function() { - // get all the rows - let rows = $("tr.mat-row"); - let nCols = $("td", rows[0]).length; - - // for each column... - for (let i = 0; i < nCols; i++) { - let last = ""; - let diff = false; - - // ... iterate over every row, checking whether that column is different - // on any row. If it is the same everywhere... - $.each(rows, function(j, row){ - let cols = $("td", row); - console.log("Last: " + last); - console.log("This: " + $(cols[i]).html()); - if (last == "") { - last = $(cols[i]).html(); - } else if ($(cols[i]).html() != last) { - diff = true; - } - }); - - // hide that column. - if (diff === false) { - $.each(rows, function(j, row) { - let cols = $("td", row); - $(cols[i]).css("display", "none"); - }); - - // and your little header, too - let headers = $("tr.mat-header-row th"); - $(headers[i]).css("display", "none"); - } - } - }); - - console.log("Erkul Redundancy Filter fully loaded."); -} - -console.log("Erkul Redundancy Filter pre-loaded.");