]>
git.rmz.io Git - dotfiles.git/blob - dwb/greasemonkey/wikipedia.table.filter.user.js
2 // @name Wikipedia Table filter
4 // @include https?://*.wikipedia.org/wiki/*
8 var tables
= document
.getElementsByClassName("wikitable");
9 var hiddenLists
= new Array();
10 var hiddenNames
= new Array();
11 var hiddenPropertiesDisplay
= "";
13 if (tables
.length
> 0) {
15 function stringContains(str
, list
) {
16 for (var i
=0;i
<list
.length
;i
++)
17 if (str
== list
[i
] || (list
[i
] > 3 && str
.indexOf(list
[i
]) >= 0)) return true;
21 function arrayIndexOf(ar
, v
) {
22 for (var i
=0;i
<ar
.length
;i
++) if (ar
[i
] == v
) return i
;
25 function arrayContains(ar
, v
) {
26 for (var i
=0;i
<ar
.length
;i
++) if (ar
[i
] == v
) return true;
30 function updateHideText(){
31 for (var i
=0;i
<hiddenLists
.length
;i
++)
32 hiddenLists
[i
].innerHTML
= "<b>Hidden names:</b> " + (hiddenNames
.join(", ")).replace("<", "<")+
33 "<br>"+"<b>Hidden properties: </b>" + (hiddenPropertiesDisplay
).replace("<", "<");
35 function updateHide(){
36 for (var i
=0;i
<tables
.length
;i
++) {
37 for (var r
=0;r
<tables
[i
].rows
.length
;r
++)
38 if (tables
[i
].rows
[r
].cells
[0] && ( stringContains(tables
[i
].rows
[r
].cells
[0].textContent
, hiddenNames
)) )
40 tables
[i
].rows
[r
].style
.display
="none";
46 var deleteThis
= document
.createElement("a");
47 deleteThis
.textContent
= "x";
48 deleteThis
.addEventListener("click", function(e
){
49 var cell
= e
.target
.parentNode
;
50 var row
= cell
.parentNode
;
51 if (cell
== row
.cells
[0]) {
52 if (cell
.textContent
== "x") {
53 row
.style
.display
= "none"; //empty row (repeated table headers, wikipedias idea of filtering)
54 } else if (!arrayContains(hiddenNames
, cell
.textContent
)) {
55 hiddenNames
.push(cell
.textContent
);
58 } else if (row
.parentNode
.nodeName
== "THEAD" || row
.parentNode
.nodeName
== "TFOOT"
59 || (row
.parentNode
.nodeName
== "TBODY" && row
.parentNode
.parentNode
.rows
[0] == row
)) {
60 if (hiddenPropertiesDisplay
!= "") hiddenPropertiesDisplay
+= ", ";
61 hiddenPropertiesDisplay
+= " Column("+cell
.textContent
+") ";
63 var table
= row
.parentNode
.parentNode
; //tbody actually
64 var pos
= arrayIndexOf(row
.cells
,cell
);
65 for (var i
=0;i
<table
.rows
.length
;i
++)
66 table
.rows
[i
].cells
[pos
].style
.display
= "none";
68 var table
= row
.parentNode
; //tbody actually
69 var pos
= arrayIndexOf(row
.cells
,cell
);
70 var remove
= cell
.textContent
;
71 for (var i
=0;i
<table
.rows
.length
;i
++)
72 if (table
.rows
[i
].cells
[pos
] && table
.rows
[i
].cells
[pos
].textContent
== remove
) {
73 if (!arrayContains(hiddenNames
, table
.rows
[i
].cells
[0].textContent
))
74 hiddenNames
.push(table
.rows
[i
].cells
[0].textContent
);
76 if (hiddenPropertiesDisplay
!= "") hiddenPropertiesDisplay
+= ", ";
77 if (table
.nodeName
== "TBODY") table
= table
.parentNode
;
78 hiddenPropertiesDisplay
+= table
.rows
[0].cells
[pos
].textContent
+ " = " + remove
.substr(0, remove
.length
-1);
83 deleteThis
.className
= "delete-this-button";
87 setTimeout(function(){
88 for (var i
=0;i
<tables
.length
;i
++) {
89 for (var r
=0;r
<tables
[i
].rows
.length
;r
++)
90 for (var c
=0;c
<tables
[i
].rows
[r
].cells
.length
;c
++) {
91 tables
[i
].rows
[r
].cells
[c
].appendChild(newButton());
93 var temp
= document
.createElement("div");
94 tables
[i
].parentNode
.insertBefore(temp
, tables
[i
].nextSibling
);
95 hiddenLists
.push(temp
);
98 var head
= document
.getElementsByTagName("head")[0];
99 var ele
= head
.appendChild(window
.document
.createElement("style"));
100 ele
.innerHTML
= ".delete-this-button {flush: right; display: inline-block; 0; bottom: 0; color: red; cursor: pointer}";