RandomSexyPicParser

Random Sexy Pictures Parser

2022-11-26 일자. 최신 버전을 확인하세요.

질문, 리뷰하거나, 이 스크립트를 신고하세요.
  1. // ==UserScript==
  2. // @name RandomSexyPicParser
  3. // @name:zh-CN 软瑟盘
  4. // @name:zh-TW 軟瑟盤
  5. // @name:ja RandomSexyPicParser
  6. // @namespace hoothin
  7. // @version 1.3.15.1
  8. // @description Random Sexy Pictures Parser
  9. // @description:zh-CN 随机色图
  10. // @description:zh-TW 隨機色圖
  11. // @description:ja Random Sexy Pictures Parser
  12. // @author hoothin
  13. // @include https://api.lolicon.app/setu/v2*
  14. // @include https://api.nyan.xyz/httpapi/sexphoto*
  15. // @include https://huanmengii.xyz/ZY/aCOS/cos*
  16. // @include https://api.uomg.com/api/rand.img3*
  17. // @include https://api.vvhan.com/api/tao*
  18. // @include https://www.hlapi.cn/api/mjx*
  19. // @include https://3650000.xyz/api/?*
  20. // @include https://*
  21. // @include http://*
  22. // @icon data:image/jpg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAgACADASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAABgcICQX/xAAsEAABAwMEAQIFBQEAAAAAAAABAgMEBQYRAAcSITEIQRMUIjJRIyRCYYHB/8QAFgEBAQEAAAAAAAAAAAAAAAAABgQF/8QAIxEAAgEDBAEFAAAAAAAAAAAAAQMCABESBCFBUQUVMWHB8P/aAAwDAQACEQMRAD8AHNrPQdFYZlXBX6fJuRqns/NhptIUmSodhCG0nsdeCcqOAPOnVLvK3r227YVFjy6OEpLaWavEMKU2cY4utn7eseMjAHeq7vuaxtDs/VnaRSG6nIp9MffjwnMhD7jTKlpQsgZ7KcfnWQFv+sO6d0txKOxcFuw7ibqUpDUmPT4vwnWStQT+ksKJPHOfqB6Hf50Qd4vUOjlKWUj3x8Dik6PIJhO2Nojr7qo6fGtG1YUVNSrcJMl7PAzpjcZtPXkKUQCP+6CNz7Ttq+rdmP1iOKnDhq5iTBd5OMjoFbS0+evbvIGmfbm2dgVrcmq29W4MauJSwWYqpzaHUK4r+ocVAgE9eOzpmVnYaj2zt4qZQ4saOWnlhuBGYRHa+AnyPhoAGcknx3qD05qEiUY2MeR+vWgNeljTAm4l3T6vCDG3k2YffoFQfDdRhplQ5UNYK1j7hxPvyHX+6yhqm3tV2XuqrV2mJpLkpt1TiXFMltb5UMlOBnifOR1351f3owrEmgekbb52mKXVG2qU0ostjms9q5cO++8jGkp6lrQtLca6H7lp8gUCsrBcqESYSxyUPKig/wAseT76ZLcJQBB3omV4zsfapo2gq993nuhR6vUGl01EV/5pNOhO/uJCgfpSpRGG289n+vfV/wBs3LMNoNxn1olzo6HEvSgrkyHVrJWEqx2lOeIPvjU02Kzbe3VBkvPzIkl+SOSni5kke3+f1jXN3i9Vsdi2GqDakOUoBHFElCShAI8qB/GfbUmoeFrMb7mrFJLGAgbCv//Z
  23. // @grant GM_addStyle
  24. // @grant GM_setValue
  25. // @grant GM_getValue
  26. // @grant GM_deleteValue
  27. // @grant GM_xmlhttpRequest
  28. // @grant GM_registerMenuCommand
  29. // @run-at document-idle
  30. // @license MIT
  31. // ==/UserScript==
  32.  
  33.  
  34. (function() {
  35. 'use strict';
  36. var setuConfig={
  37. "api.lolicon.app":{
  38. include: /setu\/v2/i,
  39. name:"Lolicon ACG SexyPic",
  40. url:"https://api.lolicon.app/setu/v2?r18=1&num=5",
  41. luckyUrl:["https://api.lolicon.app/setu/v2?r18=0&num=5",
  42. "https://api.lolicon.app/setu/v2?r18=1&num=5",
  43. "https://api.lolicon.app/setu/v2?r18=2&num=5"],
  44. run:()=>{
  45. var searchNum=getSearchParam("num");
  46. var leftNum=searchNum;
  47. if(jsonData != "Forbidden"){
  48. let datas=jsonData.data;
  49. datas.forEach(function(data){
  50. leftNum--;
  51. let img=createImg(data.urls?data.urls.original:data.url);
  52. img.title=data.title+" - "+data.author;
  53. });
  54. }else{
  55. location.href=curConfig.url;
  56. }
  57. processByTime(leftNum,loadNum=>{
  58. GM_xmlhttpRequest({
  59. method: 'GET',
  60. url: curConfig.url.replace("num=5","num="+loadNum),
  61. timeout:15000,
  62. onload: function(result) {
  63. let datas=JSON.parse(result.responseText).data;
  64. datas.forEach(function(data){
  65. let img=createImg(data.urls?data.urls.original:data.url);
  66. img.title=data.title+" - "+data.author;
  67. });
  68. }
  69. });
  70. },5,1000);
  71. },
  72. getSearch:(param)=>{
  73. return `v2?r18=${param.r18}&num=${param.num}`;
  74. },
  75. initSearch:()=>{
  76. var searchNum=getSearchParam("num");
  77. var searchR18=getSearchParam("r18");
  78. numInput.value=searchNum;
  79. r18Check.checked=searchR18==1||searchR18==2;
  80. sfwCheck.checked=searchR18==0||searchR18==2;
  81. }
  82. },
  83. "api.nyan.xyz":{
  84. hide: true,
  85. include: /httpapi\/sexphoto/i,
  86. name:"Nyan ACG SexyPic",
  87. url:"https://api.nyan.xyz/httpapi/sexphoto/?r18=true&num=5",
  88. luckyUrl:["https://api.nyan.xyz/httpapi/sexphoto/?r18=true&num=5",
  89. "https://api.nyan.xyz/httpapi/sexphoto/?r18=false&num=5"],
  90. run:()=>{
  91. var searchNum=getSearchParam("num");
  92. var leftNum=searchNum;
  93. var urls=jsonData.data.url;
  94. if(!urls instanceof Array){
  95. urls=[urls];
  96. }
  97. urls.forEach(function(data){
  98. leftNum--;
  99. createImg(data);
  100. });
  101. processByTime(leftNum,loadNum=>{
  102. GM_xmlhttpRequest({
  103. method: 'GET',
  104. url: curConfig.url.replace("num=5","num="+loadNum),
  105. timeout:15000,
  106. onload: function(result) {
  107. urls=JSON.parse(result.responseText).data.url;
  108. urls.forEach(function(data){
  109. createImg(data);
  110. });
  111. }
  112. });
  113. },5,1000);
  114. },
  115. getSearch:(param)=>{
  116. return `?r18=${param.r18==1?"true":"false"}&num=${param.num}`;
  117. },
  118. initSearch:()=>{
  119. var searchNum=getSearchParam("num");
  120. var searchR18=getSearchParam("r18");
  121. numInput.value=searchNum;
  122. r18Check.checked=searchR18=="true";
  123. sfwCheck.checked=searchR18=="false";
  124. }
  125. },
  126. "buyersShow":{
  127. include: /api\/(rand|tao|mjx1)/i,
  128. name:"Taobao Buyers Show",
  129. urls:["https://api.uomg.com/api/rand.img3?format=json&num=15",
  130. "https://api.vvhan.com/api/tao?type=json&num=15",
  131. "https://www.hlapi.cn/api/mjx1?type=json&num=15"],
  132. run:()=>{
  133. r18Check.style.display=sfwCheck.style.display=r18CheckLabel.style.display=sfwCheckLabel.style.display="none";
  134. var searchNum=getSearchParam("num");
  135. processByTime(searchNum,loadNum=>{
  136. for(let i=0;i<loadNum;i++){
  137. createImg(location.href.replace(/1?\?.*/,"?")+"r="+Math.random());
  138. }
  139. },5,1000);
  140. },
  141. getSearch:(param)=>{
  142. return location.href.replace(/\d+$/,"")+param.num;
  143. },
  144. initSearch:()=>{
  145. var searchNum=getSearchParam("num");
  146. numInput.value=searchNum;
  147. }
  148. },
  149. "huanmengii.xyz":{
  150. hide: true,
  151. include: /ZY\/aCOS\/cos/i,
  152. name:"Cosplay Show",
  153. url:"https://huanmengii.xyz/ZY/aCOS/cos/?type=json&num=15",
  154. run:()=>{
  155. r18Check.style.display=sfwCheck.style.display=r18CheckLabel.style.display=sfwCheckLabel.style.display="none";
  156. var searchNum=getSearchParam("num");
  157. processByTime(searchNum,loadNum=>{
  158. for(let i=0;i<loadNum;i++){
  159. GM_xmlhttpRequest({
  160. method: 'GET',
  161. url: curConfig.url+"&"+Math.random(),
  162. timeout:15000,
  163. onload: function(result) {
  164. var curUrl=JSON.parse(result.responseText).pic;
  165. createImg(curUrl);
  166. }
  167. });
  168. }
  169. },5,1000);
  170. },
  171. getSearch:(param)=>{
  172. return "?type=json&num="+param.num;
  173. },
  174. initSearch:()=>{
  175. var searchNum=getSearchParam("num");
  176. numInput.value=searchNum;
  177. }
  178. },
  179. "3650000.xyz":{
  180. include: /\/api\/\?type=json/i,
  181. name:"3650000",
  182. url:"https://3650000.xyz/api/?type=json&mode=7&num=15",
  183. luckyUrl:["https://3650000.xyz/api/?type=json&num=15",
  184. "https://3650000.xyz/api/?type=json&mode=1&num=15",
  185. "https://3650000.xyz/api/?type=json&mode=2&num=15",
  186. "https://3650000.xyz/api/?type=json&mode=3&num=15",
  187. "https://3650000.xyz/api/?type=json&mode=66&num=15",
  188. "https://3650000.xyz/api/?type=json&mode=5&num=15",
  189. "https://3650000.xyz/api/?type=json&mode=7&num=15",
  190. "https://3650000.xyz/api/?type=json&mode=8&num=15",
  191. "https://3650000.xyz/api/?type=json&mode=9&num=15"],
  192. run:()=>{
  193. r18Check.style.display=sfwCheck.style.display=r18CheckLabel.style.display=sfwCheckLabel.style.display="none";
  194. var searchNum=getSearchParam("num");
  195. var searchMode=getSearchParam("mode");
  196. processByTime(searchNum,loadNum=>{
  197. for(let i=0;i<loadNum;i++){
  198. GM_xmlhttpRequest({
  199. method: 'GET',
  200. url: `${curConfig.url}&mode=${searchMode}&${Math.random()}`,
  201. timeout:15000,
  202. onload: function(result) {
  203. var curUrl=JSON.parse(result.responseText).url;
  204. createImg(curUrl);
  205. }
  206. });
  207. }
  208. },5,1000);
  209. },
  210. getSearch:(param)=>{
  211. return location.pathname+`?type=json&mode=${param.mode}&num=${param.num}`;
  212. },
  213. initSearch:()=>{
  214. var searchNum=getSearchParam("num");
  215. var searchMode=getSearchParam("mode");
  216. var modeObj=[
  217. ["Public",""],
  218. ["Weibo","1"],
  219. ["Instagram","2"],
  220. ["Cosplay","3"],
  221. ["Nsfw","66"],
  222. ["Mtcos","5"],
  223. ["Legs","7"],
  224. ["MoreCoser","8"],
  225. ["Tuwan","9"]
  226. ];
  227. modeObj.forEach(item=>{
  228. var option=document.createElement("option");
  229. option.value=item[1];
  230. option.innerHTML=item[0];
  231. if(item[1]==searchMode){
  232. option.selected=true;
  233. }
  234. modeSelect.appendChild(option);
  235. });
  236. modeSelect.style.display="inline";
  237. numInput.value=searchNum;
  238. }
  239. },
  240. "api.uomg.com":"buyersShow",
  241. "api.vvhan.com":"buyersShow",
  242. "www.hlapi.cn":"buyersShow",
  243. "api.ghser.com":"buyersShow"
  244. };
  245. GM_registerMenuCommand("I am feeling lucky", ()=>{
  246. var luckyUrls=[],targetUrl;
  247. for(var i in setuConfig){
  248. let sc=setuConfig[i];
  249. if(sc.hide){
  250. continue;
  251. }else if(sc.luckyUrl){
  252. luckyUrls=luckyUrls.concat(sc.luckyUrl);
  253. }else if(sc.urls){
  254. luckyUrls=luckyUrls.concat(sc.urls);
  255. }else if(sc.url){
  256. luckyUrls.push(sc.url);
  257. }
  258. }
  259. var randomIndex=Math.floor(Math.random()*luckyUrls.length);
  260. targetUrl=luckyUrls[randomIndex];
  261. location.href=targetUrl;
  262. });
  263. var curConfig=setuConfig[document.domain],jsonData,hasFloatImg=false,grabed=false,oClient;
  264. if(curConfig){
  265. if(!curConfig.run){
  266. curConfig=setuConfig[curConfig];
  267. }
  268. if(curConfig.include && !curConfig.include.test(location.href)){
  269. curConfig=false;
  270. }
  271. }
  272. if(!curConfig){
  273. var customRule=GM_getValue("RSPrules_"+document.domain+location.pathname);
  274. if(!customRule){
  275. GM_registerMenuCommand("Parse current api", customSet);
  276. return;
  277. }else{
  278. GM_registerMenuCommand("Stop parse api", () => {
  279. GM_deleteValue("RSPrules_"+document.domain+location.pathname);
  280. location.reload();
  281. });
  282. curConfig={run:()=>{
  283. var searchNum=getSearchParam("num");
  284. var leftNum=searchNum;
  285. r18Check.style.display=sfwCheck.style.display=r18CheckLabel.style.display=sfwCheckLabel.style.display="none";
  286. let parsePics=(data)=>{
  287. let picUrls=[],urlReg=/(https?|ftp|file):\/\/[\-A-Za-z0-9\+&@#/%?=~_\|!:,\.;]+[\-A-Za-z0-9\+&@#/%=~_\|]/g;
  288. if(typeof data == "string"){
  289. picUrls=data.match(urlReg);
  290. }else{
  291. let checkJson=obj=>{
  292. for(let i in obj){
  293. if(typeof obj[i] == "string"){
  294. let pics=obj[i].match(urlReg);
  295. if(pics)picUrls=picUrls.concat(pics);
  296. }else checkJson(obj[i]);
  297. }
  298. };
  299. checkJson(data);
  300. }
  301. if(picUrls){
  302. picUrls=picUrls.filter((item, index) => picUrls.indexOf(item) === index);
  303. picUrls.forEach(url=>{
  304. leftNum--;
  305. createImg(unescape(url));
  306. });
  307. }
  308. }
  309. parsePics(jsonData);
  310. processByTime(leftNum||1, loadNum=>{
  311. let href=location.href.replace(/num=\d+(&time=\d+)?/,"num="+loadNum+"&time="+Date.now()),postParams=href.match(/#p{(.*)}/);
  312. if(postParams){
  313. postParams=postParams[1];
  314. href=href.replace(/#p{.*/,"");
  315. }
  316. GM_xmlhttpRequest({
  317. method: postParams?'POST':'GET',
  318. data: postParams,
  319. headers: {
  320. 'Referer': location.href,
  321. "Content-Type": (postParams ? "application/x-www-form-urlencoded" : "text/html") + ";charset=" + (document.characterSet || document.charset || document.inputEncoding),
  322. },
  323. url: href,
  324. timeout:15000,
  325. onload: function(result) {
  326. var parseData;
  327. try{
  328. parseData=JSON.parse(result.responseText);
  329. console.log(parseData);
  330. }catch(e){
  331. parseData=result.responseText;
  332. }
  333. parsePics(parseData);
  334. }
  335. });
  336. }, (leftNum < searchNum - 1 ? 5 : 1), 1000);
  337. },
  338. getSearch:(param)=>{
  339. var href=location.href;
  340. if(/\bnum=/.test(href)){
  341. href=href.replace(/\bnum=\d+(&time=\d+)?/,"num="+param.num+"&time="+Date.now());
  342. }else{
  343. if(href.indexOf("?")==-1){
  344. if(href.indexOf("#")==-1){
  345. href+="?num="+param.num+"&time="+Date.now();
  346. }else{
  347. href=href.replace("#","?num="+param.num+"&time="+Date.now()+"#");
  348. }
  349. }else{
  350. href+="&num="+param.num+"&time="+Date.now();
  351. }
  352. }
  353. return href;
  354. },
  355. initSearch:()=>{
  356. var searchNum=getSearchParam("num");
  357. numInput.value=searchNum;
  358. }};
  359. }
  360. }
  361. document.title=curConfig.name?curConfig.name:"Random Sexy Pictures";
  362. try{
  363. var firstText = "";
  364. for (var i = 0; i < document.body.childNodes.length; i++) {
  365. var curNode = document.body.childNodes[i];
  366. if (curNode.nodeType == 1 || curNode.nodeName == "PRE") {
  367. firstText = curNode.nodeValue || curNode.innerText;
  368. break;
  369. }
  370. }
  371. if(firstText)jsonData=JSON.parse(firstText);
  372. }catch(e){
  373. console.log(e);
  374. jsonData=firstText;
  375. }
  376. document.body.innerHTML="";
  377. var imgCon=document.createElement("div");
  378. var btns=document.createElement("div");
  379. var numInput=document.createElement("input");
  380. var r18Check=document.createElement("input");
  381. var r18CheckLabel=document.createElement("label");
  382. var sfwCheck=document.createElement("input");
  383. var sfwCheckLabel=document.createElement("label");
  384. var modeSelect=document.createElement("select");
  385. var submit=document.createElement("button");
  386. var referrerMeta=document.createElement("meta");
  387. var viewportMeta=document.createElement("meta");
  388. var overMask=document.createElement("div");
  389. var homepage=document.createElement("a");
  390. for(var name in setuConfig){
  391. var config=setuConfig[name];
  392. if(config.hide || !config.name)continue;
  393. var siteA=document.createElement("a");
  394. var url=config.url;
  395. if(config.urls){
  396. var randomIndex=Math.floor(Math.random()*config.urls.length);
  397. url=config.urls[randomIndex];
  398. config.url=url;
  399. }
  400. siteA.href=url;
  401. siteA.innerHTML=config.name;
  402. btns.appendChild(siteA);
  403. }
  404. btns.appendChild(numInput);
  405. btns.appendChild(r18Check);
  406. btns.appendChild(r18CheckLabel);
  407. btns.appendChild(sfwCheck);
  408. btns.appendChild(sfwCheckLabel);
  409. btns.appendChild(modeSelect);
  410. btns.appendChild(submit);
  411. btns.appendChild(homepage);
  412. overMask.className="over-mask";
  413. imgCon.appendChild(overMask);
  414. referrerMeta.name="referrer";
  415. referrerMeta.content="never";
  416. document.head.appendChild(referrerMeta);
  417. viewportMeta.name="viewport";
  418. viewportMeta.content="width=device-width, initial-scale=1";
  419. document.head.appendChild(viewportMeta);
  420.  
  421. curConfig.run();
  422. if(curConfig.initSearch)curConfig.initSearch();
  423.  
  424. function sleep(fn,param,time) {
  425. return new Promise((resolve) => {
  426. setTimeout(() => resolve(fn(param)), time)
  427. })
  428. }
  429. async function processByTime(num,fn,limit,time) {
  430. while(num>0){
  431. var loadNum=limit;
  432. if(num<limit)loadNum=num;
  433. num-=loadNum;
  434. await sleep(fn,loadNum,time);
  435. }
  436. }
  437.  
  438. overMask.onclick=e=>{
  439. if(hasFloatImg){
  440. restoreImg(hasFloatImg);
  441. }
  442. };
  443.  
  444. function mousedownHandler(e){
  445. let img=e.target;
  446. img.addEventListener("mouseup",mouseupHandler);
  447. img.addEventListener("mousemove",mousemoveHandler);
  448. img.style.cursor="grabbing";
  449. oClient={
  450. x:window.scrollX+e.clientX,
  451. y:window.scrollY+e.clientY,
  452. };
  453. e.stopPropagation();
  454. e.preventDefault();
  455. e.returnValue=false;
  456. }
  457. function mousemoveHandler(e){
  458. let img=e.target;
  459. grabed=true;
  460. window.scrollTo(oClient.x-e.clientX, oClient.y-e.clientY);
  461. }
  462. function mouseupHandler(e){
  463. let img=e.target;
  464. img.removeEventListener("mouseup",mouseupHandler);
  465. img.removeEventListener("mousemove",mousemoveHandler);
  466. img.style.cursor="grab";
  467. }
  468. function grabHandler(img,add){
  469. if(add){
  470. img.addEventListener("mousedown",mousedownHandler);
  471. }else{
  472. img.removeEventListener("mousedown",mousedownHandler);
  473. }
  474. }
  475.  
  476. function restoreImg(img){
  477. hasFloatImg=false;
  478. img.style.zIndex=0;
  479. img.style.bottom="";
  480. img.style.width="100%";
  481. img.style.position="";
  482. img.style.margin="";
  483. document.body.style.overflow="";
  484. imgCon.style.maxHeight="";
  485. imgCon.style.maxWidth="";
  486. overMask.style.display="none";
  487. overMask.style.opacity=0;
  488. img.className="list-show";
  489. grabHandler(img,false);
  490. img.style.cursor="";
  491. img.scrollIntoView();
  492. }
  493.  
  494. function createImg(url){
  495. let img=document.createElement("img");
  496. img.onerror=e=>{
  497. img.style.display="none";
  498. };
  499. img.src=url;
  500. img.className="list-show";
  501. img.style.width="100%";
  502. img.onclick=()=>{
  503. if(grabed){
  504. grabed=false;
  505. return;
  506. }
  507. window.scrollTo(0,0);
  508. if(img.style.zIndex==2){
  509. restoreImg(img);
  510. }else if(img.style.zIndex==1){
  511. img.style.bottom="";
  512. img.style.width="";
  513. img.style.maxWidth="";
  514. img.style.maxHeight="";
  515. img.style.zIndex=2;
  516. img.style.cursor="grab";
  517. grabHandler(img,true);
  518. document.body.style.overflow="";
  519. imgCon.style.maxWidth="100vw";
  520. imgCon.style.maxHeight="100vh";
  521. }else{
  522. if(hasFloatImg)return;
  523. hasFloatImg=img;
  524. document.body.style.overflow="hidden";
  525. img.style.bottom=0;
  526. if(img.naturalWidth>document.documentElement.clientWidth || img.naturalHeight>document.documentElement.clientHeight){
  527. img.style.zIndex=1;
  528. img.style.maxWidth="99%";
  529. img.style.maxHeight="99%";
  530. }else{
  531. img.style.zIndex=2;
  532. img.style.maxWidth="";
  533. img.style.maxHeight="";
  534. }
  535. img.style.width="";
  536. img.style.position="absolute";
  537. img.style.margin="auto";
  538. overMask.style.display="block";
  539. img.className="";
  540. setTimeout(()=>{
  541. overMask.style.opacity=1;
  542. }, 0);
  543. }
  544. };
  545. imgCon.appendChild(img);
  546. return img;
  547. }
  548.  
  549. function getSearchParam(name){
  550. let reg = new RegExp("(&|^)" + name + "=([^&]*)(&|$)", "i");
  551. let r = window.location.search.substr(1).match(reg);
  552. if (r != null) {
  553. return decodeURIComponent(r[2]);
  554. };
  555. return "";
  556. }
  557.  
  558. function submitParam(){
  559. var num=numInput.value,mode;
  560. if(modeSelect.options.length>0){
  561. mode=modeSelect.options[modeSelect.selectedIndex].value;
  562. }
  563. var r18=2;
  564. if(sfwCheck.checked && !r18Check.checked){
  565. r18=0;
  566. }else if(!sfwCheck.checked && r18Check.checked){
  567. r18=1;
  568. }
  569. if(numInput.value != ""){
  570. location.href=curConfig.getSearch({"r18":r18, "num":num, "mode":mode});
  571. }else{
  572. location.reload();
  573. }
  574. }
  575.  
  576. function customSet(){
  577. if(window.confirm("Parse current api?")){
  578. GM_setValue("RSPrules_"+document.domain+location.pathname, true);
  579. location.reload();
  580. }
  581. }
  582.  
  583. GM_addStyle(`
  584. @media screen and (min-width: 1024px) {
  585. .img-con{
  586. column-count: 5;
  587. -moz-column-count: 5;
  588. -webkit-column-count: 5;
  589. }
  590. .img-con>img{
  591. min-height: 250px;
  592. }
  593. }
  594. @media screen and (max-width: 1024px) {
  595. .img-con{
  596. column-count: 2;
  597. -moz-column-count: 2;
  598. -webkit-column-count: 2;
  599. }
  600. .img-con>img{
  601. min-height: 50px;
  602. }
  603. }
  604. body{
  605. background: black;
  606. }
  607. .btns>select{
  608. display: none;
  609. height: 29px;
  610. border-radius: 3px 0 0 3px;
  611. -moz-border-radius: 3px 0 0 3px;
  612. -webkit-border-radius: 3px 0 0 3px;
  613. -ms-border-radius: 3px 0 0 3px;
  614. -o-border-radius: 3px 0 0 3px;
  615. border: none;
  616. color: #cacaca;
  617. background-color: #363636;
  618. font-size: 14px;
  619. outline: 0;
  620. padding: 2px 5px;
  621. vertical-align: top;
  622. }
  623. .over-mask{
  624. display: none;
  625. opacity: 0;
  626. width: 100%;
  627. height: 100%;
  628. background-color: #000000e6;
  629. position: fixed;
  630. z-index: 1;
  631. top: 0;
  632. left: 0;
  633. transition: opacity .3s ease-in-out;
  634. -moz-transition: opacity .3s ease-in-out;
  635. -o-transition: opacity .3s ease-in-out;
  636. -webkit-transition: opacity .3s ease-in-out;
  637. }
  638. .list-show:hover,.list-show.hover{
  639. opacity: 1;
  640. }
  641. .list-show{
  642. opacity: 0.6;
  643. transition: opacity .3s ease-in-out;
  644. -moz-transition: opacity .3s ease-in-out;
  645. -webkit-transition: opacity .3s ease-in-out;
  646. }
  647. .img-con{
  648. overflow-x: hidden;
  649. overflow: auto;
  650. width: 100%;
  651. min-height: calc(100vh - 70px);
  652. display: block;
  653. }
  654. .img-con>img{
  655. -webkit-column-break-inside: avoid;
  656. break-inside: avoid;
  657. float: left;
  658. margin-bottom: 15px;
  659. margin-right: 15px;
  660. overflow: hidden;
  661. position: relative;
  662. top: 0;
  663. left: 0;
  664. right: 0;
  665. background: url(data:image/png;base64,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) no-repeat center center;
  666. }
  667. .btns{
  668. padding: 10px 0;
  669. text-align: center;
  670. line-height: 30px;
  671. position: fixed;
  672. z-index: 1;
  673. width: 100%;
  674. top: 0;
  675. left: 0;
  676. background: #000000de;
  677. -webkit-transition:transform .5s ease-out;
  678. -o-transition:transform .5s ease-out;
  679. transition:transform .5s ease-out;
  680. }
  681. .btns.hide{
  682. -webkit-transform:translateY(-100px);
  683. -ms-transform:translateY(-100px);
  684. -o-transform:translateY(-100px);
  685. transform:translateY(-100px);
  686. }
  687. .btns>a{
  688. padding: 5px;
  689. background: #f8981e;
  690. color: black;
  691. border-radius: 5px;
  692. font-weight: bold;
  693. text-decoration: none;
  694. margin: 1px;
  695. }
  696. .btns>a:hover{
  697. background: #ffa31a;
  698. }
  699. .btns>label{
  700. background: #f8981e;
  701. color: black;
  702. border-radius: 5px;
  703. font-weight: bold;
  704. text-decoration: none;
  705. padding: 3px;
  706. }
  707. .btns>input[type=checkbox]{
  708. width:20px;
  709. height:20px;
  710. vertical-align: top;
  711. }
  712. .btns>input[type=number]{
  713. width: 48px;
  714. height: 25px;
  715. border-radius: 3px 0 0 3px;
  716. -moz-border-radius: 3px 0 0 3px;
  717. -webkit-border-radius: 3px 0 0 3px;
  718. -ms-border-radius: 3px 0 0 3px;
  719. -o-border-radius: 3px 0 0 3px;
  720. border: none;
  721. color: #cacaca;
  722. background-color: #363636;
  723. display: inline-block;
  724. font-size: 14px;
  725. outline: 0;
  726. padding: 2px 5px;
  727. vertical-align: top;
  728. margin: 0 5px;
  729. }
  730. .btns>button:hover{
  731. transform: scale3d(1.1, 1.1, 1.1);
  732. }
  733. .btns>button{
  734. cursor: pointer;
  735. background: #0075ff;
  736. color: white;
  737. border-radius: 5px;
  738. font-weight: bold;
  739. text-decoration: none;
  740. padding: 8px 5px 5px 5px;
  741. margin: 0px 10px 0 10px;
  742. border: 0;
  743. transition: transform .3s ease 0s;
  744. transform: scale3d(1, 1, 1);
  745. }`);
  746.  
  747. btns.className="btns";
  748. document.body.appendChild(btns);
  749. homepage.innerHTML="Homepage";
  750. homepage.href="https://sleazyfork.org/en/users/8227-hoothin";
  751. homepage.target="_blank";
  752. numInput.type="number";
  753. numInput.title=numInput.placeholder="Num of sexy pictures";
  754. r18Check.type="checkbox";
  755. r18Check.id="r18Check";
  756. r18CheckLabel.innerHTML="R18 ";
  757. r18CheckLabel.htmlFor="r18Check";
  758. sfwCheck.type="checkbox";
  759. sfwCheck.id="sfwCheck";
  760. sfwCheckLabel.innerHTML="SFW ";
  761. sfwCheckLabel.htmlFor="sfwCheck";
  762. submit.innerHTML="Refresh";
  763. submit.onclick=submitParam;
  764. document.onkeyup = function(e) {
  765. var event = e || window.event;
  766. var key = event.which || event.keyCode || event.charCode;
  767. if (key == 13) {
  768. submitParam();
  769. }
  770. };
  771.  
  772. imgCon.className="img-con";
  773. document.body.appendChild(imgCon);
  774. imgCon.style.paddingTop=parseInt(window.getComputedStyle(btns).height.replace("px",""))+20+"px";
  775. document.body.addEventListener("touchstart",e=>{
  776. var lastHover=document.querySelector(".list-show.hover");
  777. if(lastHover)lastHover.classList.remove("hover");
  778. if(e.target.className=="list-show"){
  779. e.target.classList.add("hover");
  780. }
  781. });
  782.  
  783. var newPos,lastPos=0;
  784. window.addEventListener('scroll', function(e) {
  785. newPos=window.scrollY;
  786. if (newPos > lastPos) {
  787. btns.classList.add("hide");
  788. } else {
  789. btns.classList.remove("hide");
  790. }
  791. lastPos=newPos;
  792. });
  793. })();