Greasyfork Search with Sleazyfork Results include

Merge adult results of sleazyfork into greasyfork when the script is no longer anonymously available, add rating score and version for scripts then

Size

27.5 KB

Version

1.6.6

Created

Oct 27, 2025

Updated

about 1 month ago

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      1.6.6
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// @match        http*://greasyfork.org/*
14// @match        http*://www.greasyfork.org/*
15// @match        http*://sleazyfork.org/*
16// @match        http*://www.sleazyfork.org/*
17// @grant        GM_xmlhttpRequest
18// @grant        GM_setValue
19// @grant        GM_getValue
20// @grant        GM_registerMenuCommand
21// @grant        GM_notification
22// @grant        GM.xmlHttpRequest
23// @grant        GM.setValue
24// @grant        GM.getValue
25// @grant        GM.registerMenuCommand
26// @grant        GM.notification
27// @connect      greasyfork.org
28// @connect      sleazyfork.org
29// @contributionURL https://www.buymeacoffee.com/hoothin
30// @contributionAmount 1
31// @downloadURL https://update.greasyfork.org/scripts/23840/Greasyfork%20Search%20with%20Sleazyfork%20Results%20include.user.js
32// @updateURL https://update.greasyfork.org/scripts/23840/Greasyfork%20Search%20with%20Sleazyfork%20Results%20include.meta.js
33// ==/UserScript==
34
35(function() {
36    'use strict';
37    var _GM_xmlhttpRequest,_GM_registerMenuCommand,_GM_notification;
38    if(typeof GM_xmlhttpRequest!='undefined'){
39        _GM_xmlhttpRequest=GM_xmlhttpRequest;
40    }else if(typeof GM!='undefined' && typeof GM.xmlHttpRequest!='undefined'){
41        _GM_xmlhttpRequest=GM.xmlHttpRequest;
42    }
43    if(typeof GM_registerMenuCommand!='undefined'){
44        _GM_registerMenuCommand=GM_registerMenuCommand;
45    }else if(typeof GM!='undefined' && typeof GM.registerMenuCommand!='undefined'){
46        _GM_registerMenuCommand=GM.registerMenuCommand;
47    }
48    if(typeof GM_notification!='undefined'){
49        _GM_notification=GM_notification;
50    }else if(typeof GM!='undefined' && typeof GM.notification!='undefined'){
51        _GM_notification=GM.notification;
52    }
53
54    if(typeof _GM_xmlhttpRequest=='undefined')_GM_xmlhttpRequest=(f)=>{};
55    if(typeof _GM_registerMenuCommand=='undefined')_GM_registerMenuCommand=(s,f)=>{};
56    if(typeof _GM_notification=='undefined')_GM_notification=(s)=>{};
57    var storage={
58        supportGM: typeof GM_getValue=='function' && typeof GM_getValue('a','b')!='undefined',
59        supportGMPromise: typeof GM!='undefined' && typeof GM.getValue=='function' && typeof GM.getValue('a','b')!='undefined',
60        mxAppStorage:(function(){
61            try{
62                return window.external.mxGetRuntime().storage;
63            }catch(e){
64            };
65        })(),
66        operaUJSStorage:(function(){
67            try{
68                return window.opera.scriptStorage;
69            }catch(e){
70            };
71        })(),
72        setItem:function(key,value){
73            if(this.operaUJSStorage){
74                this.operaUJSStorage.setItem(key,value);
75            }else if(this.mxAppStorage){
76                this.mxAppStorage.setConfig(key,value);
77            }else if(this.supportGM){
78                GM_setValue(key,value);
79            }else if(this.supportGMPromise){
80                GM.setValue(key,value);
81            }else if(window.localStorage){
82                window.localStorage.setItem(key,value);
83            };
84        },
85        getItem:function(key,cb){
86            var value;
87            if(this.operaUJSStorage){
88                value=this.operaUJSStorage.getItem(key);
89            }else if(this.mxAppStorage){
90                value=this.mxAppStorage.getConfig(key);
91            }else if(this.supportGM){
92                value=GM_getValue(key);
93            }else if(this.supportGMPromise){
94                value=GM.getValue(key).then(v=>{cb(v)});
95                return;
96            }else if(window.localStorage){
97                value=window.localStorage.getItem(key);
98            };
99            cb(value);
100        },
101    };
102    if(document.querySelector('span.sign-in-link')){
103        var otherSite=/greasyfork\.org/.test(location.hostname)?"sleazyfork":"greasyfork";
104        if(/scripts\/\d+/.test(location.href)){
105            if(!document.querySelector("#script-info") && (otherSite == "greasyfork" || document.querySelector("div.width-constraint>section>p>a").href.indexOf("sign_in")!=-1)){
106                location.href=location.href.replace(/\/\/([^\.]+\.)?(greasyfork|sleazyfork)\.org/,"//$1"+otherSite+"\.org");
107            }
108        }else if(/\/(scripts|users)(\/|.*(\?|&)q=|.*[\?&]set=)/.test(location.href)){
109            _GM_xmlhttpRequest({
110                method: 'GET',
111                url: location.href.replace(/\/\/([^\.]+\.)?(greasyfork|sleazyfork)\.org/,"//$1"+otherSite+"\.org"),
112                onload: function(result) {
113                    var doc = null;
114                    try {
115                        doc = document.implementation.createHTMLDocument('');
116                        doc.documentElement.innerHTML = result.responseText;
117                    }
118                    catch (e) {
119                        console.log('parse error');
120                    }
121                    if (!doc) {
122                        return;
123                    }
124                    var l = doc.querySelector('ol.script-list');
125                    if (l) {
126                        var ml = document.querySelector('ol.script-list');
127                        if(!ml){
128                            ml=document.createElement("ol");
129                            ml.setAttribute("class","script-list");
130                            var list=document.querySelector('.sidebarred-main-content');
131                            var ps=list.querySelectorAll("p");
132                            for(let i=0;i<ps.length;i++){
133                                let p=ps[i];
134                                list.removeChild(p);
135                            }
136                            list.appendChild(ml);
137                        }
138                        var scs=l.querySelectorAll("li");
139                        if(scs){
140                            for(let i=0;i<scs.length;i++){
141                                let sc=scs[i];
142                                if(!ml.querySelector("li[data-script-id='"+sc.dataset.scriptId+"']")){
143                                    //addScore(sc);
144                                    ml.appendChild(sc);
145                                }
146                            }
147                        }
148                    }
149                },
150                onerror: function(e) {
151                    console.log(e);
152                }
153            });
154        }
155    }
156
157    var bullshit,bullshit_o=`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`;
158    var sortDiv=document.querySelector("#script-list-sort"),refreshIcon=document.createElement("span"),inUserPage=document.querySelector("#user-script-list")!=null,goodRating,okRating,badRating,totalInstalls,dailyInstalls;
159    refreshIcon.innerHTML=`<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>`;
160    if(inUserPage){
161        var ratingSpan=document.createElement("span");
162        goodRating=document.createElement("span");
163        okRating=document.createElement("span");
164        badRating=document.createElement("span");
165        totalInstalls=document.createElement("span");
166        dailyInstalls=document.createElement("span");
167        goodRating.className="good-rating-count";
168        okRating.className="ok-rating-count";
169        badRating.className="bad-rating-count";
170        totalInstalls.className="good-rating-count";
171        dailyInstalls.className="good-rating-count";
172        ratingSpan.appendChild(goodRating);
173        ratingSpan.appendChild(okRating);
174        ratingSpan.appendChild(badRating);
175        document.querySelector("#script-list-sort ul>li:nth-child(1)").appendChild(dailyInstalls);
176        document.querySelector("#script-list-sort ul>li:nth-child(2)").appendChild(totalInstalls);
177        document.querySelector("#script-list-sort ul>li:nth-child(3)").appendChild(ratingSpan);
178        ratingSpan.style.display=totalInstalls.style.display=dailyInstalls.style.display="none";
179        goodRating.innerHTML=okRating.innerHTML=badRating.innerHTML=totalInstalls.innerHTML=dailyInstalls.innerHTML="0";
180    }
181    storage.getItem("GeasyforkBullshit",v=>{
182        bullshit=v;
183        if(!bullshit)bullshit=bullshit_o;
184        if(/greasyfork\.org\/.*\/scripts\/23840[^\/]*$/.test(location.href)){
185            var p=document.createElement("p"),_bullshit;
186            p.style.width="99%";
187            p.innerHTML="<b>Filter RegExp</b><button id='ok' style='margin-left: 20px;'>Save</button><button id='reset' style='margin-left: 20px;'>Reset</button>";
188            var okBtn=p.querySelector("#ok");
189            var resetBtn=p.querySelector("#reset");
190            var filterTextarea=document.createElement("pre");
191            var prettifyScript=document.createElement("script");
192            prettifyScript.src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.js?skin=sons-of-obsidian";
193            document.head.appendChild(prettifyScript);
194            var prettifyStyle=document.createElement("link");
195            prettifyStyle.rel="stylesheet";
196            prettifyStyle.href="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css";
197            document.head.appendChild(prettifyStyle);
198            filterTextarea.contentEditable="true";
199            filterTextarea.className="prettyprint lang-js";
200            filterTextarea.style.whiteSpace="pre-wrap";
201            filterTextarea.style.overflowWrap="break-word";
202            filterTextarea.style.width="100%";
203            filterTextarea.innerHTML=bullshit;
204            var additionalInfo=document.querySelector("#additional-info");
205            p.appendChild(filterTextarea);
206            additionalInfo.insertBefore(p,additionalInfo.firstChild);
207            prettifyScript.onload=()=>{PR.prettyPrint();};
208            okBtn.onclick=()=>{
209                _bullshit=filterTextarea.innerText;
210                storage.setItem("GeasyforkBullshit", _bullshit);
211                alert("Saved");
212                //_GM_notification("Saved");
213            };
214            resetBtn.onclick=()=>{
215                storage.setItem("GeasyforkBullshit", bullshit_o);
216                alert("Reset over");
217                location.reload();
218                //_GM_notification("Reset over");
219            };
220        }
221        initFilter();
222    });
223
224    function addScore(script){
225        var separator=script.querySelector('h2>span.name-description-separator');
226        var description=script.querySelector('h2>span.description');
227        if(separator){
228            var score=document.createElement("strong");
229            score.style.color="#e09015";
230            score.innerHTML=script.dataset.scriptRatingScore;
231            separator.parentNode.insertBefore(score,separator);
232        }
233        if(description){
234            count(script);
235            var scriptHref=script.querySelector('h2>a').href;
236            let version=script.dataset.scriptVersion;
237            let format=script.dataset.scriptLanguage;
238            let cssAtag=script.dataset.scriptLanguage=="js"?"":`<a class="install-link" data-install-format="css" data-ping-url href="${scriptHref.replace(/\.org\/.*\/scripts\//,".org/scripts/")}/code/script.user.css">Install as user style</a>`;
239            description.innerHTML+=`<strong>Ver.${version}</strong>
240            <div id="install-area" class="list-install-area">
241            <a class="install-link" data-install-format="js" 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"></a>
242            ${cssAtag}
243            </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>`;
244            var installArea=description.querySelector("#install-area");
245            let installLink=installArea.querySelector(".install-link");
246            let checkInfo=installArea.querySelector(".install-help-link");
247            script.onmouseenter=e=>{
248                checkInfo.appendChild(refreshIcon);
249            };
250            script.onmouseleave=e=>{
251                if(refreshIcon && refreshIcon.parentNode)refreshIcon.parentNode.removeChild(refreshIcon);
252            };
253            checkInfo.onclick=()=>{
254                _GM_xmlhttpRequest({
255                    method: 'GET',
256                    url: scriptHref.replace(/(.*)-.*/,"$1.json"),
257                    onload: function(result) {
258                        var data = null;
259                        try {
260                            data = JSON.parse(result.responseText);
261                        }
262                        catch (e) {
263                            console.log('parse error');
264                        }
265                        if(data){
266                            let setInfo=info=>{
267                                if(info.installed){
268                                    if(parseFloat(info.version) < parseFloat(version)){
269                                        installLink.innerHTML="Update to version "+version;
270                                    }else if(parseFloat(info.version) > parseFloat(version)){
271                                        installLink.innerHTML="Downgrade to version "+version;
272                                    }else{
273                                        installLink.innerHTML="Reinstall version "+version;
274                                    }
275
276                                    if(!info.enabled){
277                                        installLink.style.backgroundColor="#6a6a6a";
278                                    }else{
279                                        installLink.style.backgroundColor="";
280                                    }
281                                }else{
282                                    installLink.innerHTML="Install version "+version;
283                                }
284                            };
285                            if(window.external.Tampermonkey){
286                                window.external.Tampermonkey.isInstalled(data.name, data.namespace, e=>{
287                                    setInfo(e);
288                                });
289                            }else if(window.external.Violentmonkey){
290                                window.external.Violentmonkey.isInstalled(data.name, data.namespace).then(e=>{
291                                    setInfo(e);
292                                });
293                            }
294                        }
295                    }
296                });
297            };
298            if(!window.external.Tampermonkey && !window.external.Violentmonkey){
299                checkInfo.style.display="none";
300            }
301        }
302    }
303
304    function count(script){
305        var dailySpan=script.querySelector("dd.script-list-daily-installs>span");
306        if(!dailySpan)return;
307        var goodCount=parseInt(script.querySelector("dd.script-list-ratings>span>.good-rating-count").innerHTML.replace(/[^\d]/g,""));
308        var okCount=parseInt(script.querySelector("dd.script-list-ratings>span>.ok-rating-count").innerHTML.replace(/[^\d]/g,""));
309        var badCount=parseInt(script.querySelector("dd.script-list-ratings>span>.bad-rating-count").innerHTML.replace(/[^\d]/g,""));
310        if(badCount && badCount>2 && badCount>goodCount){
311            let scriptLink=script.querySelector('.script-link');
312            if(scriptLink){
313                var warn=document.createTextNode("⚠");
314                scriptLink.style.textDecoration="line-through";
315                scriptLink.style.color="#67000080";
316                scriptLink.title="May be dangerous!";
317                scriptLink.parentNode.insertBefore(warn,scriptLink);
318            }
319        }
320
321        if(!inUserPage)return;
322        var dailyCount=parseInt(dailySpan.innerHTML.replace(/[^\d\.\-]/g,""));
323        var totalCount=parseInt(script.querySelector("dd.script-list-total-installs>span").innerHTML.replace(/[^\d]/g,""));
324        goodRating.innerHTML=parseInt(goodRating.innerHTML)+goodCount;
325        okRating.innerHTML=parseInt(okRating.innerHTML)+okCount;
326        badRating.innerHTML=parseInt(badRating.innerHTML)+badCount;
327        totalInstalls.innerHTML=parseInt(totalInstalls.innerHTML)+totalCount;
328        dailyInstalls.innerHTML=parseInt(dailyInstalls.innerHTML)+dailyCount;
329        ratingSpan.style.display=totalInstalls.style.display=dailyInstalls.style.display="";
330    }
331
332    _GM_registerMenuCommand("Configure the Filter", ()=>{
333        location.href="https://greasyfork.org/scripts/23840#additional-info";
334        /*var _bullshit=window.prompt("Configure the Filter", bullshit);
335        if(_bullshit == ""){
336            bullshit=bullshit_o;
337            storage.setItem("GeasyforkBullshit", bullshit);
338            location.reload();
339        }else if(_bullshit != null){
340            bullshit=_bullshit;
341            storage.setItem("GeasyforkBullshit", bullshit);
342            location.reload();
343        }*/
344    });
345
346    function initFilter(){
347        var enableFilter;
348        if(sortDiv){
349            storage.getItem("disableFilter",v=>{
350                enableFilter=!v;
351                var switchFilter=document.createElement("div");
352                var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
353                var observer = new MutationObserver(function(records){
354                    records.map(function(record) {
355                        for(var i=0;i<record.addedNodes.length;i++){
356                            var curNode=record.addedNodes[i];
357                            if(curNode.className=="script-list"){
358                                var scripts=curNode.querySelectorAll('li');
359                                for(let i=0;i<scripts.length;i++){
360                                    let script=scripts[i];
361                                    addScore(script);
362                                }
363                                if(enableFilter)filter(curNode);
364                            }else if(curNode.tagName=="LI"){
365                                addScore(curNode);
366                                if(enableFilter)filter(curNode);
367                            }
368                        }
369                    });
370                });
371                var option = {
372                    'childList': true
373                };
374                observer.observe(document.querySelector("body>.width-constraint .sidebarred-main-content"), option);
375                var scriptList=document.querySelector("#browse-script-list,#user-script-list,ol.script-list");
376                if(scriptList)observer.observe(scriptList, option);
377                var scripts=document.querySelectorAll('ol.script-list>li');
378                for(let i=0;i<scripts.length;i++){
379                    let script=scripts[i];
380                    addScore(script);
381                }
382                //Modify from GreasyFork Bullshit Filter,Thanks to darkred
383                var style = document.createElement('style');
384                style.textContent = `
385                li.filtered {
386                     display: none !important;
387                }
388                .list-option{
389                     position: relative;
390                }
391                #script-list-sort li>span{
392                     position: absolute;
393                     top: 4px;
394                     right: 2px;
395                     pointer-events: none;
396                     font-weight: 500;
397                }
398                #script-list-sort li>span:lang(ar), #script-list-sort li>span:lang(he), #script-list-sort li>span:lang(ug){
399                     right: unset;
400                     left: 2px;
401                }
402                #script-list-sort li>span>span{
403                     margin: 0 0 0 2px;
404                }
405                .script-list>li .list-install-area{
406                     display: none;
407                     float: right;
408                     position: relative;
409                }
410                .script-list>li:hover .list-install-area {
411                     display: block;
412                }
413                @-webkit-keyframes spin {
414                 from {
415                     -webkit-transform: rotate(0deg);
416                 }
417                 to {
418                     -webkit-transform: rotate(360deg);
419                 }
420                }
421                @keyframes spin {
422                 from {
423                     transform: rotate(0deg);
424                 }
425                 to {
426                     transform: rotate(360deg);
427                 }
428                }
429                .refresh-info:hover>span {
430                     display: block;
431                     -webkit-animation: spin 1s linear 1s 5 alternate;
432                     animation: spin 1s linear infinite;
433                }`;
434                style.type = 'text/css';
435                document.querySelector('head').appendChild(style);
436                var bullshitReg=new RegExp(bullshit,"i");
437                var filterName="Enable Filter",filteredNum=0;
438                var filter=function(t){
439                    [].forEach.call(t.querySelectorAll('article>h2'), function(item) {
440                        if(bullshitReg.test(item.innerText.replace("\n"," "))){
441                            item.parentNode.parentNode.classList.add('filtered');
442                            filteredNum++;
443                        }
444                    });
445                };
446                if(enableFilter)filter(document);
447                switchFilter.innerHTML='<input type="checkBox" name="switchFilter" id="switchFilter"/><label for="switchFilter">'+filterName+(filteredNum?' ('+filteredNum+' filtered)':'')+'</label>';
448                var switchFilterCheckbox=switchFilter.querySelector('#switchFilter');
449                var switchFilterLabel=switchFilterCheckbox.nextSibling;
450                switchFilterCheckbox.checked=enableFilter;
451                switchFilterCheckbox.onclick=function(){
452                    if(enableFilter){
453                        [].forEach.call(document.querySelectorAll('li.filtered'), function(item) {
454                            item.classList.remove('filtered');
455                        });
456                        switchFilterLabel.innerHTML=filterName;
457                    }else{
458                        filteredNum=0;
459                        filter(document);
460                        switchFilterLabel.innerHTML=filterName+' ('+filteredNum+' filtered)';
461                    }
462                    storage.setItem("disableFilter",enableFilter);
463                    enableFilter=!enableFilter;
464                };
465                sortDiv.insertBefore(switchFilter,sortDiv.firstChild);
466            });
467        }
468    }
469})();
Greasyfork Search with Sleazyfork Results include | Robomonkey