+++ /dev/null
-// ==UserScript==\r
-// @name Wikipedia Table filter\r
-// @namespace benibela\r
-// @include https?://*.wikipedia.org/wiki/*\r
-// ==/UserScript==\r
-\r
-\r
-var tables = document.getElementsByClassName("wikitable");\r
-var hiddenLists = new Array();\r
-var hiddenNames = new Array();\r
-var hiddenPropertiesDisplay = "";\r
-\r
-if (tables.length > 0) {\r
-\r
-function stringContains(str, list) {\r
- for (var i=0;i<list.length;i++)\r
- if (str == list[i] || (list[i] > 3 && str.indexOf(list[i]) >= 0)) return true;\r
- return false;\r
-}\r
-\r
-function arrayIndexOf(ar, v) {\r
- for (var i=0;i<ar.length;i++) if (ar[i] == v) return i;\r
- return -1;\r
-}\r
-function arrayContains(ar, v) {\r
- for (var i=0;i<ar.length;i++) if (ar[i] == v) return true;\r
- return false;\r
-}\r
-\r
-function updateHideText(){\r
- for (var i=0;i<hiddenLists.length;i++)\r
- hiddenLists[i].innerHTML = "<b>Hidden names:</b> " + (hiddenNames.join(", ")).replace("<", "<")+\r
- "<br>"+"<b>Hidden properties: </b>" + (hiddenPropertiesDisplay).replace("<", "<");\r
-}\r
-function updateHide(){\r
- for (var i=0;i<tables.length;i++) {\r
- for (var r=0;r<tables[i].rows.length;r++)\r
- if (tables[i].rows[r].cells[0] && ( stringContains(tables[i].rows[r].cells[0].textContent, hiddenNames)) )\r
-\r
- tables[i].rows[r].style.display="none";\r
- }\r
- updateHideText();\r
-}\r
-\r
-function newButton(){\r
- var deleteThis = document.createElement("a");\r
- deleteThis.textContent = "x";\r
- deleteThis.addEventListener("click", function(e){\r
- var cell = e.target.parentNode;\r
- var row = cell.parentNode;\r
- if (cell == row.cells[0]) {\r
- if (cell.textContent == "x") {\r
- row.style.display = "none"; //empty row (repeated table headers, wikipedias idea of filtering)\r
- } else if (!arrayContains(hiddenNames, cell.textContent)) {\r
- hiddenNames.push(cell.textContent);\r
- updateHide();\r
- }\r
- } else if (row.parentNode.nodeName == "THEAD" || row.parentNode.nodeName == "TFOOT"\r
- || (row.parentNode.nodeName == "TBODY" && row.parentNode.parentNode.rows[0] == row)) {\r
- if (hiddenPropertiesDisplay != "") hiddenPropertiesDisplay += ", ";\r
- hiddenPropertiesDisplay += " Column("+cell.textContent+") ";\r
-\r
- var table = row.parentNode.parentNode; //tbody actually\r
- var pos = arrayIndexOf(row.cells,cell);\r
- for (var i=0;i<table.rows.length;i++)\r
- table.rows[i].cells[pos].style.display = "none";\r
- } else {\r
- var table = row.parentNode; //tbody actually\r
- var pos = arrayIndexOf(row.cells,cell);\r
- var remove = cell.textContent;\r
- for (var i=0;i<table.rows.length;i++)\r
- if (table.rows[i].cells[pos] && table.rows[i].cells[pos].textContent == remove) {\r
- if (!arrayContains(hiddenNames, table.rows[i].cells[0].textContent))\r
- hiddenNames.push(table.rows[i].cells[0].textContent);\r
- }\r
- if (hiddenPropertiesDisplay != "") hiddenPropertiesDisplay += ", ";\r
- if (table.nodeName == "TBODY") table = table.parentNode;\r
- hiddenPropertiesDisplay += table.rows[0].cells[pos].textContent + " = " + remove.substr(0, remove.length-1);\r
-\r
- updateHide();\r
- }\r
- });\r
- deleteThis.className = "delete-this-button";\r
- return deleteThis;\r
-}\r
-\r
-setTimeout(function(){\r
-for (var i=0;i<tables.length;i++) {\r
- for (var r=0;r<tables[i].rows.length;r++)\r
- for (var c=0;c<tables[i].rows[r].cells.length;c++) {\r
- tables[i].rows[r].cells[c].appendChild(newButton());\r
- }\r
- var temp = document.createElement("div");\r
- tables[i].parentNode.insertBefore(temp, tables[i].nextSibling);\r
- hiddenLists.push(temp);\r
-}}, 100);\r
-\r
-var head = document.getElementsByTagName("head")[0];\r
-var ele = head.appendChild(window.document.createElement("style"));\r
-ele.innerHTML = ".delete-this-button {flush: right; display: inline-block; 0; bottom: 0; color: red; cursor: pointer}";\r
-\r
-}\r