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"

Mint 2017.06.30.. Lásd a legutóbbi verzió

// ==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.02
// @icon           https://e-hentai.org/favicon.ico

// @include        http*://e-hentai.org/*
// @include        https://upload.e-hentai.org/*
// @include        https://exhentai.org/*

// @exclude        https://e-hentai.org/mpv/*
// @exclude        https://exhentai.org/mpv/*

// @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 crashvar extraCSS = document.createElement("style");

var extraCSS = document.createElement("style");
extraCSS.textContent = `
.link, .option {
cursor: pointer;
font-size: 100%;
text-decoration: underline;
}

.option{
font-size: 110%;
}

.link{
font-size: 150%;
}

label.divHeader{
font-size: 150%;
}

#fixedDiv{
text-align: left !important;
}

#optionDivUL{
margin: 0; padding: 0px 0px 0px 12px;
}
`;
document.head.appendChild(extraCSS);

$(document).ready(function () {
    if (document.title == 'Gallery Not Available - E-Hentai Galleries'){ // Gallery is expunged in e-hentai
        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

        var fixedDiv = `'
<div id="fixedDiv" class="fixedDivArea">
  <div id="linkerDiv">
    <label class="divHeader">Linker:</label>
  </div>
  <div id="optionDiv"><BR>
    <label class="divHeader">Option:</label><BR><ul id="optionDivUL"></ul>
  </div>
</div>'`;
        $('body').append(fixedDiv);
        fixedDiv = $('#fixedDiv');
        linkerDiv = $('#linkerDiv');
        optionDiv = $('#optionDiv');
        fixedDiv.css({
            'position': 'fixed',
            'top': '24px',
            'right': '24px',
            'align': 'left',
            'padding': '8px 8px',
        });
        var linker;

        if (targetWebsite == 'ExHentai') {
            fixedDiv.css({
                'background-color': 'rgba(255, 255, 0, 0.6)',
            });
            if(document.location.href == 'https://upload.e-hentai.org/manage.php'){
                linker="https://exhentai.org/upload/manage.php";
            } else {
                linker="https://exhentai.org"+parse_gallery_identifier();
            }
            linkerDiv.append(createLink("linker",linker,"To ExHentai"));
            $('#linker a, #linker').css('color', 'blue'); //Give blue color to linker
        } else {
            fixedDiv.css({
                'background-color': 'rgba(128, 128, 0, 0.6)',
            });
            if(document.location.href == 'https://exhentai.org/upload/manage.php'){
                linker="https://upload.e-hentai.org/manage.php";
            } else {
                linker="https://e-hentai.org"+parse_gallery_identifier();
            }
            linkerDiv.append(createLink("linker",linker,"To E-Hentai"));
            $('#linker a, #linker').css('color', 'yellow'); //Give yellow color to linker
        } // Add option to switch between E-Hentai and ExHentai in the top bar of the page

        document.getElementById('linker').addEventListener("click",function(){
            document.location.href = linker;
        });

        if(window.location.href.indexOf("uconfig") > -1){
            var optionArray = [];
            optionArray.push(createOption("loadSettingOption","Load saved user setting"));
            optionArray.push(createOption("saveSettingOption","Save current user setting"));

            for (i=0;i<optionArray.length;i++){
                $('#optionDivUL').append(optionArray[i]);
            }

            document.getElementById('loadSettingOption').addEventListener("click",function(){
                var setting = GM_getValue("userSetting","");
                if(setting !== ""){
                    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});
                    }
                    alert("User setting loaded");
                    location.reload();
                } else {
                    alert("Nothing to load");
                }
            });
            document.getElementById('saveSettingOption').addEventListener("click",function(){
                GM_setValue("userSetting", Cookies.get("uconfig"));
                // Maybe have an option to save it to file
                alert("User setting saved");
            });
        }

        // If there is no option available, hide the optionDiv completely
        if ($('.option').length === 0){
            optionDiv.hide();
        }

        // Colorize the option
        if (targetWebsite == 'ExHentai') {
            $('.option').css('color', 'Red');
        } else {
            $('.option').css('color', 'Plum');
        }
    }
});

function createLink(id, link, text){
    return '<a id="'+id+'" href="'+link+'" class="link">'+text+'</a>';
}

function createOption(id, text){
    return '<li><label id="'+id+'" class="option">'+text+'</label></li>';
}

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