Norfag / ZooCab Download

// ==UserScript==
// @name     ZooCab Download
// @version  1.3
// @grant    none
// @run-at   document-idle
// @include  https://video.zoo.cab/video/*/*
// @include  https://animalporn.rocks/video/*/*
// @include  https://www.yiffyfur.tube/video/*
// @license  MIT
// ==/UserScript==

(function () {
	// add download buttons
	const wrapper = document.getElementById("wrapper"),
	wrapperChilds = wrapper.children.length,
	notPrivate = document.getElementsByClassName("text-danger")[0].style.display == "none",
	database_url = document.getElementsByTagName("video")[0].currentSrc,
	file_servers = {
		"animalporn.rocks": "https://cdn.sloppy.pink",
		"www.yiffyfur.tube": "https://www.yiffyfur.tube"
	},
	file_server = file_servers[location.hostname];
	let download_html = "", video_url = "";

	// fetch and manipulate
	const data = wrapper.children[wrapperChilds == 9 ? 3 : 2].innerHTML,
	video_id = data.match(/vid[= "]+(\d+)/m)[1],
	video_title = document.getElementsByTagName("h3")[0].innerHTML,
	webseed = data.match(/h264Base = '([\/\w]+)/m),
	iphoneVideo = /iphoneVideo = (true)/.test(data);
	let files = data.match(/(\[\{[\\\"\w\:\,\.\}\]\{]+)/);
	if (files) {
		files = JSON.parse(files[0].replace("\\",""));
		for (const file of files) {
			download_html += `<div class='pull-right m-l-5'><a target='_blank' href='${database_url ? new URL(database_url).origin : file_server}${webseed ? webseed[1] : ""}${file.file}' class='btn btn-default'><i class='glyphicon glyphicon-download-alt'></i> <span class='hidden-xs'>${file.label}</span></a></div>`;
		}
		video_url = `${database_url ? new URL(database_url).origin : file_server}${webseed}${files[files.length-1].file}`;
	}
	else {
		download_html = `<div class='pull-right m-l-5'><a target='_blank' href='${file_server}/media/videos/iphone/${video_id}.mp4' class='btn btn-default'><i class='glyphicon glyphicon-download-alt'></i><span class='hidden-xs'>SD</span></a></div><div class='pull-right m-l-5'><a target='_blank' href='${file_server}/media/videos/hd/${video_id}.mp4' class='btn btn-default'><i class='glyphicon glyphicon-download-alt'></i> <span class='hidden-xs'>HD</span></a></div>`;
		video_url = `https://${file_server}/media/videos/hd/${video_id}.mp4`;
	}
	console.info("Download Info:", {video_title, video_id, files});

	// insert elements
	if (notPrivate) {
		const controls = document.getElementById("share_video").parentNode;
		if (controls) {
			const downloadMenu = document.createElement("div");
			downloadMenu.style.width = "100%";
			downloadMenu.className = "pull-right m-t-15";
			downloadMenu.innerHTML = download_html;
			controls.parentNode.insertBefore(downloadMenu, controls.nextSibling);
		}
		else {
			console.error("Can't find controls?");
		}
	}
	else {
		wrapper.getElementsByClassName("container")[0].innerHTML = `<div class='row'><div class='col-md-8'><h3 class='hidden-xs big-title-truncate m-t-0'>${video_title}</h3></div></div><div class='row'><div class='col-md-8'><div class='video-container'><div class='video-js vjs-16-9'><video class='vjs-tech' poster='https://video.zoo.cab/media/videos/tmb/${video_id}/default.jpg' tabindex='-1' controls src='${video_url}'></video></div></div><div class='pull-right m-t-15' style='width: 100%;'>${download_html}</div></div></div>`;
	}
})();