// ==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)
}