大人的Greasyfork

在Greasyfork的搜索結果中添加Sleazyfork上的成人腳本,增加評分與版本號,並在訪問匿名不可用腳本時跳轉至Sleazyfork

目前為 2016-11-22 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Greasyfork Search with Sleazyfork Results include
  3. // @name:zh-CN 大人的Greasyfork
  4. // @name:zh-TW 大人的Greasyfork
  5. // @name:ja 大人のGreasyfork
  6. // @namespace hoothin
  7. // @version 0.59
  8. // @description Merge adult results of sleazyfork into greasyfork when the script is no longer anonymously available, add rating score and version for scripts then
  9. // @description:zh-CN 在Greasyfork的搜索结果中添加Sleazyfork上的成人脚本,增加评分与版本号,并在访问匿名不可用脚本时跳转至Sleazyfork
  10. // @description:zh-TW 在Greasyfork的搜索結果中添加Sleazyfork上的成人腳本,增加評分與版本號,並在訪問匿名不可用腳本時跳轉至Sleazyfork
  11. // @description:ja 脚本付けるSleazyfork上の成人脚本検索結果からGreasyfork、脚本付ける採点とバージョン番号を訪問匿名利用できない脚本にジャンプからSleazyfork
  12. // @author hoothin
  13. // @include http*://greasyfork.org/*
  14. // @include http*://www.greasyfork.org/*
  15. // @include http*://sleazyfork.org/*
  16. // @include http*://www.sleazyfork.org/*
  17. // @grant GM_xmlhttpRequest
  18. // @connect greasyfork.org
  19. // @connect sleazyfork.org
  20. // @contributionURL https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=rixixi@sina.com&item_name=Greasy+Fork+donation
  21. // @contributionAmount 1
  22. // ==/UserScript==
  23.  
  24. (function() {
  25. 'use strict';
  26. if(document.querySelector('span.sign-in-link')){
  27. var otherSite=/\/\/([^\.]+\.)?greasyfork\.org/.test(location.href)?"sleazyfork":"greasyfork";
  28. if(/scripts\/\d+/.test(location.href)){
  29. if(!document.querySelector("#script-info") && (otherSite == "greasyfork" || document.querySelector("div.width-constraint>p>a"))){
  30. location.href=location.href.replace(/\/\/([^\.]+\.)?(greasyfork|sleazyfork)\.org/,"//$1"+otherSite+"\.org");
  31. }
  32. }else if(/\/(scripts|users)\//.test(location.href)){
  33. GM_xmlhttpRequest({
  34. method: 'GET',
  35. url: location.href.replace(/\/\/([^\.]+\.)?(greasyfork|sleazyfork)\.org/,"//$1"+otherSite+"\.org"),
  36. onload: function(result) {
  37. var doc = null;
  38. try {
  39. doc = document.implementation.createHTMLDocument('');
  40. doc.documentElement.innerHTML = result.responseText;
  41. }
  42. catch (e) {
  43. console.log('parse error');
  44. }
  45. if (!doc) {
  46. return;
  47. }
  48. var l = doc.querySelector('ol.script-list');
  49. if (l) {
  50. var ml = document.querySelector('ol.script-list');
  51. if(!ml){
  52. ml=document.createElement("ol");
  53. ml.setAttribute("class","script-list");
  54. var list=document.querySelector('body>div.width-constraint');
  55. var ps=list.querySelectorAll("p");
  56. for(let i=0;i<ps.length;i++){
  57. let p=ps[i];
  58. list.removeChild(p);
  59. }
  60. list.appendChild(ml);
  61. }
  62. var scs=l.querySelectorAll("li");
  63. if(scs){
  64. for(let i=0;i<scs.length;i++){
  65. let sc=scs[i];
  66. if(!ml.querySelector("li[data-script-id='"+sc.getAttribute("data-script-id")+"']")){
  67. addScore(sc);
  68. ml.appendChild(sc);
  69. }
  70. }
  71. }
  72. }
  73. },
  74. onerror: function(e) {
  75. console.log(e);
  76. }
  77. });
  78. }
  79. }
  80. function addScore(script){
  81. var separator=script.querySelector('h2>span.name-description-separator');
  82. var description=script.querySelector('h2>span.description');
  83. if(separator)separator.innerHTML="<strong style='color:#e09015'>"+script.getAttribute("data-script-rating-score")+"</strong>"+separator.innerHTML;
  84. if(description)description.innerHTML+="<strong>Ver."+script.getAttribute("data-script-version")+"</strong>";
  85. }
  86. var scripts=document.querySelectorAll('ol.script-list>li');
  87. for(let i=0;i<scripts.length;i++){
  88. let script=scripts[i];
  89. addScore(script);
  90. }
  91. })();