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