您需要先安装一个扩展,例如 篡改猴、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 1 // @grant GM_xmlhttpRequest // @grand UnsafeWindow // ==/UserScript== // Some of this script based on Pornifier2 script by Jesscold // This script is realesed under GPL v3 // Globals var debug = false; // 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="Image list"; 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 url"; inputVideo.onclick = getVideoUrl; inputVideo.setAttribute("style","font-size:18px;position:fixed;top:140px;right:40px;z-index:10000;"); document.body.appendChild(inputVideo); var sp = new singlePreview(); sp.addSinglePreview(); fapLog("Premium: " + unsafeWindow.__is_premium.toSource()); } function getImageList() { alert("Hello World"); } function getVideoUrl(){ alert("warum nicht"); } //-- 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 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); if(vlink == "-small"){ var videoClicky = $("<a href='javascript;' class='p2-single-preview'>Show Video</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); 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 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); 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; }); } }); }; var 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 }); }; var 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>"; } $(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); }