FapFun

Userscript for Motherless.com . Provide direct links for pictures and video files.

As of 2014-12-24. See the latest version.

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