What.CD - Top Filter

Allows for filter of top 100/250

  1. // ==UserScript==
  2. // @name What.CD - Top Filter
  3. // @author FerretGuy
  4. // @version 1.1
  5. // @namespace http://what.cd
  6. // @description Allows for filter of top 100/250
  7. // @include http://what.cd/top10.php?type=torrents&limit=*
  8. // @include https://what.cd/top10.php?type=torrents&limit=*
  9. // @include https://ssl.what.cd/top10.php?type=torrents&limit=*
  10. // ==/UserScript==
  11.  
  12. var tbl = document.getElementsByTagName('table');
  13. if(tbl.length>1){ //if default top filter exists
  14. tbl[0].style.display='none'; //hides default top filter, comment to unhide
  15. tbl = tbl[1]; //choose second table
  16. } else {
  17. tbl = tbl[0]; //choose first table
  18. }
  19. formTable = tbl.tBodies[0];
  20. var newRow = formTable.insertRow(0);
  21. var newCell = newRow.insertCell(-1);
  22. newCell.colSpan=8;
  23. var filter_form = document.createElement('form');
  24. newCell.appendChild(filter_form);
  25. var require_input = document.createElement('input');
  26. require_input.id = 'require_input';
  27. require_input.size = 20;
  28. filter_form.appendChild(document.createTextNode('Require: '));
  29. filter_form.appendChild(require_input);
  30. filter_form.appendChild(document.createTextNode('\u00A0\u00A0Exclude: '));
  31. var exclude_input = document.createElement('input');
  32. exclude_input.id = 'exclude_input';
  33. exclude_input.size = 20;
  34. filter_form.appendChild(exclude_input);
  35. filter_form.appendChild(document.createTextNode('\u00A0\u00A0'));
  36. var filter_button = document.createElement('input');
  37. filter_button.type = 'button';
  38. filter_button.name = 'filter_button';
  39. filter_button.value = 'Filter';
  40. filter_button.addEventListener('click', parseFilter, false);
  41. filter_form.appendChild(filter_button);
  42. filter_form.appendChild(document.createTextNode('\u00A0\u00A0'));
  43. var reset_button = document.createElement('input');
  44. reset_button.type = 'button';
  45. reset_button.name = 'reset_button';
  46. reset_button.value = 'Reset';
  47. reset_button.addEventListener('click', resetFilter, false);
  48. filter_form.appendChild(reset_button);
  49. filter_form.appendChild(document.createTextNode('\u00A0\u00A0'));
  50. var save_button = document.createElement('input');
  51. save_button.type = 'button';
  52. save_button.name = 'save_button';
  53. save_button.value = 'Save';
  54. save_button.addEventListener('click', saveFilter, false);
  55. filter_form.appendChild(save_button);
  56. var filter_text = document.createElement('strong');
  57. filter_text.id = 'filter_text';
  58. filter_form.appendChild(filter_text);
  59.  
  60. //Load Previous Values
  61. if(!window.chrome) {
  62. require_input.value = GM_getValue('whatcd_filter_require') ? GM_getValue('whatcd_filter_require') : '';
  63. exclude_input.value = GM_getValue('whatcd_filter_exclude') ? GM_getValue('whatcd_filter_exclude') : '';
  64. }else{
  65. require_input.value = localStorage.getItem('whatcd_filter_require') ? localStorage.getItem('whatcd_filter_require') : '';
  66. exclude_input.value = localStorage.getItem('whatcd_filter_exclude') ? localStorage.getItem('whatcd_filter_exclude') : '';
  67. }
  68. parseFilter();
  69.  
  70. function parseFilter()
  71. {
  72. var i=0,j=0,count=0,ele;
  73. for (i=1;i<tbl.rows.length;i++) //reset to all visible
  74. tbl.rows[i].style.display='';
  75.  
  76. var requireArray = require_input.value.split(',');
  77. var excludeArray = exclude_input.value.split(',');
  78. if(!((requireArray.length==1)&&(requireArray[0]==''))) {
  79. for(i=0;i<requireArray.length;i++) {
  80. for(j=2;j<tbl.rows.length;j++) {
  81. ele = tbl.rows[j].cells[2].innerHTML.replace(/<[^>]+>/g,"");
  82. if(ele.toLowerCase().indexOf(requireArray[i].toLowerCase().trim())<0)
  83. tbl.rows[j].style.display='none';
  84. }
  85. }
  86. }
  87. if(!((excludeArray.length==1)&&(excludeArray[0]==''))) {
  88. for(i=0;i<excludeArray.length;i++) {
  89. for(j=2;j<tbl.rows.length;j++) {
  90. ele = tbl.rows[j].cells[2].innerHTML.replace(/<[^>]+>/g,"");
  91. if(ele.toLowerCase().indexOf(excludeArray[i].toLowerCase().trim())>=0)
  92. tbl.rows[j].style.display='none';
  93. }
  94. }
  95. }
  96. for(i=2;i<tbl.rows.length;i++)
  97. if(tbl.rows[i].style.display=='none') {count++;}
  98.  
  99. if(count>0)
  100. filter_text.innerHTML=('\u00A0\u00A0-'+count);
  101. else
  102. filter_text.innerHTML=('');
  103. }
  104.  
  105. function resetFilter() {
  106. for (var i=1;i<tbl.rows.length;i++) //reset to all visible
  107. tbl.rows[i].style.display='';
  108. filter_text.innerHTML=('');
  109. require_input.value = '';
  110. exclude_input.value = '';
  111. }
  112. function saveFilter() {
  113. if(!window.chrome) {
  114. GM_setValue('whatcd_filter_require', (require_input.value));
  115. GM_setValue('whatcd_filter_exclude', (exclude_input.value));
  116. }else{
  117. localStorage.setItem('whatcd_filter_require', (require_input.value));
  118. localStorage.setItem('whatcd_filter_exclude', (exclude_input.value));
  119. }
  120. }