Batoto Direct Links

Adds Direct Links to the online reader

// ==UserScript==
// @name           Batoto Direct Links
// @namespace      https://github.com/ToostInc/userscripts
// @description    Adds Direct Links to the online reader
// @include        http://www.batoto.net/read/_/*
// @include        http://www.bato.to/read/_/*
// @include        https://bato.to/read/_/*
// @author         Joost Bremmer < toost dot b at gmail dot com >
// @copyright      2014, Joost Bremmer
// @license        MIT
// @version        2.1.3.1
// @date           17-07-2015
// @require        http://code.jquery.com/jquery-latest.min.js
// @grant          GM_addStyle
// @grant          GM_xmlhttpRequest
// ==/UserScript==


// The MIT License
//
// Copyright (c) 2014 Joost Bremmer
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and
// to permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//

$(document).ready (function () {




	//Add various tabs
	var dlinks       = "<div id='dlinks' class='rounded dlinks'>\n" +
	                     "\t<h3>Direct Links:</h3>\n" +
					     "\t<br />\n" +
					   "</div>";
	var dlinksanchor = "<li style='display: inline-block; margin-right: 20px;'>\n" +
	                     "\t<button type='button' id='dlinksanchor'>" +
					          "Direct Links" +
					       "</button>\n" +
					   "</li>";


	//insert tabs
	$("#read_settings").before(dlinks);
	$("div.moderation_bar li:last-child").before(dlinksanchor);

	//style tabs

	GM_addStyle(".dlinks {" +
							  "background-color: #FFFFFF;" +
							  "padding-top: 10px;" +
							  "padding-bottom: 05px;" +
							  "display: none;" +
							  "text-align: center;" +
							  "border-top: 1px solid #CDCDCD;" +
							  "border-top-right-radius:0px;"+
							  "border-top-left-radius: 0px;" +
							  "border-bottom: 1px solid #CDCDCD;"+
							  "z-index: 999; position: absolute;" +
							  "width: 100%;"+
							  "left: 0px;"+
							"}"
						 );
	$("#comic_wrap").css("z-index","499")




	//get image source
	var imgsrc = $("img#comic_page").attr("src");

	//get total amount of pages
	var pages  = $("select#page_select option:last").html();
	var pages = pages.replace(/page./g, '');


	//insert links into Direct Links div.
	var dlmesg = '<p>\n' +
	                '\tUse "Right-click > Save As" dialogue,' +
				      'or a download manager like ' +
			          '<a href="http://www.downthemall.net/" id="dta">' +
					    'DownThemAll'+
					  '</a> ' +
			          'to save the images.\n' +
				  '<br /><br />' +
	              '</p>\n' +
				  '<a href="#" id="dlloading">' +
					'\tLoading...'+
					'\t<br />\n' +
				  '</a>';

	$("#dlinks").append(dlmesg);

	//event handler click on 'Direct Links' button.
	$("#dlinksanchor").click( function() {

		$("#dlinks").slideToggle("slow");

	});

	$("#page_select:first > option").each(function() {
	var nextpage = $(this).attr("value");
		//console.log(nextpage);

	GM_xmlhttpRequest({
	method: "GET",
	url: nextpage,
	onload: function(response) {
			//console.log(response.responseText);

			if ( response.responseText.indexOf('id="comic_page"') > 0 ) {
				var raw = response.responseText;
				var content = /<img.*comic_page.*>/.exec(raw)
				//console.log(content);
				var imglink = /"http.*(png|jpg)"/.exec(content);
				//console.log(imglink[0]);


				var pagenum = /\d*\.(png|jpg)/.exec(imglink[0]);
				//console.log(pagenum[0]);
				var newpageanchor= '<a href=' + imglink[0] + 'id="page' +
														/\d*/.exec(pagenum[0]) + '">' +
										"\n\tPage " + parseInt(/\d*/.exec(pagenum[0])) + "<br />" +
								   '</a>';

			}

			else {
				imglink[0] = "image not found!";
				var newpageanchor='<a href="#" class="404">Uh-oh.something went wrong</a>' +
								  '<br />';
			}

			$("#dlinks").append(newpageanchor);

			//sort links
			$('#dlinks a[id^="page"]').sort(function (a, b) {
			var re = /[^\d]/g;
			return ~~a.id.replace(re, '') > ~~b.id.replace(re, '');
			})
			.appendTo("#dlinks");


		 }
		});

		if ( $(this).is(":last-child") ) {
				$("#dlloading").remove();
		}


	});


});