]>
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}";