Sleazy Fork is available in English.

Sadpanda Save/Export All Favorites

Load all favorites to the page and save it or just copy the textbox contents. Works on exhentai and e-hentai.

20.03.2019 itibariyledir. En son verisyonu görün.

// ==UserScript==
// @name        Sadpanda Save/Export All Favorites
// @namespace   SaddestPanda
// @description Load all favorites to the page and save it or just copy the textbox contents. Works on exhentai and e-hentai.
// @include     /^https?://e.hentai\.org/favorites.php.*/
// @homepage    https://greasyfork.org/en/scripts/23406-sadpanda-save-export-all-favorites
// @supportURL  https://greasyfork.org/en/scripts/23406-sadpanda-save-export-all-favorites/feedback
// @version     2.2.1
// @grant       GM.getValue
// @grant       GM.setValue
// @grant       GM.deleteValue
// @grant       GM_addValueChangeListener
// @grant       GM.addValueChangeListener
// @require     https://greasyfork.org/scripts/371339-gm-webextpref/code/GM_webextPref.js?version=623327
// @require     https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js
// @require     https://cdnjs.cloudflare.com/ajax/libs/he/1.2.0/he.min.js
// ==/UserScript==

//Top text box inspiration and its code from http://userscripts-mirror.org/scripts/show/173553. But this one won't have an import feature like that one.
//Using Jquery for jquery purposes and he.js for he.js purposes.
//Using GM_webextPref for the preferences menu. Many thanks to the author "eight" for the library. Greasyfork libraries use a specific version so they should be from malicious updates.

//Use the options menu to change these values.
var inserttoTable = true; //Disables inserting new pages to the table. Set this to false if your browser gets real slow. You can still use the textbox to save your favorites.
var pageTimer = 2500; //Waiting timer for each page in miliseconds. Default is 2500. Making it too short might prevent pages from loading.

const pref = GM_webextPref({
	default: {
		inserttoTable: true,
		pageTimer: 2500
	},
	body: [
		{
			key: "inserttoTable",
			type: "checkbox",
			label: "Insert new pages into the current page. Disable this if your browser freezes."
		},
		{
			key: "pageTimer",
			type: "number",
			label: "Time (ms) to load each page. Try to keep this higher than 2000 or the pages/thumbnails might not load."
		}
	]
});
/*
pref.ready()
  .then(() => {
    console.log(pref.get("inserttoTable")); // true
    console.log(pref.get("pageTimer")); // true
  });
*/
var counter = 0, showExport = 0, pageNumber = "", winlocsea = "?";
var displayMode = $("#dms select")[0].value; // m:minimal, l:compact, e:extended, t:thumbnail
if (window.location.search == "") {
	winlocsea = "?";
} else {
	winlocsea = window.location.search;
}
var PageUrl = "favorites.php" + winlocsea + "&page=";

function destroyBox() {
	$('.uselessbr').each(function() {$(this).remove();});
	$('#exportFav').remove();
	$('#exportStatus').remove();
}

function getPageNumber() {
	var finalcell = $(".ptt")[0].rows[0].cells[$(".ptt")[0].rows[0].cells.length-2];
	pageNumber = finalcell.textContent;
}

function addRemoveButton() {
	$('#exportFav').after("<div>");
	$('#exportFav').next().append($('<input/>').attr('type','button').attr('value','Remove titles from the list').attr('id','removeTitles').attr('style','margin-top:5px;min-height:18px;'));
	$('#removeTitles').click(removeTitles);
}

function removeTitles() {
	$('#exportFav')[0].textContent = $('#exportFav')[0].textContent.replace(/( - .*)/g,"");
}

function getText(thisa) {
	var thetext = "";
	thetext = he.encode(thisa.href + " - " + thisa.text);
	$('#exportFav').append(thetext + '\n');
}

function getThisPage() {
	var trlen, thislink, j=0;
	trlen = $(".itg .glname").length;
	for (j=0; j<trlen; j++) {
		thislink = $(".itg .glname a")[j];
		getText(thislink);
	}
}

function exportFavorites() {
	if (showExport === 0) {
		showExport = 1;
		$('#nb').after('<br class="uselessbr"/>');
		$('#nb').after($('<input/>').attr('type','button').attr('value','START').attr('id','startBut').attr('href','javascript:void(0)').attr('style','margin-left:5px;margin-top:5px;min-height:18px;'));
		$('#startBut').click(getThePages);
		$('#nb').after($('<input/>').attr('type','button').attr('value','Options').attr('id','optionsBut').attr('href','javascript:void(0)').attr('style','margin-top:5px;min-height:18px;'));
		$('#optionsBut').click(pref.openDialog);
		$('#nb').after('<br class="uselessbr"/>');
		$('#nb').after('<textarea id="exportStatus" name="Text2" cols="80" rows="8" ... />');
		$('#nb').after('<h2 class="uselessbr">Status');
		$('#nb').after('<textarea id="exportFav" name="Text1" cols="80" rows="7" ... />');
		$('#nb').after('<h2 class="uselessbr">Text List of Favorites');
		$('#nb').after('<br class="uselessbr"/><br class="uselessbr"/>');
		$('#exportStatus').append("Chrome and some other browsers throttle background tabs so if you switch to another tab it might prevent you from loading all the pages." + '\n');
		$('#exportStatus').append("To bypass that; turn this tab into its own window before you start and don't minimize it." + '\n');
		if (pageNumber > 10) {
			$('#exportStatus').append("You more than 10 pages. If your browser crashes disable inserting to the page from the options." + '\n\n');
		}
		$('#exportStatus').append("Press START below to start loading the pages." + '\n');
	} else {
		//destroyBox();
		//showExport = 0;
		return;
	}

	if (window.location.search.indexOf("page=") != -1) {
		$('#exportFav').append("GO TO THE FIRST PAGE AND TRY AGAIN" + '\n');
		$('#exportStatus').append("GO TO THE FIRST PAGE AND TRY AGAIN" + '\n');
		return;
	}
}

function getThePages() {
	inserttoTable = pref.get("inserttoTable");
	pageTimer = pref.get("pageTimer");
	getThisPage();
	if (pageNumber > 1) {
		$('#exportStatus').append("Loading all pages will take " + (Math.ceil(pageTimer/100)*(pageNumber-1))/10 + " seconds." + '\n');
		//$('#exportStatus').append("NOTICE - If your browser completely freezes, try using the newest Firefox/Chrome with tampermonkey/violentmonkey or help me fix it." + '\n');
		for (var ii = 1; ii < pageNumber; ii++) {
			//console.log("Queued page: " + ii);
			setTimeout(function () {
				counter++;
				//console.log("Current page: " + counter);
				$('#exportStatus').append("Loading Page " + (counter+1) + " of " + pageNumber + "..." + '\n');
				if ((counter+1) == pageNumber) {
					setTimeout(function () {
						$('#exportStatus').append("Loading complete." + '\n' + "Copy above list, Ctrl+S to save the page or use an extension like SingleFile or Save Page WE." + '\n');
						addRemoveButton();
						$('#exportStatus').append("Confirmation: " + ($('#exportFav')[0].value.split("\n").length-1) + " favorites in above text area, " + ($(".itg .glname a").length) + " favorites in below page." + '\n');
						if (pageNumber > 10) {
							$('#exportStatus').append("If your gallery count doesn't add up, try again. You can load the pages faster now that you cached all the thumbnails." + '\n\n');
						}
						$('#exportStatus').scrollTop($('#exportStatus')[0].scrollHeight);
					}, pageTimer*2 + 2000);
				}
				$('#exportStatus').scrollTop($('#exportStatus')[0].scrollHeight);
				$.get(PageUrl + counter, function(sss) {
					var trlen, thislink, j=0;
					trlen = $(sss).find(".itg .glname").length;
					for (j=0; j<trlen; j++) {
						thislink = $(sss).find(".itg .glname a")[j];
						getText(thislink);
						if (inserttoTable) {
							if (displayMode != "t") {
								$(".itg tbody")[0].append($(thislink).parents("tr:first")[0]);
							} else {
								$(".itg")[0].append($(thislink).parents(".gl1t")[0]);
							}
						}
					}
				});
			}, 200 + ii*pageTimer);
		}
	} else {
		$('#exportStatus').append("Loading complete." + '\n' + "Copy above list, Ctrl+S to save the page or use an extension like SingleFile or Save Page WE." + '\n');
		$('#exportStatus').append("Confirmation: " + ($('#exportFav')[0].value.split("\n").length-1) + " favorites in above text area, " + ($(".itg .glname a").length) + " favorites in below page." + '\n');
		addRemoveButton();
	}
}

$(document).ready(function() {
	var topmenu = document.querySelector("#nb");
	topmenu.style.justifyContent = "center";
	topmenu.style.maxWidth = "1400px";
	$('#nb').append($('<div/>').attr('id','exportFavsdiv'));
	$('#exportFavsdiv').append($('<a/>').attr('href','javascript:void(0)').attr('id','exportFavorites').text('Load All Favorites'));
	$('#exportFavorites').click(exportFavorites);
	document.querySelector("#exportFavsdiv").style.marginLeft = "8px";
	getPageNumber();
});