大人的Greasyfork

在Greasyfork的搜索结果中添加Sleazyfork上的成人脚本,增加评分与版本号,并在访问匿名不可用脚本时跳转至Sleazyfork

目前为 2021-12-31 提交的版本。查看 最新版本

  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.98
  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*://gf.qytechs.cn/*
  14. // @include http*://www.gf.qytechs.cn/*
  15. // @include http*://sleazyfork.org/*
  16. // @include http*://www.sleazyfork.org/*
  17. // @grant GM_xmlhttpRequest
  18. // @grant GM_setValue
  19. // @grant GM_getValue
  20. // @connect gf.qytechs.cn
  21. // @connect sleazyfork.org
  22. // @contributionURL https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=rixixi@sina.com&item_name=Greasy+Fork+donation
  23. // @contributionAmount 1
  24. // ==/UserScript==
  25.  
  26. (function() {
  27. 'use strict';
  28. if(document.querySelector('span.sign-in-link')){
  29. var otherSite=/greasyfork\.org/.test(location.hostname)?"sleazyfork":"greasyfork";
  30. if(/scripts\/\d+/.test(location.href)){
  31. if(!document.querySelector("#script-info") && (otherSite == "greasyfork" || document.querySelector("div.width-constraint>section>p>a").href.indexOf("sign_in")!=-1)){
  32. location.href=location.href.replace(/\/\/([^\.]+\.)?(greasyfork|sleazyfork)\.org/,"//$1"+otherSite+"\.org");
  33. }
  34. }else if(/\/(scripts|users)(\/|.*(\?|&)q=|.*\?set=)/.test(location.href)){
  35. GM_xmlhttpRequest({
  36. method: 'GET',
  37. url: location.href.replace(/\/\/([^\.]+\.)?(greasyfork|sleazyfork)\.org/,"//$1"+otherSite+"\.org"),
  38. onload: function(result) {
  39. var doc = null;
  40. try {
  41. doc = document.implementation.createHTMLDocument('');
  42. doc.documentElement.innerHTML = result.responseText;
  43. }
  44. catch (e) {
  45. console.log('parse error');
  46. }
  47. if (!doc) {
  48. return;
  49. }
  50. var l = doc.querySelector('ol.script-list');
  51. if (l) {
  52. var ml = document.querySelector('ol.script-list');
  53. if(!ml){
  54. ml=document.createElement("ol");
  55. ml.setAttribute("class","script-list");
  56. var list=document.querySelector('.sidebarred-main-content');
  57. var ps=list.querySelectorAll("p");
  58. for(let i=0;i<ps.length;i++){
  59. let p=ps[i];
  60. list.removeChild(p);
  61. }
  62. list.appendChild(ml);
  63. }
  64. var scs=l.querySelectorAll("li");
  65. if(scs){
  66. for(let i=0;i<scs.length;i++){
  67. let sc=scs[i];
  68. if(!ml.querySelector("li[data-script-id='"+sc.dataset.scriptId+"']")){
  69. //addScore(sc);
  70. ml.appendChild(sc);
  71. }
  72. }
  73. }
  74. }
  75. },
  76. onerror: function(e) {
  77. console.log(e);
  78. }
  79. });
  80. }
  81. }
  82. function addScore(script){
  83. var separator=script.querySelector('h2>span.name-description-separator');
  84. var description=script.querySelector('h2>span.description');
  85. if(separator){
  86. var score=document.createElement("strong");
  87. score.style.color="#e09015";
  88. score.innerHTML=script.dataset.scriptRatingScore;
  89. separator.parentNode.insertBefore(score,separator);
  90. }
  91. if(description){
  92. var scriptHref=script.querySelector('h2>a').href;
  93. let version=script.dataset.scriptVersion;
  94. let format=script.dataset.scriptLanguage;
  95. description.innerHTML+=`<strong>Ver.${version}</strong>
  96. <div id="install-area" class="list-install-area" style="display:none;float: right;position: relative;">
  97. <a class="install-link" data-install-format="${format}" data-ping-url href="${scriptHref.replace(/\.org\/.*\/scripts\//,".org/scripts/")}/code/script.user.js">Install</a><a style="cursor:pointer;" class="install-help-link refresh-info" title="Check status" rel="nofollow"><span><svg class="icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2274"><path d="M981.314663 554.296783a681.276879 681.276879 0 0 1-46.986468 152.746388q-105.706098 230.734238-360.983096 242.19829a593.06288 593.06288 0 0 1-228.689008-33.853939v-1.022615l-31.808709 79.979258a55.759429 55.759429 0 0 1-20.506122 22.551352 40.043451 40.043451 0 0 1-21.04434 5.382184 51.076928 51.076928 0 0 1-19.483507-5.382184 95.210839 95.210839 0 0 1-13.347817-7.158305 52.314831 52.314831 0 0 1-5.382184-4.628679L71.671707 731.908862a57.427906 57.427906 0 0 1-7.158305-21.528737 46.932646 46.932646 0 0 1 1.022615-17.438277 35.952991 35.952991 0 0 1 7.158305-13.347816 74.435608 74.435608 0 0 1 10.279972-10.279972 60.495751 60.495751 0 0 1 11.248765-7.373593 50.431066 50.431066 0 0 1 8.18092-3.606063 6.189512 6.189512 0 0 0 3.067845-1.776121l281.003839-74.866183a91.497132 91.497132 0 0 1 35.899168-2.583448 122.337047 122.337047 0 0 1 22.174599 6.404799 21.528737 21.528737 0 0 1 12.325202 12.325202 76.157907 76.157907 0 0 1 4.628679 14.854829 47.63233 47.63233 0 0 1 0 14.370431 55.167388 55.167388 0 0 1-2.04523 10.764369 10.764368 10.764368 0 0 0-1.022615 3.606063l-32.831324 79.979258a677.50935 677.50935 0 0 0 164.264262 39.505232q77.395809 7.696523 131.809692-3.606063a358.507291 358.507291 0 0 0 101.023598-36.921784 381.27393 381.27393 0 0 0 73.951211-50.753997 352.64071 352.64071 0 0 0 48.708767-55.382676 410.391547 410.391547 0 0 0 26.910921-41.550462c3.767529-7.481236 6.673908-13.616926 8.719139-18.460892zM40.885614 449.667121a685.69027 685.69027 0 0 1 63.563595-176.427998q118.0313-212.273346 374.330913-207.160271a571.803252 571.803252 0 0 1 207.160271 39.989629l33.853939-78.956643A75.619688 75.619688 0 0 1 735.187378 9.189165a37.67529 37.67529 0 0 1 15.393047-8.234742 42.303968 42.303968 0 0 1 14.854829-0.538219 47.578509 47.578509 0 0 1 13.347817 3.606064 102.907362 102.907362 0 0 1 11.302586 6.13569 49.569917 49.569917 0 0 1 6.673909 4.628678l3.067845 3.067845 154.84544 276.913379a81.970666 81.970666 0 0 1 6.13569 22.712817 46.986468 46.986468 0 0 1-1.022615 17.438277 32.293105 32.293105 0 0 1-7.696523 13.347817 69.322533 69.322533 0 0 1-10.764369 9.741753 92.142994 92.142994 0 0 1-11.302587 6.673909l-8.18092 4.09046a7.104483 7.104483 0 0 1-3.067845 1.022615l-283.049068 67.546412a112.003254 112.003254 0 0 1-46.125319-1.022615c-11.571696-3.390776-19.160576-8.019454-22.551352-13.832214a41.173709 41.173709 0 0 1-5.382184-21.04434 97.256069 97.256069 0 0 1 1.291724-17.438277 24.381295 24.381295 0 0 1 3.067845-8.234742L600.632773 296.81309a663.730958 663.730958 0 0 0-164.102797-43.057474q-77.987849-9.203535-131.809692 0a348.227319 348.227319 0 0 0-101.292707 33.853938 368.571976 368.571976 0 0 0-75.350579 49.246986 383.31916 383.31916 0 0 0-50.269601 54.360061 408.507783 408.507783 0 0 0-28.740863 41.012244A113.025869 113.025869 0 0 0 40.885614 449.667121z m0 0" fill="#ffffff" p-id="2275"></path></svg></span></a>
  98. </div><div id="installation-instructions-modal-js" aria-hidden="true"><p class="installation-instructions-modal-content-bypass"><a href="#"></a></p></div><div id="installation-instructions-modal-css" aria-hidden="true"><p class="installation-instructions-modal-content-bypass"><a href="#"></a></p></div>`;
  99. var installArea=description.querySelector("#install-area");
  100. let installLink=installArea.querySelector(".install-link");
  101. let checkInfo=installArea.querySelector(".install-help-link");
  102. checkInfo.onclick=()=>{
  103. GM_xmlhttpRequest({
  104. method: 'GET',
  105. url: scriptHref,
  106. onload: function(result) {
  107. var doc = null;
  108. try {
  109. doc = document.implementation.createHTMLDocument('');
  110. doc.documentElement.innerHTML = result.responseText;
  111. }
  112. catch (e) {
  113. console.log('parse error');
  114. }
  115. if (!doc) {
  116. return;
  117. }
  118. var installInfo=doc.querySelector("#install-area>.install-link");
  119. if(installInfo){
  120. let setInfo=info=>{
  121. if(info.installed){
  122. if(parseFloat(info.version) < parseFloat(version)){
  123. installLink.innerHTML="Update to version "+version;
  124. }else if(parseFloat(info.version) > parseFloat(version)){
  125. installLink.innerHTML="Downgrade to version "+version;
  126. }else{
  127. installLink.innerHTML="Reinstall version "+version;
  128. }
  129.  
  130. if(!info.enabled){
  131. installLink.style.backgroundColor="#6a6a6a";
  132. }else{
  133. installLink.style.backgroundColor="";
  134. }
  135. }else{
  136. installLink.innerHTML="Install version "+version;
  137. }
  138. };
  139. if(window.external.Tampermonkey){
  140. window.external.Tampermonkey.isInstalled(installInfo.dataset.scriptName, installInfo.dataset.scriptNamespace, e=>{
  141. setInfo(e);
  142. });
  143. }else if(window.external.Violentmonkey){
  144. window.external.Violentmonkey.isInstalled(installInfo.dataset.scriptName, installInfo.dataset.scriptNamespace).then(e=>{
  145. setInfo(e);
  146. });
  147. }
  148. }
  149. }
  150. });
  151. };
  152. if(!window.external.Tampermonkey && !window.external.Violentmonkey){
  153. checkInfo.style.display="none";
  154. }
  155. }
  156. }
  157. var sortDiv=document.querySelector("#script-list-sort");
  158. if(sortDiv){
  159. var switchFilter=document.createElement("div"),enableFilter=!GM_getValue("disableFilter");
  160. var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
  161. var observer = new MutationObserver(function(records){
  162. records.map(function(record) {
  163. for(var i=0;i<record.addedNodes.length;i++){
  164. var curNode=record.addedNodes[i];
  165. if(curNode.className=="script-list"){
  166. var scripts=curNode.querySelectorAll('li');
  167. for(let i=0;i<scripts.length;i++){
  168. let script=scripts[i];
  169. addScore(script);
  170. }
  171. if(enableFilter)filter(curNode);
  172. }else if(curNode.tagName=="LI"){
  173. addScore(curNode);
  174. if(enableFilter)filter(curNode);
  175. }
  176. }
  177. });
  178. });
  179. var option = {
  180. 'childList': true
  181. };
  182. observer.observe(document.querySelector("body>.width-constraint .sidebarred-main-content"), option);
  183. var scriptList=document.querySelector("#browse-script-list,#user-script-list,ol.script-list");
  184. if(scriptList)observer.observe(scriptList, option);
  185. var scripts=document.querySelectorAll('ol.script-list>li');
  186. for(let i=0;i<scripts.length;i++){
  187. let script=scripts[i];
  188. addScore(script);
  189. }
  190. //Modify from GreasyFork Bullshit Filter,Thanks to darkred
  191. var style = document.createElement('style');
  192. style.textContent = `
  193. li.filtered {
  194. display:none !important;
  195. }
  196. .script-list>li:hover .list-install-area {
  197. display:block!important;
  198. }
  199. @-webkit-keyframes spin {
  200. from {
  201. -webkit-transform: rotate(0deg);
  202. }
  203. to {
  204. -webkit-transform: rotate(360deg);
  205. }
  206. }
  207. @keyframes spin {
  208. from {
  209. transform: rotate(0deg);
  210. }
  211. to {
  212. transform: rotate(360deg);
  213. }
  214. }
  215. .refresh-info:hover>span {
  216. display: block;
  217. -webkit-animation: spin 1s linear 1s 5 alternate;
  218. animation: spin 1s linear infinite;
  219. }`;
  220. style.type = 'text/css';
  221. document.querySelector('head').appendChild(style);
  222. var bullshit=/vip.*视频|网课|刷课|(mooc|考试|学习).*(答题|挂机)|(网盘|網盤|云盘).*(vip|直链)|优惠劵|AntiGame|split|Agar|\.io(\b|:|\/|\.|$)|ExtencionRipXChetoMalo|AposBot|DFxLite|ZTx-Lite|AposFeedingBot|AposLoader|Blah Blah|Orc Clan Script|Astro\s*Empires|^\s*Attack|^\s*Battle|BiteFight|Blood\s*Wars|Bots|Bots4|Brawler|\bBvS\b|Business\s*Tycoon|Castle\s*Age|City\s*Ville|Comunio|Conquer\s*Club|CosmoPulse|Dark\s*Orbit|Dead\s*Frontier|\bDOA\b|DotD|Dossergame|Dragons\s*of\s*Atlantis|Dugout|\bDS[a-z]+\n|Empire\s*Board|eRep(ublik)?|Epic.*War|ExoPlanet|Falcon Tools|Feuerwache|Farming|FarmVille|Fightinfo|Frontier\s*Ville|Ghost\s*Trapper|Gladiatus|Goalline|Gondal|Grepolis|Hobopolis|\bhwm(\b|_)|Ikariam|\bIT2\b|Jellyneo|Kapi\s*Hospital|Kings\s*Age|Kingdoms?\s*of|knastv(ö|oe)gel|Knight\s*Fight|\b(Power)?KoC(Atta?ck)?\b|\bKOL\b|Kongregate|Last\s*Emperor|Legends?\s*of|Light\s*Rising|Lockerz|\bLoU\b|Mafia\s*(Wars|Mofo)|Menelgame|Mob\s*Wars|Mouse\s*Hunt|Molehill\s*Empire|NeoQuest|MyFreeFarm|Neopets|Nemexia|\bOGame\b|Ogar(io)?|Pardus|Pennergame|Pigskin\s*Empire|PlayerScripts|Popmundo|Po?we?r\s*(Bot|Tools)|PsicoTSI|Ravenwood|Schulterglatze|slitheriogameplay|SpaceWars|\bSW_[a-z]+\n|\bSnP\b|The\s*Crims|The\s*West|Travian|Treasure\s*Isl(and|e)|Tribal\s*Wars|TW.?PRO|Vampire\s*Wars|War\s*of\s*Ninja|West\s*Wars|\bWoD\b|World\s*of\s*Dungeons|wtf\s*battles|Wurzelimperium/i;
  223. var filterName="Enable Filter",filteredNum=0;
  224. var filter=function(t){
  225. [].forEach.call(t.querySelectorAll('article>h2'), function(item) {
  226. if(bullshit.test(item.innerText.replace("\n",""))){
  227. item.parentNode.parentNode.classList.add('filtered');
  228. filteredNum++;
  229. }
  230. });
  231. };
  232. if(enableFilter)filter(document);
  233. switchFilter.innerHTML='<input type="checkBox" name="switchFilter" id="switchFilter"/><label for="switchFilter">'+filterName+(filteredNum?' ('+filteredNum+' filtered)':'')+'</label>';
  234. var switchFilterCheckbox=switchFilter.querySelector('#switchFilter');
  235. var switchFilterLabel=switchFilterCheckbox.nextSibling;
  236. switchFilterCheckbox.checked=enableFilter;
  237. switchFilterCheckbox.onclick=function(){
  238. if(enableFilter){
  239. [].forEach.call(document.querySelectorAll('li.filtered'), function(item) {
  240. item.classList.remove('filtered');
  241. });
  242. switchFilterLabel.innerHTML=filterName;
  243. }else{
  244. filteredNum=0;
  245. filter(document);
  246. switchFilterLabel.innerHTML=filterName+' ('+filteredNum+' filtered)';
  247. }
  248. GM_setValue("disableFilter",enableFilter);
  249. enableFilter=!enableFilter;
  250. };
  251. sortDiv.insertBefore(switchFilter,sortDiv.firstChild);
  252. }
  253. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址