您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Userscript for Motherless.com . Provide direct links for pictures and video files.
当前为
// ==UserScript== // @name FapFun // @namespace https://greasyfork.org/scripts/7156-fapfun/code/FapFun.user.js // @description Userscript for Motherless.com . Provide direct links for pictures and video files. // @require https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js // @include htt*://motherless.com* // @version 2 // @grant GM_xmlhttpRequest // @grand UnsafeWindow // @author sodomgomora // ==/UserScript== // Some of this script based on Pornifier2 script by Jesscold // This script is realesed under GPL v3 // Globals var debug = false; var sp = new singlePreview(); var images = []; // Start the magic main(); function fapLog(log){ if(debug === true){ console.log(log); } } function main(){ fapLog("entered main"); // try to become Premium // setTimeout(function(){ // unsafeWindow.__is_premium = true; //really motherless? // }, 500); // create Buttons var inputList=document.createElement("input"); inputList.type="button"; inputList.value="Images URLs"; inputList.onclick = getImageList; inputList.setAttribute("style","font-size:18px;position:fixed;top:100px;right:40px;z-index:10000;"); document.body.appendChild(inputList); var inputVideo=document.createElement("input"); inputVideo.type="button"; inputVideo.value="Video URLs"; inputVideo.onclick = getVideoUrl; inputVideo.setAttribute("style","font-size:18px;position:fixed;top:140px;right:40px;z-index:10000;"); document.body.appendChild(inputVideo); sp.addSinglePreview(); // fapLog("Premium: " + unsafeWindow.__is_premium.toSource()); } function getImageList(){ fapLog("getImageList: pressed"); sp.getImages(); } function getVideoUrl(){ alert("not jet implemented!"); } //-- handler for Overlay (jquery) $(function () { $("body").click(function () { if ($("#overlay").length > 0) { removeOverlay(); } }); }); function removeOverlay() { $("#overlay").remove(); } // Get url for full image and add url under thumbnail function singlePreview(){ this.addSinglePreview = function(){ var data = []; var i = 0; var imgs = $('img[src^="http://thumbs.motherlessmedia.com/thumbs/"]'); fapLog("image urls found: " + imgs.length); imgs.each(function(){ var $wrap = $(this); if($wrap.data('p2-preview')){ return; } $wrap.data('p2-preview', 'yep'); var $a = $wrap.closest("a"); var vid = $wrap.attr("src").match("thumbs/([^.]+).\\w"); // test for video preview and not an image var vlink = vid[1]; var n = vlink.indexOf("-"); vlink = vlink.substring(n,vlink.length); fapLog("vlink: " + vlink); // is a video if(vlink == "-small"){ var videoClicky = $("<a href='javascript;' class='p2-single-preview'>Video URL</a>"); $a.after(videoClicky); var href = $a.attr('href').match(/\.com\/(\w)(\w+)/) ? [RegExp.$1, RegExp.$2] : false; videoClicky.click(function(e, single){ var $this = $currentSingle = $(this); $this.text("loading..."); var id = $wrap.attr("data-strip-src").match("thumbs/([^.]+).\\w"); var vl = id[1]; var n = vl.indexOf("-"); id[1] = vl.substring(0,n); fapLog("found url for video: " + id[1]); if(!id){ $this.text("cant load :P"); return; } var timer = setTimeout(function(){ $this.text("cant load :P"); }, 8000); sp.findVideoSrc(id[1], function(src){ $this.text("Show Video"); clearTimeout(timer); if(single){ data = [src]; } else { data.unshift(src); } fapLog("video src: " + src.toSource()); displayOverlay(data, "video"); }); return false; }); } else{ var id = $wrap.attr("data-strip-src").match("thumbs/([^.]+).\\w"); images[i] = id[1]; i++; fapLog("fill images: image=" + images[i-1] + " index=" + i); var imageClicky = $("<a href='javascript;' class='p2-single-preview'>View full size</a>"); $a.after(imageClicky); var href = $a.attr('href').match(/\.com\/(\w)(\w+)/) ? [RegExp.$1, RegExp.$2] : false; imageClicky.click(function(e, single){ var $this = $currentSingle = $(this); $this.text("loading..."); //var id = $wrap.attr("data-strip-src").match("thumbs/([^.]+).\\w"); fapLog("found url for image: " + id[1]); if(!id){ $this.text("cant load :P"); return; } var timer = setTimeout(function(){ $this.text("cant load :P"); }, 8000); sp.findImgSrc(id[1], function(src){ $this.text("View full size"); clearTimeout(timer); if(single){ data = [src]; } else { data.unshift(src); } fapLog("image src: " + src.toSource()); displayOverlay(data, "image"); }); return false; }); } }); }; this.getImages = function() { fapLog("getImages: images.length=" + images.length); imagesUrl = []; if(images.length > 0){ parralelizeTask(images, loopFindImageSource, function(){ fapLog("getImages: iamgesUrl= " + imagesUrl.toSource()); displayOverlay(imagesUrl, "images"); }); } }; this.findVideoSrc = function(id, cb) { var href = "http://motherless.com/"+id; sneakyXHR(href, function(d){ fapLog("sneaky request all: " + d.toSource()); var url = d.match(/"http:([^"]+).mp4"/mi) ? RegExp.$1 : null; if(url){ cb({url:"http:" + url + ".mp4"}); } }, "get", { 'Range': 'bytes=0-3000' //grab first 3k }); }; this.findImgSrc = function(id, cb){ var href = "http://motherless.com/"+id+"?full"; sneakyXHR(href, function(d){ var img = d.match(/property="og:image" content="([^"]+)"/mi) ? RegExp.$1 : null; if(img){ cb({url:img}); } }, "get", { 'Range': 'bytes=0-3000' //grab first 3k }); }; } // show the full image as overlay and shrink it to screen resolution function displayOverlay(data, type) { var mywidht = window.screen.width - 50; var myheight = window.screen.height - 120; var html = ""; fapLog("monitor resolution: " + mywidht + ":" + myheight); if (type=="image"){ html="<table id='overlay'><tbody><tr><td><img src='" + data[0].url + "' style='width:auto; hight:100%; max-height:" + myheight +"px; max-width:" + mywidht + "px'></td></tr></tbody></table>"; } if (type=="video"){ html="<a id='overlay' href='" + data[0].url + "'>Video Link</a>"; } if (type=="images"){ html = "<table id='overlay'><tbody><tr><td>"; data.forEach(function(value){ html += value + "<br>"; }); html += "</td></tr></tbody></table>"; } if (type=="videos"){ } $(html).css({ "position": "fixed", "top": 0, "left": 0, "width": "90%", "height": "900px", "background-color": "rgba(0,0,0,.5)", "z-index": 10000, "vertical-align": "middle", "text-align": "center", "color": "#fff", "font-size": "30px", "font-weight": "bold", "overflow": "hidden", "cursor": "auto" }).appendTo("body"); } function sneakyXHR(url, cb, method, headers) { method = method || "GET"; fapLog("sneaky requesting: " + url); setTimeout(function() { GM_xmlhttpRequest({ method: method, 'url': url, headers: $.extend({}, { 'User-agent': 'Mozilla/4.0', 'Accept': 'application/atom+xml,application/xml,text/xml', 'Cookie': document.cookie }, headers || {}), onload: function(responseDetails) { var text = responseDetails.responseText; cb(text, responseDetails); } }); }, 1); } //function to parallelize the findImageSource function function loopFindImageSource(doneTask, value) { sp.findImgSrc(value, function(src){ data = [src]; imagesUrl.push(data[0].url); doneTask(); }); } //helper function for parralelize functions function parralelizeTask(arr, fn, done) { fapLog("parralelizeTask: arr= " + arr); var total = arr.length; fapLog("parralelizeTask: arr.lenght= " + total) doneTask = function(){ if (--total === 0){ done(); } }; arr.forEach(function(value){ fn(doneTask, value); }); }