E-H Better Gallery Hiding

Undoable hiding based on tags, title keywords, and uploader name.

От 11.12.2019. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name           E-H Better Gallery Hiding
// @description    Undoable hiding based on tags, title keywords, and uploader name.
// @author         Hen-Tie
// @homepage       https://hen-tie.tumblr.com/
// @namespace      https://greasyfork.org/en/users/8336
// @include        /^https?:\/\/(e-|ex)hentai\.org\/$/
// @include        /^https?:\/\/(e-|ex)hentai\.org\/(\?page=.*|\?f_.*|tag\/.*|uploader\/.*)$/
// @grant          none
// @require        https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js
// @icon           https://i.imgur.com/pMMVGRx.png
// @version        3.13
// ==/UserScript==

/*───────────────────┐
│   CONFIGURATION    │
├────────────────────┼──────────────────────────┬──────────────────────────────┐
│  uploader hiding   │       title hiding       │         flag hiding          │
├────────────────────┼──────────────────────────┼──────────────────────────────┤
│ edit "var blocked" │ edit "var hidePixiv"     │ flag tags with #FF0000       │
│ case insensitive   │ edit "var hideOngoing"   │ it will be hidden, but can   │
│ format:            │ edit "var hidePortfolio" │ be toggled as desired        │
│ ['user1','user2']  │ format:                  │                              │
│                    │ true/false               │                              │
└────────────────────┴──────────────────────────┴─────────────────────────────*/
var softHiding = false; //default to fading-out galleries, instead of hiding
var blocked = []; //blocked uploaders
var hidePixiv = false; //pixiv art dumps
var hideOngoing = false; //ongoing in title
var hidePortfolio = false; //other artist dumps
/*────────────────────────────────────────────────────────────────────────────*/

//track removed galleries
var removed, fRemoved, uRemoved, oRemoved, pRemoved, aRemoved;
removed = fRemoved = uRemoved = oRemoved = pRemoved = aRemoved = 0;

//all view modes
$('table.itg>tbody>tr, .gl1t').each(function() {
	var uploader = $(this).find('.glhide div a, .gl3e div a').text().toLowerCase();
	var galTitle = $(this).find('.glink, .gl4t.glname').text();

	$.each(blocked, function(index,value) {
		blocked[index] = value.toLowerCase();
	});

	//tag flagged
	//gallery with flagged tag in colour #FF0000 is to be blocked
	if ($(this).find('.gt[style$="background:radial-gradient(#df0000,#FF0000) !important"]').length > 0) {
		hidden($(this));
		removed++, fRemoved++;
	}
	//ongoing gallery
	else if(/[([]wip[)\]]|ongoing|on going|en progreso|\(in progress\)|\[in progress\]/i.test(galTitle) && hideOngoing) {
		hidden($(this));
		removed++, oRemoved++;
	}
	//pixiv gallery
	else if(/pixiv|fanbox/i.test(galTitle) && hidePixiv) {
		hidden($(this));
		removed++, pRemoved++;
	}
	//artist gallery
	else if(/patreon|hentai-foundry|artist archives|twitter|artist galleries|artist ?[-:]|\(artist\)|\[artist\]/i.test(galTitle) && hidePortfolio) {
		hidden($(this));
		removed++, aRemoved++;
	}
	//uploader blocked - unavailable in thumbnail mode
	else if ($.inArray(uploader, blocked) !== -1) {
		hidden($(this));
		removed++, uRemoved++;
	}
});

//display removed count with mouseover data
var ctrlAnchor = $('p.ip:first-child');
if (removed > 0) {
	var removedInfo = 'Flagged:'+fRemoved+' Uploader:'+uRemoved+' Ongoing:'+oRemoved+' Pixiv:'+pRemoved+' Artist:'+aRemoved;
	if (softHiding) {
		ctrlAnchor.append('<div class="eh-bgh-controls">(<em class="eh-bgh-hiddenCount" title="'+removedInfo+'">Soft-Hiding '+removed+'</em> / <a class="eh-bgh-toggle" href="javascript:;" title="Temporarily disable E-H Better Gallery Hiding">Disable</a>)</div>');
	} else {
		ctrlAnchor.append('<div class="eh-bgh-controls">(<em class="eh-bgh-hiddenCount" title="'+removedInfo+'">Hiding '+removed+'</em> / <a class="eh-bgh-toggle" href="javascript:;" title="Temporarily disable E-H Better Gallery Hiding">Disable</a>)</div>');
	}
}

function hidden(elem) {
	if (softHiding) {
		elem.addClass('eh-bgh-hidden');
	} else {
		elem.addClass('eh-bgh-hidden').hide();
	}
}

//temporarily disable hiding
$('.eh-bgh-toggle').click(function() {
	var toggle = $('.eh-bgh-toggle');

	toggle.toggleClass('eh-bgh-showing');
	$('.eh-bgh-hidden').toggle();

	if (toggle.hasClass('eh-bgh-showing')) {
		toggle.text('Enable');
	} else {
		toggle.text('Disable');
	}
});

//add custom css
$('head').append(`<style data-jqstyle="ehBGH">
.eh-bgh-controls {display:block; text-align:center; padding:3px 1px;}
tr.eh-bgh-hidden {opacity: .2; transition:200ms ease-out;}
tr.eh-bgh-hidden:hover {opacity: 1;}
.eh-bgh-hiddenCount {border-bottom: 1px dotted currentColor;}
</style>`);