thread win

sort comments by favorites

当前为 2014-07-31 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name thread win
  3. // @namespace bperkins
  4. // @description sort comments by favorites
  5. // @include http://www.metafilter.com/*
  6. // @version 1.1
  7. // ==/UserScript==
  8.  
  9.  
  10. var savedstuff;
  11.  
  12. var winNode;
  13. var unwinNode;
  14. var copy;
  15.  
  16.  
  17.  
  18. function sortFav(a,b) {
  19.  
  20.  
  21.  
  22. return (-(getFav(a)-getFav(b)));
  23.  
  24. }
  25. function getFav(a)
  26. {
  27. var thing = a.getElementsByTagName("SPAN");
  28. if (thing.length ==0 ) {
  29. return 1;
  30. }
  31.  
  32. thing = thing[0].getElementsByTagName("SPAN");
  33.  
  34.  
  35. if (thing.length ==0) {
  36. thing = a.getElementsByTagName("SPAN");
  37. if (thing.length ==0 ) {
  38. return 1;
  39. }
  40. thing =thing[0].getElementsByTagName("A");
  41.  
  42. thing =new Array(thing[2]);
  43.  
  44. if (thing == undefined) {
  45. thing= new Array();
  46. }
  47.  
  48. } else {
  49.  
  50.  
  51. thing = thing[0].getElementsByTagName("SPAN");
  52.  
  53. thing = thing[0].getElementsByTagName("A");
  54. }
  55. var fav =0;
  56. re = new RegExp("\\d+")
  57.  
  58.  
  59. if (thing.length > 0 &&thing[0] != undefined ) {
  60.  
  61. var m =re.exec(thing[0].innerHTML);
  62. fav=m[0]
  63.  
  64. }
  65.  
  66.  
  67. return (1*fav)+1;
  68.  
  69. }
  70.  
  71.  
  72.  
  73.  
  74. function unwin () {
  75.  
  76. copy.replaceChild(winNode,unwinNode);
  77.  
  78. page = document.evaluate(
  79. "//div[@id='page']",
  80. document,
  81. null,
  82. XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
  83. null);
  84.  
  85.  
  86. for (var i = 0; i < page.snapshotLength; i++) {
  87. var parent=page.snapshotItem(i);
  88. var newstuff = parent.childNodes;
  89. while ( newstuff.length >0 ) {
  90. parent.removeChild(newstuff[0]);
  91. }
  92.  
  93. for (var j = 0; j < savedstuff.length; j++) {
  94. parent.appendChild(savedstuff[j]);
  95. }
  96. }
  97. }
  98.  
  99.  
  100. function threadwin () {
  101.  
  102. copy.replaceChild(unwinNode,winNode);
  103.  
  104.  
  105. page = document.evaluate(
  106. "//div[@id='page']",
  107. document,
  108. null,
  109. XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
  110. null);
  111.  
  112.  
  113. for (var i = 0; i < page.snapshotLength; i++) {
  114. var parent=page.snapshotItem(i);
  115. var stuff = parent.childNodes;
  116. var commentidxs = new Array;
  117. var comments = new Array;
  118. var objects = new Array ;
  119. savedstuff=new Array;
  120.  
  121. var k=0;
  122. var favs =""
  123.  
  124. for (var j = 0; j < stuff.length; j++) {
  125.  
  126. if (stuff[j].nodeName.toUpperCase()=="DIV" &&stuff[j].getAttribute("class") == "comments") {
  127.  
  128. commentidxs.push(j);
  129. comments.push(stuff[j]);
  130. }
  131. objects.push(stuff[j]);
  132. savedstuff.push(stuff[j]);
  133.  
  134. }
  135.  
  136. comments.sort(sortFav);
  137.  
  138. for (var j = 0; j < comments.length; j++) {
  139. objects[commentidxs[j]]=comments[j];
  140. }
  141.  
  142.  
  143. while ( stuff.length >0 ) {
  144.  
  145. parent.removeChild(stuff[0]);
  146. }
  147.  
  148.  
  149. for (var j = 0; j < objects.length; j++) {
  150. parent.appendChild(objects[j]);
  151. }
  152.  
  153. }
  154. }
  155.  
  156.  
  157. res = document.evaluate(
  158. "//div[@class='copy']",
  159. document,
  160. null,
  161. XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
  162. null);
  163.  
  164. copy=res.snapshotItem(0)
  165.  
  166. if (copy.parentNode.id == "page" ) {
  167.  
  168.  
  169. winNode = document.createElement('a');
  170. winNode.innerHTML = "<small>[threadwin]</small> ";
  171. winNode.href ="#";
  172. winNode.addEventListener("click", threadwin, true);
  173. copy.appendChild( winNode );
  174. unwinNode = document.createElement('a');
  175. unwinNode.innerHTML = "<small>[unwin]</small>";
  176. unwinNode.href ="#";
  177. unwinNode.addEventListener("click", unwin, true);
  178.  
  179. }
  180.