// ==UserScript==
// @name Rule34Hentai Improved
// @namespace http://tampermonkey.net/
// @author Hentiedup
// @version 0.8.5
// @icon https://i.imgur.com/Aea35p5.png
// @description Fixes stuff, adds like and favorite under images, highlights animated, makes the site more compact, etc.
// @include https://rule34hentai.net*
// @require https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_listValues
// ==/UserScript==
(function() {
'use strict';
/*============================================*/
/*============================================*/
/*=*| The settings are now found |*=*/
/*=*| on the actual site |*=*/
/*=*| in the "My Profile" section |*=*/
/*============================================*/
/*============================================*/
/* Don't edit anything below */
/*===========================*/
/* video/image */
var HighlightVideos = GM_getValue("HighlightVideos", true);
var AutoplayVideos = GM_getValue("AutoplayVideos", true);;
var StopHidingMyCursorOnVideo = GM_getValue("StopHidingMyCursorOnVideo", true);
var DownsizeToFit = GM_getValue("DownsizeToFit", true);
var NextPrevWithArrowKeys = GM_getValue("NextPrevWithArrowKeys", true);
var AllowContextMenuOnImages = GM_getValue("AllowContextMenuOnImages", true);
/* Compact site */
var CompactSiteHeader = GM_getValue("CompactSiteHeader", "compacter");
var HideEmptySections = GM_getValue("HideEmptySections", true);
var HideLog = GM_getValue("HideLog", true);
var HideImageVideoHeader = GM_getValue("HideImageVideoHeader", true);
var RemoveSomeSneakyAds = GM_getValue("RemoveSomeSneakyAds", true);
var RemovePremiumAds = GM_getValue("RemovePremiumAds", true);
var CenterContent = GM_getValue("CenterContent", false);
/* Sidepanel */
var HideSidepanel = GM_getValue("HideSidepanel", "no");
var HideNavigationInSidePanel = GM_getValue("HideNavigationInSidePanel", false);
var HideFeaturedImgInSidePanel = GM_getValue("HideFeaturedImgInSidePanel", false);
var HideNewsInSidePanel = GM_getValue("HideNewsInSidePanel", false);
var HideCommentsInSidePanel = GM_getValue("HideCommentsInSidePanel", false);
var HidePopularTagsInSidePanel = GM_getValue("HidePopularTagsInSidePanel", false);
var HideTagsInSidePanel = GM_getValue("HideTagsInSidePanel", false);
var HideLikesInSidePanel = GM_getValue("HideLikesInSidePanel", true);
var HideFavByInSidePanel = GM_getValue("HideFavByInSidePanel", false);
var HideReportInSidePanel = GM_getValue("HideReportInSidePanel", false);
var HideImgControlInSidePanel = GM_getValue("HideImgControlInSidePanel", false);
/* like/favorite */
var EnableLikeFavoriteButtonsBelowImage = GM_getValue("EnableLikeFavoriteButtonsBelowImage", true);
var BlockedTags = [];
var BlockedTagsString = GM_getValue("BlockedTagsString", null);
if(BlockedTagsString) { BlockedTags = JSON.parse(BlockedTagsString); }
var EnableMarkAsSeenSystem = GM_getValue("EnableMarkAsSeenSystem", true);
var MarkSeenEffect = GM_getValue("MarkSeenEffect", "fade");
var AutoMarkAsSeen = GM_getValue("AutoMarkAsSeen", true);
var MarkedAsSeen = [];
var MarkedAsSeenString = GM_getValue("MarkedAsSeenString", null);
if(MarkedAsSeenString) { MarkedAsSeen = JSON.parse(MarkedAsSeenString); }
var banIcon = `<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="ban" class="svg-inline--fa fa-ban fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z"></path></svg>`;
var eyeIcon = `<svg class="eyeIcon" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="eye" class="svg-inline--fa fa-eye fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z"></path></svg>`;
var eyeSlashIcon = `<svg class="eyeSlashIcon" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="eye-slash" class="svg-inline--fa fa-eye-slash fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z"></path></svg>`;
//Styles
if(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; margin-right: 10px; }
.customButtonDiv:nth-of-type(3) { margin-left: 10px; }
#Uploadhead > .blockbody > .mini_upload > form > ul {
width: 100%;
margin: 0;
resize: vertical;
}
#r34hi_settings label
{
display: block;
}
#r34hi_settings input[type="checkbox"]
{
transform: scale(1.2);
}
#r34hi_settings select
{
width: auto;
}
#r34hi_settings > .blockbody
{
padding-bottom: 30px;
}
#r34hi_settings h4
{
margin: 23px 0 15px 0;
}
#tag-block-save-button
{
display: none;
margin-left: 5px;
}
#markedAsSeenCB > svg
{
height: 35px;
margin: 3px;
cursor: pointer;
}
svg.eyeSlashIcon
{
color: white;
}
svg.eyeIcon
{
color: #00c85f;
}
.blockTagButton
{
display: inline-block;
width: 11px;
height: 11px;
vertical-align: middle;
cursor: pointer;
}
.blockTagButton > svg
{
vertical-align: top;
color: #ff5454;
}
`);
if(EnableMarkAsSeenSystem && (MarkedAsSeen.length > 0 || MarkSeenEffect == "nothing"))
{
let MarkedAsSeenCSS = "";
for(let i = 0; i < MarkedAsSeen.length; i++)
{
MarkedAsSeenCSS += "a.thumb[data-post-id='"+MarkedAsSeen[i]+"']";
if(i < MarkedAsSeen.length-1)
MarkedAsSeenCSS += ", ";
}
if(MarkSeenEffect == "fade")
MarkedAsSeenCSS += " { opacity: 0.2; }";
else if(MarkSeenEffect == "hide")
MarkedAsSeenCSS += " { display: none; }";
//alert(MarkedAsSeenCSS);
addGlobalStyle(MarkedAsSeenCSS);
}
if(BlockedTags.length > 0)
{
let rules = '';
for(let i = 0; i < BlockedTags.length; i++)
rules += ('a.shm-thumb-link[data-tags~="'+BlockedTags[i]+'"]' + (i < BlockedTags.length-1 ? ',\n' : ''));
rules += '\n{ display: none; }';
//console.log(rules);
addGlobalStyle(rules);
}
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*/
section[id="Recommended_for_youleft"] { display: none; }
/*Hiding some links from the header that are pretty much just ads*/
#header td ul > li a:not([href^="https://rule34hentai.net"]):not([href^="#"]) { display: none; }
#header td ul > li img[src^="https://theporndude.com"] { display: none; }
`);
if(RemovePremiumAds)
addGlobalStyle(`
section[id=""] { display: none; }
`);
if(CenterContent)
addGlobalStyle(`
#fluid_video_wrapper_video-id, #main_image
{
display: block;
margin: auto;
}
#Imagemain + section > .blockbody, #Videomain + section > .blockbody
{
width: 720px;
display: block;
margin: auto;
}
`);
if(HideSidepanel == "all")
addGlobalStyle(`
body > nav { display: none; }
body > article { margin-left: 16px; }
`);
if(HideNavigationInSidePanel)
addGlobalStyle(`#Navigationleft { display: none; }`);
if(HideFeaturedImgInSidePanel)
addGlobalStyle(`#Featured_Imageleft { display: none; }`);
if(HideNewsInSidePanel)
addGlobalStyle(`#Newsleft { display: none; }`);
if(HideCommentsInSidePanel)
addGlobalStyle(`#commentlistrecent { display: none; }`);
if(HidePopularTagsInSidePanel)
addGlobalStyle(`#Popular_Tagsleft { display: none; }`);
if(HideTagsInSidePanel)
addGlobalStyle(`#Tagsleft { display: none; }`);
if(HideFavByInSidePanel)
addGlobalStyle(`#Favorited_Byleft { display: none; }`);
if(HideReportInSidePanel)
addGlobalStyle(`#Report_Imageleft { display: none; }`);
if(HideImgControlInSidePanel)
addGlobalStyle(`#Image_Controlsleft { display: none; }`);
if(HideLikesInSidePanel)
addGlobalStyle(`#Image_Scoreleft { display: none; }`);
if(StopHidingMyCursorOnVideo)
addGlobalStyle(`#video-id { cursor: auto !important; }`);
if(HideImageVideoHeader)
addGlobalStyle(`#Imagemain > h3, #Videomain > h3, #imagelist > h3 { display: none; }`);
if(CompactSiteHeader == "compacter")
addGlobalStyle(`
#header { height: auto; }
#header tr > td { text-align: left; }
#header tr > td > center:nth-of-type(3) { width: calc(100% - 290px); }
#header tr > td > center:nth-of-type(1),
#header tr > td > center:nth-of-type(3)
{ display: inline-block; }
#header tr > td > center:nth-of-type(1)
{
vertical-align: top;
padding: 0 10px 0 10px;
}
#header tr > td > center:nth-of-type(2) { display: none; }
#header tr > td > center:nth-of-type(3) > form { min-width: 300px; }
#header tr > td > center:nth-of-type(3) > ul { margin-left: -270px; }
#header tr > td section > h3,
#header tr > td section > .blockbody { margin: 0; }
`);
if(DownsizeToFit) {
addGlobalStyle(`
#fluid_video_wrapper_video-id, #main_image {
max-height: calc(90vh - 220px` + (HideImageVideoHeader ? ` + 41px` : ``) + `) !important; max-width: 100% !important;
}
`);
}
if(CompactSiteHeader != "no")
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; }`);
}
//sidepanel hiding for image-only
if(HideSidepanel == "vid-img" && window.location.href.includes("/post/view/"))
{
addGlobalStyle(`
body > nav { display: none; }
body > article { margin-left: 16px; }
`);
}
$(function() {
//cleanup cloudflare GET string
if(window.location.href.includes("?__cf"))
window.history.replaceState( {} , $("title").html(), window.location.href.split("?__cf")[0]);
if(CompactSiteHeader != "no") {
$("#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);
});
}
if(RemovePremiumAds)
{
$.each($("article > section"), function(i, v){
//only hiding a section with this specific text, since I'm not sure if potential important site messages use this same section. This way if the message changes, it will not be hidden.
if($(v).text() == "Upgrade your account using the button to the left via bitcoin or Fanbox for only 2$ for extremely limited ads and other premium features. FAQ Here")
$(v).hide();
})
}
//options menu
if(window.location.pathname == "/user")
{
if(EnableMarkAsSeenSystem)
$("#Statsmain > .blockbody").append(`<br>Posts seen (R34HI): ` + MarkedAsSeen.length);
let blockedTagsDisplay = BlockedTagsString.replace(/[\[\]\"\s]/g, "");
blockedTagsDisplay = blockedTagsDisplay.replace(/,/g, ",\n");
let textareaH = BlockedTags.length * 14 + 50;
if(textareaH > 400)
textareaH = 400;
$("#Optionsmain").after(`<section id="r34hi_settings"><h3 data-toggle-sel="#Optionsmain">R34H Improved Settings</h3><div class="blockbody"><form action="#">` +
`<h4>Video/Image</h4>` +
`<label><input type="checkbox" name="HighlightVideos" `+(HighlightVideos ? "checked" : "")+`> Highlight videos</label>` +
`<label><input type="checkbox" name="AutoplayVideos" `+(AutoplayVideos ? "checked" : "")+`> Autoplay videos</label>` +
`<label><input type="checkbox" name="StopHidingMyCursorOnVideo" `+(StopHidingMyCursorOnVideo ? "checked" : "")+`> Show cursor on videos</label>` +
`<label><input type="checkbox" name="DownsizeToFit" `+(DownsizeToFit ? "checked" : "")+`> Downsize images/videos to fit on screen</label>` +
`<label><input type="checkbox" name="NextPrevWithArrowKeys" `+(NextPrevWithArrowKeys ? "checked" : "")+`> Go to next/previous image/video with left/right arrow</label>` +
`<label><input type="checkbox" name="AllowContextMenuOnImages" `+(AllowContextMenuOnImages ? "checked" : "")+`> Allow context-menu/right-click on images</label>` +
`<label><input type="checkbox" name="EnableLikeFavoriteButtonsBelowImage" `+(EnableLikeFavoriteButtonsBelowImage ? "checked" : "")+`> Enable like/dislike/favorite/unfavorite buttons below images/videos</label>` +
`<label><input type="checkbox" name="CenterContent" `+(CenterContent ? "checked" : "")+`> Center video/image and info-box below it</label>` +
`<h4>Compact Site</h4>` +
`<label> <select name="CompactSiteHeader">` +
`<option value="no">Normal</option>` +
`<option value="compact">Compact</option>` +
`<option value="compacter">More Compact</option></select> Header</label>` +
`<label><input type="checkbox" name="HideEmptySections" `+(HideEmptySections ? "checked" : "")+`> Hide Empty site sections</label>` +
`<label><input type="checkbox" name="HideLog" `+(HideLog ? "checked" : "")+`> Hide the yellow log</label>` +
`<label><input type="checkbox" name="HideImageVideoHeader" `+(HideImageVideoHeader ? "checked" : "")+`> Hide the image/video header</label>` +
`<label><input type="checkbox" name="RemoveSomeSneakyAds" `+(RemoveSomeSneakyAds ? "checked" : "")+`> Remove some sneaky ads</label>` +
`<label><input type="checkbox" name="RemovePremiumAds" `+(RemovePremiumAds ? "checked" : "")+`> Remove ads for premium</label>` +
`<h4>Sidepanel</h4>` +
`<label> <select name="HideSidepanel">` +
`<option value="no">Don't Hide</option>` +
`<option value="all">Always Hide</option>` +
`<option value="vid-img">Hide in img-video pages</option></select> Hide the entire sidepanel</label>` +
`<label><input type="checkbox" name="HideNavigationInSidePanel" `+(HideNavigationInSidePanel ? "checked" : "")+`> Hide the Navigation section in the sidepanel</label>` +
`<label><input type="checkbox" name="HideFeaturedImgInSidePanel" `+(HideFeaturedImgInSidePanel ? "checked" : "")+`> Hide the Featured image section in the home page sidepanel</label>` +
`<label><input type="checkbox" name="HideNewsInSidePanel" `+(HideNewsInSidePanel ? "checked" : "")+`> Hide the News section in the homepage sidepanel</label>` +
`<label><input type="checkbox" name="HideCommentsInSidePanel" `+(HideCommentsInSidePanel ? "checked" : "")+`> Hide the Comments section in the homepage sidepanel</label>` +
`<label><input type="checkbox" name="HidePopularTagsInSidePanel" `+(HidePopularTagsInSidePanel ? "checked" : "")+`> Hide the Popular tags section in the homepage sidepanel</label>` +
`<label><input type="checkbox" name="HideTagsInSidePanel" `+(HideTagsInSidePanel ? "checked" : "")+`> Hide the Tags section in the sidepanel</label>` +
`<label><input type="checkbox" name="HideLikesInSidePanel" `+(HideLikesInSidePanel ? "checked" : "")+`> Hide the Likes/Score section in the site sidepanel</label>` +
`<label><input type="checkbox" name="HideFavByInSidePanel" `+(HideFavByInSidePanel ? "checked" : "")+`> Hide the Favorited by section in the site sidepanel</label>` +
`<label><input type="checkbox" name="HideReportInSidePanel" `+(HideReportInSidePanel ? "checked" : "")+`> Hide the Report image section in the site sidepanel</label>` +
`<label><input type="checkbox" name="HideImgControlInSidePanel" `+(HideImgControlInSidePanel ? "checked" : "")+`> Hide the Image controls section in the site sidepanel</label>` +
`<h4>Marked as Seen</h4>` +
`<label><input type="checkbox" name="EnableMarkAsSeenSystem" `+(EnableMarkAsSeenSystem ? "checked" : "")+`> Enable the Mark as seen system</label>` +
`<label><input type="checkbox" name="AutoMarkAsSeen" `+(AutoMarkAsSeen ? "checked" : "")+`> Automatically mark posts as seen as you open them</label>` +
`<label> <select name="MarkSeenEffect">` +
`<option value="nothing">Display normally</option>` +
`<option value="fade">Display faded</option>` +
`<option value="hide">Hide</option></select> What to do with posts marked as seen</label>` +
`<h4>Blocked Tags<button id="tag-block-save-button">Save</button></h4>` +
`<textarea name="BlockedTags" style="width: 350px; height: `+textareaH+`px;">`+blockedTagsDisplay+`</textarea><p>This is mainly for removing blocked tags from the list, but you can add them from here as well.<br>Just seperate tags with "," and use "_" in place of spaces.</p>` +
`</form></div></section>`);
$("#r34hi_settings select[name='HideSidepanel'] > option[value='"+HideSidepanel+"']").attr("selected", "selected");
$("#r34hi_settings select[name='CompactSiteHeader'] > option[value='"+CompactSiteHeader+"']").attr("selected", "selected");
$("#r34hi_settings select[name='MarkSeenEffect'] > option[value='"+MarkSeenEffect+"']").attr("selected", "selected");
$("#r34hi_settings input").change(function(){
GM_setValue($(this).attr("name"), $(this).is(':checked'));
});
$("#r34hi_settings select").change(function(){
GM_setValue($(this).attr("name"), $(this).val());
});
$("#r34hi_settings textarea").on("input", function(){
if($(this).val() != blockedTagsDisplay)
$("#tag-block-save-button").show(200);
});
$("#tag-block-save-button").click(function(e){
e.preventDefault();
e.stopPropagation();
let temp = $("textarea[name='BlockedTags']").val().replace(/\s/g, "");
//remove , if used at the end
if(temp[temp.length-1] == ",")
temp = temp.substr(0, temp.length-1);
if(temp == "")
BlockedTags = [];
else
BlockedTags = temp.split(",");
BlockedTagsString = JSON.stringify(BlockedTags);
GM_setValue("BlockedTagsString", BlockedTagsString);
blockedTagsDisplay = $("textarea[name='BlockedTags']").val();
$(this).hide(200);
});
}
else
{
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(window.location.href.match(/^https:\/\/rule34hentai\.net\/post\/view\/\d+?(\?.*|\#.*|)$/g))
{
//Mark as seen
if($("#Loginhead").length == 0 && EnableMarkAsSeenSystem)
{
var imageID = $("[name='image_id']").prop("value");
if(!imageID)
alert("failed to get imageID");
let seen = MarkedAsSeen.includes(imageID);
let insertHTML = `<div class="customButtonDiv"><a id="markedAsSeenCB" alt="`+(seen ? `seen` : `unseen`)+`" title="`+(seen ? `Mark as Unseen?` : `Mark as Seen?`)+`">`+(seen ? eyeIcon : eyeSlashIcon)+`</a> <span id="customLikeButtonText" class="customButtonText">`+(seen ? `Seen` : `Unseen`)+`</span></div>`;
$(".image_info").parent().parent().prepend(insertHTML);
$("#markedAsSeenCB").parent().click(function(){
MarkedAsSeenString = GM_getValue("MarkedAsSeenString", null);
if(MarkedAsSeenString) { MarkedAsSeen = JSON.parse(MarkedAsSeenString); }
seen = MarkedAsSeen.includes(imageID);
if(seen)
{
seen = false;
let index = MarkedAsSeen.indexOf(imageID);
while(index > -1)
{
MarkedAsSeen.splice(index, 1);
index = MarkedAsSeen.indexOf(imageID);
}
}
else
{
seen = true;
MarkedAsSeen.push(imageID);
}
$(this).html(`<a id="markedAsSeenCB" alt="`+(seen ? `seen` : `unseen`)+`" title="`+(seen ? `Mark as Unseen?` : `Mark as Seen?`)+`">`+(seen ? eyeIcon : eyeSlashIcon)+`</a> <span id="customLikeButtonText" class="customButtonText">`+(seen ? `Seen` : `Unseen`)+`</span>`);
MarkedAsSeenString = JSON.stringify(MarkedAsSeen);
GM_setValue("MarkedAsSeenString", MarkedAsSeenString);
});
var waitForFocus;
waitForFocus = setInterval(function(){
if(document.hasFocus())
{
if(AutoMarkAsSeen && !seen)
{
$("#markedAsSeenCB").parent().click();
//alert("auto marked");
}
clearInterval(waitForFocus);
}
}, 100);
}
//like favorite buttons
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");
});
}
});
}
//arrow navigation
if(NextPrevWithArrowKeys && window.location.href.includes("/post/view/")) {
$("body").keyup(function(event){
if($("textarea:focus, input[type=text]:focus").length == 0)
{
//console.log("keypress");
if(event.which == 39) {
//console.log("right");
$("#nextlink")[0].click();
}
else if(event.which == 37) {
//console.log("left");
$("#prevlink")[0].click();
}
}
});
}
if(AllowContextMenuOnImages)
$("#main_image").replaceWith($("#main_image").clone());
}
if(HideEmptySections) {
$("article > section > .blockbody, nav > section > .blockbody").each(function(){
if($(this).find("*:visible").not("p:empty").length == 0)
$(this).parent().hide();
});
}
//append tag blocking buttons
if(true)
{
$("td.tag_name_cell").after(`<div class="blockTagButton" alt="block-tag" title="block tag">`+banIcon+`</div>`);
$(".blockTagButton").click(function(e){
e.preventDefault();
e.stopPropagation();
BlockTag($(this).prev().find(".tag_name").text());
let target = $(this);
target.css("cursor", "wait");
setTimeout(function(){ target.css("cursor", "pointer"); }, 1000);
});
}
if(AutoplayVideos)
{
$("#video-id")[0].autoplay = true;
$("#video-id")[0].play();
let playInterv;
let elapsed = 0;
playInterv = setInterval(function(){
let target = $("#video-id_fluid_initial_play");
if(target.length > 0)
{
target.click();
clearInterval(playInterv);
}
else if(elapsed > 20000)
clearInterval(playInterv);
elapsed += 100;
}, 100);
}
}
});
function BlockTag(tag)
{
tag = tag.toLowerCase();
tag = tag.replace(/\s/g, "_");
console.log("added to tag block list: " + tag);
if(!tag || tag.length <= 0)
return;
if(!BlockedTags.includes(tag))
BlockedTags.push(tag);
else
BlockedTags.splice(BlockedTags.indexOf(tag), 1);
BlockedTagsString = JSON.stringify(BlockedTags);
GM_setValue("BlockedTagsString", BlockedTagsString);
}
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);
}
})();