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