Rule34Hentai Improved

Fixes stuff, adds like and favorite under images, highlights animated, makes the site more compact, etc.

Version au 17/01/2020. Voir la dernière version.

// ==UserScript==
// @name         Rule34Hentai Improved
// @namespace    http://tampermonkey.net/
// @author       Hentiedup
// @version      0.6.1
// @icon         https://i.imgur.com/Aea35p5.png
// @description  Fixes stuff, adds like and favorite under images, highlights animated, makes the site more compact, etc.
// @match        https://rule34hentai.net/post/*
// @require      https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    //=========Settings========//
	/*       video/image       */
    var HighlightVideos = true;
    var AutoplayVideos = true;
    var StopHidingMyCursorOnVideo = true;
    var PauseVideoOnClick = true;
    var DownsizeToFit = true;
    var NextPrevWithArrowKeys = true;
    var OverrideVideoDownload = true;
    var AllowContextMenuOnImages = true;

	/*      Compact site       */
    var CompactHeader = true;
    var MinimizeHeaderFurtherAndShowOnHover = false;
    var HideEmptySections = true;
    var HideLog = true;
    var HideImageVideoHeader = true;
    var RemoveSomeSneakyAds = true;

	/*      like/favorite      */
    var EnableLikeFavoriteButtonsBelowImage = true;
    //=========================//

    addGlobalStyle(`
		a.shm-thumb-link > img {
			padding: 0;
		}
		a.tagit-close {
			display: inline;
			padding: 0;
		}
		.custom-button {
			cursor: pointer;
			width: 35px;
			padding: 3px;
			margin: 0;
			border-radius: 20px;
		}
		.custom-button:hover {
			background-color: rgba(255,255,255,.75);
		}
		.customButtonText {
			position: relative;
			top: -5px;
			width: auto;
			display: block;
			text-align: center;
		}
		.customButtonDiv {
			display: inline-block;
			margin: 0;
			padding: 0;
			width: auto;
			float: left;
		}
		.customButtonDiv:nth-of-type(1) { margin-right: 10px; }
		.customButtonDiv:nth-of-type(2) { margin-left: 10px; }

		#Uploadhead > .blockbody > .mini_upload > form > ul {
			width: 100%;
			margin: 0;
			resize: vertical;
		}
	`);

    if(RemoveSomeSneakyAds)
        addGlobalStyle(`
			/*The site only uses iframes for ads, so might as well hide all of them*/
			iframe { display: none; }
			#header td:nth-of-type(1) center:nth-of-type(2) > div { display: none; }

			/*As far as I can tell the "Recommended" div is only for ads*/
			#Recommended_for_youleft { display: none; }

			/*Hiding some links from the header that are pretty much just ads*/
			#header td:nth-of-type(1) center:nth-of-type(3) > ul > li a:not([href^="https://rule34hentai.net"]):not([href^="#"]) { display: none; }
		`);

    if(StopHidingMyCursorOnVideo)
        addGlobalStyle(`#video-id { cursor: auto !important; }`);

    if(HideImageVideoHeader)
        addGlobalStyle(`#Imagemain > h3, #Videomain > h3 { display: none; }`);

	if(MinimizeHeaderFurtherAndShowOnHover) {
		addGlobalStyle(`
			header {
				overflow-y: hidden; height: 55px;
			}
			header:hover {height: auto;}
		`);

		if(DownsizeToFit) {
			addGlobalStyle(`
				header + nav + article #fluid_video_wrapper_video-id,
				header + nav + article #main_image {
					max-height: calc(90vh - 130px` + (HideImageVideoHeader ? ` + 41px` : ``) + `) !important; max-width: 100% !important;
				}

				header:hover + nav + article #fluid_video_wrapper_video-id,
				header:hover + nav + article #main_image {
					max-height: calc(90vh - 220px` + (HideImageVideoHeader ? ` + 41px` : ``) + `) !important; max-width: 100% !important;
				}
			`);
		}
	}

    if(!MinimizeHeaderFurtherAndShowOnHover && DownsizeToFit) {
        addGlobalStyle(`
		#fluid_video_wrapper_video-id, #main_image {
			max-height: calc(90vh - 220px` + (HideImageVideoHeader ? ` + 41px` : ``) + `) !important; max-width: 100% !important;
		}
		`);
    }

    if(CompactHeader)
        addGlobalStyle(`
			header {margin: 0; padding: 0;}
			header p {display: none;}
			header ul.ui-widget {
				margin: 5px;
				display: inline-block;
				vertical-align: middle;
				box-sizing: border-box;
				width: calc(100% - 100px);
			}
			header form > input[value=Search],
			header form > input[value=Search]:visited {
				vertical-align: middle;
				height: 36px;
				border-radius: 8px;
				background-color: #dec4a0;
				border-color: #725327;
				font-weight: 700;
				cursor: pointer;
			}
			header form > input[value=Search]:hover,
			header form > input[value=Search]:active {
				background-color: #dabc92;
			}
			#header h1 {font-size: 14px;}
			#header img.wp-image-67962 {
				height: 50px;
				width: auto;
			}
			#header img.wp-image-69454 {
				display: none;
			}
			#header td > center > ul {margin: 2px 0 0 0;}

			#Uploadhead > .blockbody > .mini_upload > small,
			#Uploadhead > .blockbody > .mini_upload > form > ul,
			#Uploadhead > .blockbody > .mini_upload > form > input[type=submit]
			{
				display: none;
			}

			#Loginhead > .blockbody {
				display: none;
			}
			#Loginhead > h3 {
				cursor: pointer;
			}
		`);

    if(HideLog)
        addGlobalStyle(`b#flash { display: none; }`);

    setTimeout(function(){
        if(NextPrevWithArrowKeys) {
            var currentImage = window.location.href;
            if(currentImage.includes("/post/view/"))
                currentImage = parseInt(currentImage.split("/post/view/")[1], 10);
            else
                currentImage = null;
        }

        if(AutoplayVideos) {
            $("#video-id_fluid_state_button").click();
            $("body").click(); //remove focus from player
        }

        if(!PauseVideoOnClick) {
            $("#video-id_fluid_initial_play_button").remove();
            $("#video-id").click(function(e){
                $("#video-id_fluid_control_playpause").click();
            });
        }

        if(HighlightVideos)
            $("a.shm-thumb-link > img[title*='// webm'], a.shm-thumb-link > img[title*='// mp4'], a.shm-thumb-link > img[title*='// gif']").attr("style", "border: solid 2px #fb2ccc !important; box-shadow: 0 0 5px 1px red;");

        //if logged in
        if($("#Loginhead").length == 0 && EnableLikeFavoriteButtonsBelowImage)
        {
            let insertHTML = `<div class="customButtonDiv"><img id="like-butt" class="custom-button" src="https://i.imgur.com/Kh1HzGr.png" alt="like" title="like">` +
                `<img id="dislike-butt" class="custom-button" src="https://i.imgur.com/b4syBNK.png" alt="dislike" title="dislike"><span id="customLikeButtonText" class="customButtonText">` +
                $("#Image_Scoreleft > .blockbody").text().trim().replace(/[^0-9]/g, "") +
                `</span></div><div class="customButtonDiv"><img id="favorite-butt" class="custom-button` +
                ($("#Image_Controlsleft form input[value='Un-Favorite']").length > 0 ? " unfavorite" : "") + `" src="` +
                ($("#Image_Controlsleft form input[value='Un-Favorite']").length > 0 ? "https://i.imgur.com/wAB0t48.png" : "https://i.imgur.com/dTpBrIj.png") +
                `" alt="` + ($("#Image_Controlsleft form input[value='Un-Favorite']").length > 0 ? "unfavorite" : "favorite") +
                `" title="` + ($("#Image_Controlsleft form input[value='Un-Favorite']").length > 0 ? "unfavorite" : "favorite") +
                `"><span id="customFavButtonText" class="customButtonText">` +
                $("#Favorited_Byleft > .blockbody").text().split(":")[0].trim().replace(/[^0-9]/g, "") + `</span></div>`;

            $(".image_info").parent().parent().prepend(insertHTML);

            $("#like-butt").click(function() {
				let auth = $("#Image_Scoreleft form input[value='Vote Up']").parent().find("input[name='auth_token']").prop("value");
				let id = $("#Image_Scoreleft form input[value='Vote Up']").parent().find("input[name='image_id']").prop("value");
				$("#customLikeButtonText").text("...");
				$.post( "/numeric_score_vote", { auth_token: auth, image_id: id, vote: "up" }, function(data){
					$("#customLikeButtonText").text($(data).find("#Image_Scoreleft > .blockbody").text().trim().replace(/[^0-9]/g, ""));
				}).fail(function(){
					$("#customLikeButtonText").text("error");
				});
            });
            $("#dislike-butt").click(function() {
				let auth = $("#Image_Scoreleft form input[value='Remove Vote']").parent().find("input[name='auth_token']").prop("value");
				let id = $("#Image_Scoreleft form input[value='Remove Vote']").parent().find("input[name='image_id']").prop("value");
				$("#customLikeButtonText").text("...");
				$.post( "/numeric_score_vote", { auth_token: auth, image_id: id, vote: "down" }, function(data){
					$("#customLikeButtonText").text($(data).find("#Image_Scoreleft > .blockbody").text().trim().replace(/[^0-9]/g, ""));
				}).fail(function(){
					$("#customLikeButtonText").text("error");
				});
            });

            $("#favorite-butt").click(function() {
				if($(this).hasClass("unfavorite"))
				{
                    let auth = $("#Image_Controlsleft form input[value='Un-Favorite']").parent().find("input[name='auth_token']").prop("value");
					let id = $("#Image_Controlsleft form input[value='Un-Favorite']").parent().find("input[name='image_id']").prop("value");
					$("#customFavButtonText").text("...");
					$.post( "/change_favorite", { auth_token: auth, image_id: id, favorite_action: "unset" }, function(data){
						$("#customFavButtonText").text($(data).find("#Favorited_Byleft > .blockbody").text().split(":")[0].trim().replace(/[^0-9]/g, ""));
                        $("#favorite-butt").attr("src", "https://i.imgur.com/dTpBrIj.png");
                        $("#favorite-butt").attr("alt", "favorite");
                        $("#favorite-butt").attr("title", "favorite");
						$("#Image_Controlsleft form input[value='Un-Favorite']").attr("value", "Favorite");
						$("#Image_Controlsleft form input[name='favorite_action']").attr("value", "set");
						$("#favorite-butt").removeClass("unfavorite");
					}).fail(function(){
						$("#customFavButtonText").text("error");
					});
				}
				else
				{
					let auth = $("#Image_Controlsleft form input[value='Favorite']").parent().find("input[name='auth_token']").prop("value");
					let id = $("#Image_Controlsleft form input[value='Favorite']").parent().find("input[name='image_id']").prop("value");
					$("#customFavButtonText").text("...");
					$.post( "/change_favorite", { auth_token: auth, image_id: id, favorite_action: "set" }, function(data){
						$("#customFavButtonText").text($(data).find("#Favorited_Byleft > .blockbody").text().split(":")[0].trim().replace(/[^0-9]/g, ""));
                        $("#favorite-butt").attr("src", "https://i.imgur.com/wAB0t48.png");
                        $("#favorite-butt").attr("alt", "unfavorite");
                        $("#favorite-butt").attr("title", "unfavorite");
						$("#Image_Controlsleft form input[value='Favorite']").attr("value", "Un-Favorite");
						$("#Image_Controlsleft form input[name='favorite_action']").attr("value", "unset");
						$("#favorite-butt").addClass("unfavorite");
					}).fail(function(){
						$("#customFavButtonText").text("error");
					});
				}
            });
        }

        if(NextPrevWithArrowKeys && currentImage) {
            $("body").keyup(function(event){
                if($("textarea:focus, input[type=text]:focus").length == 0)
                {
                    console.log("keypress");
                    if(event.which == 39) {
                        ChangeImage(currentImage);
                    }
                    else if(event.which == 37) {
                        ChangeImage(currentImage, false);
                    }
                }
            });
        }

        if(AllowContextMenuOnImages)
            $("#main_image").replaceWith($("#main_image").clone());

        if(HideEmptySections) {
            $("article > section > .blockbody").each(function(){
                //alert($(this).find("*:visible").length);
                //alert($(this).find("*:visible").not("p:empty").length);
                if($(this).find("*:visible").not("p:empty").length == 0)
                    $(this).parent().hide();
            });
        }

        if(CompactHeader)
        {
            $("#Uploadhead #data0").change(function(){
                $("#Uploadhead > .blockbody > .mini_upload > small, #Uploadhead > .blockbody > .mini_upload > form > ul, #Uploadhead > .blockbody > .mini_upload > form > input[type=submit]").show(100);
            });

            $("#Loginhead > h3").click(function(){
                $(this).next(".blockbody").toggle(100);
            });
        }

    }, 200);

    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);
    }
    function ChangeImage(currentImg, next = true) {
        window.open("https://rule34hentai.net/post/view/" + (currentImg+(next ? 1 : -1)) + "","_self");
    }
})();