Sleazy Fork is available in English.

E-Hentai <-> ExHentai

Links between E-Hentai and ExHentai page, and also links user to ExHentai automatically if gallery is "removed"

Från och med 2017-02-19. Se den senaste versionen.

// ==UserScript==
// @name           E-Hentai <-> ExHentai
// @description    Links between E-Hentai and ExHentai page, and also links user to ExHentai automatically if gallery is "removed"
// @namespace      https://greasyfork.org/en/scripts/24342-e-hentai-exhentai
// @version        2.00
// @icon           https://e-hentai.org/favicon.ico
// @include        http*://e-hentai.org/*
// @include        https://upload.e-hentai.org/*
// @include        https://exhentai.org/*
// @require        https://code.jquery.com/jquery-3.1.1.min.js
// @author         Resuha
// @grant    GM_getValue
// @grant    GM_setValue
// ==/UserScript==

//Credit to developer of https://github.com/js-cookie/js-cookie

//Ver 2.00 added redirector and cookie remover
//Ver 1.41 minor bug in code
//Ver 1.40 made the script work with the new e-hentai URL
//Ver 1.31 removed the blinking linker, seems like it leads to crash

$(document).ready(function () {
    if (document.title == 'Gallery Not Available - E-Hentai Galleries')
    {
        document.location.href = 'https://exhentai.org' + parse_gallery_identifier();
    } else if(document.title == "exhentai.org (260×260)"){
        // Got sadpanda
        var bYes = '<button id="yesButton" class="askButton">Yes';
        var bNo = '<button id="noButton" class="askButton">No';
        var askConfirm = '<div id="confirmDiv">Are you currently logged in at e-hentai.org forum?<label id="message"><br>'+bYes+bNo+'</div>';
        $('body').append(askConfirm);
        askConfirm = $('#confirmDiv');
        askConfirm.css({
            'align':'center',
            'color':'blue',
        });

        $('#yesButton').click(function(){
            // Clear cookie and refresh
            $('#confirmDiv').text("This page will refresh. If you still see this page after the refresh, it is possible that your account is not old enough for exhentai");
            setTimeout(function() {
                // delete cookie
                Cookies.remove('yay', {domain:'.exhentai.org'});
                location.reload();
            }, 1000);
        });
        $('#noButton').click(function(){
            // Redirect to forum
            $('#confirmDiv').text("Redirecting to E-Hentai login page");
            setTimeout(function() {
                document.location.href = 'https://forums.e-hentai.org/index.php?act=Login&CODE=00';
            }, 1000);
        });

    } else {
        var link;
        var targetWebsite;
        if (document.location.href.indexOf('exhentai') != - 1) {
            link = 'https://e-hentai.org' + parse_gallery_identifier();
            targetWebsite = 'E-Hentai';
        } else {
            link = 'https://exhentai.org' + parse_gallery_identifier();
            targetWebsite = 'ExHentai';
        } // Determine if the current page is E-Hentai or ExHentai

        $('#nb').append('<img src="http://ehgt.org/g/mr.gif" alt="">');
        if (targetWebsite == 'ExHentai') {
            if(document.location.href == 'https://upload.e-hentai.org/manage.php'){
                $('#nb').append('<a id="linker" href="https://exhentai.org/upload/manage.php"> To ExHentai</a>');
                $('#linker a, #linker').css('color', '#0000FF'); //Give blue color to linker
            } else {
                $('#nb').append('<a id="linker" href="https://exhentai.org'+parse_gallery_identifier()+'"> To ExHentai</a>');
                $('#linker a, #linker').css('color', '#0000FF'); //Give blue color to linker
            }
        } else {
            if(document.location.href == 'https://exhentai.org/upload/manage.php'){
                $('#nb').append('<a id="linker" href="https://upload.e-hentai.org/manage.php"> To E-Hentai</a>');
                $('#linker a, #linker').css('color', '#FFFF00'); //Give yellow color to linker
            } else {
                $('#nb').append('<a id="linker" href="https://e-hentai.org'+parse_gallery_identifier()+'"> To E-Hentai</a>');
                $('#linker a, #linker').css('color', '#FFFF00'); //Give yellow color to linker
            }
        } // Add option to switch between E-Hentai and ExHentai in the top bar of the page
        if(window.location.href.indexOf("uconfig") > -1){
            var loadButton = '<button id="loadSetting"> Load saved user setting';
            var saveButton = '<button id="saveSetting"> Save current user setting';
            $('div.stuffbox').prepend('<div style="text-align: center;">'+loadButton+saveButton+'</div>');
            $('#loadSetting').click(function(){
                var setting = GM_getValue("userSetting");
                if (document.location.href.indexOf('exhentai') != - 1) {
                    Cookies.set("uconfig",setting,{domain:".exhentai.org", expires:365});
                } else {
                    Cookies.set("uconfig",setting,{domain:".e-hentai.org", expires:365});
                }
                location.reload();
            });
            $('#saveSetting').click(function(){
                GM_setValue("userSetting", Cookies.get("uconfig"));
                alert("User setting saved");
            });
        }
    }
});

// Parse the gallery link
function parse_gallery_identifier() {
    var identifier_start;
    if (location.href.indexOf('e-hentai.org') != - 1) {
        identifier_start = location.href.indexOf('e-hentai.org')+12;
    }
    else if (location.href.indexOf('exhentai.org') != - 1) {
        identifier_start = location.href.indexOf('exhentai.org')+12;
    }
    var identifier_end = location.href.length;
    var identifier = location.href.substr(identifier_start, identifier_end);
    return identifier;
}

/*!
 * JavaScript Cookie v2.1.3
 * https://github.com/js-cookie/js-cookie
 *
 * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
 * Released under the MIT license
 */
;(function (factory) {
	var registeredInModuleLoader = false;
	if (typeof define === 'function' && define.amd) {
		define(factory);
		registeredInModuleLoader = true;
	}
	if (typeof exports === 'object') {
		module.exports = factory();
		registeredInModuleLoader = true;
	}
	if (!registeredInModuleLoader) {
		var OldCookies = window.Cookies;
		var api = window.Cookies = factory();
		api.noConflict = function () {
			window.Cookies = OldCookies;
			return api;
		};
	}
}(function () {
	function extend () {
		var i = 0;
		var result = {};
		for (; i < arguments.length; i++) {
			var attributes = arguments[ i ];
			for (var key in attributes) {
				result[key] = attributes[key];
			}
		}
		return result;
	}

	function init (converter) {
		function api (key, value, attributes) {
			var result;
			if (typeof document === 'undefined') {
				return;
			}

			// Write

			if (arguments.length > 1) {
				attributes = extend({
					path: '/'
				}, api.defaults, attributes);

				if (typeof attributes.expires === 'number') {
					var expires = new Date();
					expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
					attributes.expires = expires;
				}

				try {
					result = JSON.stringify(value);
					if (/^[\{\[]/.test(result)) {
						value = result;
					}
				} catch (e) {}

				if (!converter.write) {
					value = encodeURIComponent(String(value))
						.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
				} else {
					value = converter.write(value, key);
				}

				key = encodeURIComponent(String(key));
				key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
				key = key.replace(/[\(\)]/g, escape);

				return (document.cookie = [
					key, '=', value,
					attributes.expires ? '; expires=' + attributes.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
					attributes.path ? '; path=' + attributes.path : '',
					attributes.domain ? '; domain=' + attributes.domain : '',
					attributes.secure ? '; secure' : ''
				].join(''));
			}

			// Read

			if (!key) {
				result = {};
			}

			// To prevent the for loop in the first place assign an empty array
			// in case there are no cookies at all. Also prevents odd result when
			// calling "get()"
			var cookies = document.cookie ? document.cookie.split('; ') : [];
			var rdecode = /(%[0-9A-Z]{2})+/g;
			var i = 0;

			for (; i < cookies.length; i++) {
				var parts = cookies[i].split('=');
				var cookie = parts.slice(1).join('=');

				if (cookie.charAt(0) === '"') {
					cookie = cookie.slice(1, -1);
				}

				try {
					var name = parts[0].replace(rdecode, decodeURIComponent);
					cookie = converter.read ?
						converter.read(cookie, name) : converter(cookie, name) ||
						cookie.replace(rdecode, decodeURIComponent);

					if (this.json) {
						try {
							cookie = JSON.parse(cookie);
						} catch (e) {}
					}

					if (key === name) {
						result = cookie;
						break;
					}

					if (!key) {
						result[name] = cookie;
					}
				} catch (e) {}
			}

			return result;
		}

		api.set = api;
		api.get = function (key) {
			return api.call(api, key);
		};
		api.getJSON = function () {
			return api.apply({
				json: true
			}, [].slice.call(arguments));
		};
		api.defaults = {};

		api.remove = function (key, attributes) {
			api(key, '', extend(attributes, {
				expires: -1
			}));
		};

		api.withConverter = init;

		return api;
	}

	return init(function () {});
}));