Sleazy Fork is available in English.

NHentai Improved

Partially fade or remove non-english, HQ thumbnails, mark as read, etc.

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

// ==UserScript==
// @name         NHentai Improved
// @namespace    Hentiedup
// @version      1.2
// @description  Partially fade or remove non-english, HQ thumbnails, mark as read, etc.
// @author       Hentiedup
// @match        https://nhentai.net/*
// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_listValues
// @icon         https://i.imgur.com/1lihxY2.png
// ==/UserScript==

//==================== SETTINGS ====================//
//==================================================//

//== non-english settings ==//
var remove_non_english = false; //true/false
var partially_fade_all_non_english = true; //true/false
var non_english_fade_opacity = 0.3; //0-1 (dependent on above option)

//== browse sections ==//
var browse_thumbnail_width = 250; //px (height scales automatically)
var browse_thumnail_container_width = 1350; //px (max-width = 100% of available space, meaning no need to worry about going too big)
var load_high_quality_browse_thumbnails = true; //true/false

//== comic pages view ==//
var pages_thumbnail_width = 300; //px (height scales automatically)
var pages_thumnail_container_width = 1350; //px (max-width = 100% of available space, meaning no need to worry about going too big)
var load_high_quality_pages_thumbnails = true; //true/false

//== mark as read system ==//
var markAsReadSystemEnabled = true; //true/false
var readTagFontSize = 15; //px

//==================================================//
//==================================================//

if(markAsReadSystemEnabled)
{
    var MARArray = null;
    var MARArrayString = GM_getValue("MARArrayString", null);
    if(MARArrayString) { MARArray = JSON.parse(MARArrayString); }

    var unreadImg = '<svg style="vertical-align: middle;" width="15" height="15" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="book-open" class="svg-inline--fa fa-book-open fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z"></path></svg>';
    var readImg = '<svg style="vertical-align: middle;" width="15" height="15" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="book" class="svg-inline--fa fa-book fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z"></path></svg>';
}

if(remove_non_english) {
	addGlobalStyle(`
		.gallery:not([data-tags~='12227']) {
			display: none;
		}
	`);
}
else if(!remove_non_english && partially_fade_all_non_english) {
	addGlobalStyle(`
		.gallery:not([data-tags~='12227']) > .cover {
			opacity: ` + non_english_fade_opacity + `;
		}
	`);
}

addGlobalStyle(`
/*browsing comics*/
	.container.index-container {
		text-align: center;
		max-width: 100%;
		width: ` + browse_thumnail_container_width + `px;
	}
	.gallery > .cover > img {
		width: 100%;
	}
	.container.index-container > div.gallery {
		width: ` + browse_thumbnail_width + `px;
	}

/*view comic pages*/
	div.thumb-container {
		width: auto;
	}
	#thumbnail-container {
		text-align: center;
		max-width: 100%;
		width: ` + pages_thumnail_container_width + `px;
	}
	div.thumb-container img {
		width: ` + pages_thumbnail_width + `px;
	}
`);

if(markAsReadSystemEnabled)
{
    addGlobalStyle(`
		.readTag {
			border-radius: 10px;
			padding: 5px 10px;
			position: absolute;
			background-color: rgba(0,0,0,.6);
			color: rgba(255,255,255,.3);
			bottom: 7.5px;
			right: 7.5px;
			font-size: `+readTagFontSize+`px;
			font-weight: 900;
			opacity: 1.9;
		}

		#markAsRead, #markAsRead:visited {
			background-color: #3d9e48;
		}
		#markAsRead:active, #markAsRead:hover {
			background-color: #52bc5e;
		}

		#markAsUnRead, #markAsUnRead:visited {
			background-color: rgb(218, 53, 53);
		}
		#markAsUnRead:active, #markAsUnRead:hover {
			background-color: #e26060;
		}
`);
}

if(load_high_quality_pages_thumbnails && $("#thumbnail-container").length !== 0) {
    $("#thumbnail-container > .thumb-container > .gallerythumb > img").one("load", function(){
        $(this).attr("src", $(this).attr("src").replace("//t.", "//i.").replace("t.jpg", ".jpg").replace("t.png", ".png"));
    });
}

if(load_high_quality_browse_thumbnails && $(".container.index-container").length !== 0) {
    $(".container.index-container > .gallery > .cover > img").one("load", function(){
        $(this).attr("src", $(this).attr("src").replace("//t.", "//i.").replace("thumb.jpg", "1.jpg").replace("thumb.png", "1.png"));
    });
}

if(markAsReadSystemEnabled)
{
    let MARArraySelector = MARArray.join("'], .cover[href='");
    $(".cover[href='" + MARArraySelector + "']").css("opacity", non_english_fade_opacity).parent().append("<div class='readTag'>READ</div>");

    if(window.location.href.match(/^.+?\/g\/.+?\/(\?.*|\#.*|)$/g)) //if on the comic info page
    {
        var item = window.location.href.split("nhentai.net")[1].split("?")[0].split("#")[0]; //get item from url
        //alert(item + "\n" + MARArray);
        if(MARArray.includes(item)) //if item is marked as read
            $(".buttons").append('<a href="#" id="markAsUnRead" class="btn btn-secondary">'+unreadImg+' <span style="vertical-align: middle;">Mark as unread</span></a>');
        else
            $(".buttons").append('<a href="#" id="markAsRead" class="btn btn-secondary">'+readImg+' <span style="vertical-align: middle;">Mark as read</span></a>');


        $("#markAsRead").click(function(){
            MARArray.push(item); //add to array
            MARArrayString = JSON.stringify(MARArray); //covert array to string
            GM_setValue("MARArrayString", MARArrayString); //save string
            $(this).html(unreadImg+' <span style="vertical-align: middle;">Mark as unread</span>').prop("id", "markAsUnRead");
        });

        $("#markAsUnRead").click(function(){
            MARArray.splice(MARArray.indexOf(item), 1); //remove from array
            MARArrayString = JSON.stringify(MARArray); //covert array to string
            GM_setValue("MARArrayString", MARArrayString); //save string
            $(this).html(readImg+' <span style="vertical-align: middle;">Mark as read</span>').prop("id", "markAsRead");
        });
    }
}

function addGlobalStyle(css) {
    var head, style;
    head = document.getElementsByTagName('head')[0];
    if (!head) { return; }
    style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
}