// ==UserScript== // @name The Login-free GreasyFork // @name:zh-CN 大人世界的GreasyFork // @name:zh-TW 大人世界的GreasyFork // @namespace https://github.com/matthewlu070111 // @version 1.0 // @description This is a script that allows you to access some plugins in GreasyFork that need to be logged in to view without a login status. // @description:zh-CN 这是一个能让你在未登录GreasyFork的情况下也可以访问一些需要登陆后才能查看的插件的脚本。 // @description:zh-TW 這是一個能讓你在未登入GreasyFork的情況下也可以存取一些需要登陸後才能查看的插件的腳本。 // @author imxiaoanag // @match http*://greasyfork.org/* // @match http*://www.greasyfork.org/* // @match http*://sleazyfork.org/* // @match http*://www.sleazyfork.org/* // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // @grant GM_notification // @grant GM.xmlHttpRequest // @grant GM.setValue // @grant GM.getValue // @grant GM.registerMenuCommand // @grant GM.notification // @connect greasyfork.org // @connect sleazyfork.org // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; var _GM_xmlhttpRequest,_GM_registerMenuCommand,_GM_notification; if(typeof GM_xmlhttpRequest!='undefined'){ _GM_xmlhttpRequest=GM_xmlhttpRequest; }else if(typeof GM!='undefined' && typeof GM.xmlHttpRequest!='undefined'){ _GM_xmlhttpRequest=GM.xmlHttpRequest; } if(typeof GM_registerMenuCommand!='undefined'){ _GM_registerMenuCommand=GM_registerMenuCommand; }else if(typeof GM!='undefined' && typeof GM.registerMenuCommand!='undefined'){ _GM_registerMenuCommand=GM.registerMenuCommand; } if(typeof GM_notification!='undefined'){ _GM_notification=GM_notification; }else if(typeof GM!='undefined' && typeof GM.notification!='undefined'){ _GM_notification=GM.notification; } if(typeof _GM_xmlhttpRequest=='undefined')_GM_xmlhttpRequest=(f)=>{}; if(typeof _GM_registerMenuCommand=='undefined')_GM_registerMenuCommand=(s,f)=>{}; if(typeof _GM_notification=='undefined')_GM_notification=(s)=>{}; var storage={ supportGM: typeof GM_getValue=='function' && typeof GM_getValue('a','b')!='undefined', supportGMPromise: typeof GM!='undefined' && typeof GM.getValue=='function' && typeof GM.getValue('a','b')!='undefined', mxAppStorage:(function(){ try{ return window.external.mxGetRuntime().storage; }catch(e){ }; })(), operaUJSStorage:(function(){ try{ return window.opera.scriptStorage; }catch(e){ }; })(), setItem:function(key,value){ if(this.operaUJSStorage){ this.operaUJSStorage.setItem(key,value); }else if(this.mxAppStorage){ this.mxAppStorage.setConfig(key,value); }else if(this.supportGM){ GM_setValue(key,value); }else if(this.supportGMPromise){ GM.setValue(key,value); }else if(window.localStorage){ window.localStorage.setItem(key,value); }; }, getItem:function(key,cb){ var value; if(this.operaUJSStorage){ value=this.operaUJSStorage.getItem(key); }else if(this.mxAppStorage){ value=this.mxAppStorage.getConfig(key); }else if(this.supportGM){ value=GM_getValue(key); }else if(this.supportGMPromise){ value=GM.getValue(key).then(v=>{cb(v)}); return; }else if(window.localStorage){ value=window.localStorage.getItem(key); }; cb(value); }, }; if(document.querySelector('span.sign-in-link')){ var otherSite=/greasyfork\.org/.test(location.hostname)?"sleazyfork":"greasyfork"; if(/scripts\/\d+/.test(location.href)){ if(!document.querySelector("#script-info") && (otherSite == "greasyfork" || document.querySelector("div.width-constraint>section>p>a").href.indexOf("sign_in")!=-1)){ location.href=location.href.replace(/\/\/([^\.]+\.)?(greasyfork|sleazyfork)\.org/,"//$1"+otherSite+"\.org"); } }else if(/\/(scripts|users)(\/|.*(\?|&)q=|.*[\?&]set=)/.test(location.href)){ _GM_xmlhttpRequest({ method: 'GET', url: location.href.replace(/\/\/([^\.]+\.)?(greasyfork|sleazyfork)\.org/,"//$1"+otherSite+"\.org"), onload: function(result) { var doc = null; try { doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = result.responseText; } catch (e) { console.log('parse error'); } if (!doc) { return; } var l = doc.querySelector('ol.script-list'); if (l) { var ml = document.querySelector('ol.script-list'); if(!ml){ ml=document.createElement("ol"); ml.setAttribute("class","script-list"); var list=document.querySelector('.sidebarred-main-content'); var ps=list.querySelectorAll("p"); for(let i=0;i