steamgifts.com improved game filter

Makes hiding giveaways for specific games much quicker and easier

目前為 2015-11-14 提交的版本,檢視 最新版本

// ==UserScript==
// @name        steamgifts.com improved game filter
// @description Makes hiding giveaways for specific games much quicker and easier
// @namespace   Barefoot Monkey
// @include     http://www.steamgifts.com/
// @include     http://www.steamgifts.com/giveaways/search?*
// @version     1.2
// @grant       none
// @noframes
// ==/UserScript==

$('<style>')
.text(
	'@keyframes rotate-right-60px {'
	+'	from {'
	+'		background-position: 0px 0;'
	+'	}'
	+'	to {'
	+'		background-position: 300px 0;'
	+'	}'
	+'}'

	+'@keyframes rotate-left-60px {'
	+'	from {'
	+'		background-position: 0px 0;'
	+'	}'
	+'	to {'
	+'		background-position: -300px 0;'
	+'	}'
	+'}'

	+'.giveaway__row-outer-wrap {'
	+'	transition: opacity 1s linear;'
	+'}'

	+'.BarefootMonkey-hidden {'
	+'	opacity: 0.6;'
	+'	background: repeating-linear-gradient(45deg, transparent 0px, transparent 10px, #ccc, 10px, #ccc 12px, transparent 12px), repeating-linear-gradient(-45deg, transparent 0px, transparent 10px, #ccc, 10px, #ccc 12px, transparent 12px);'
	+'}'

	+'.BarefootMonkey-hiding, .BarefootMonkey-unhiding {'
	+'	opacity: 0.6;'
	+'	animation-duration: 12s;'
	+'	animation-iteration-count: infinite;'
	+'	animation-timing-function: linear;'
	+'}'

	+'.BarefootMonkey-hiding {'
	+'	animation-name: rotate-right-60px;'
	+'	background: repeating-linear-gradient(45deg, transparent 0px, transparent 10px, #ccc, 10px, #ccc 12px);'
	+'}'

	+'.BarefootMonkey-unhiding {'
	+'	animation-name: rotate-left-60px;'
	+'	background: repeating-linear-gradient(-45deg, transparent 0px, transparent 10px, #ccc, 10px, #ccc 12px);'
	+'}'
)
.appendTo(document.head)

function update_filter(id, token, action, url, prior_class, progress_class, complete_class) {
	$('.giveaway__icon.giveaway__hide[data-popup="popup--hide-games"][data-game-id='+id+']')
	.closest('.giveaway__row-outer-wrap')
	.addClass(progress_class)
	.removeClass('BarefootMonkey-error')
	.removeClass(prior_class)

	$.ajax({
		url: url,
		method: 'POST',
		context: {id: id, progress_class: progress_class, complete_class: complete_class},
		data: {
			'xsrf_token':token,
			'game_id':id,
			'do': action
		},
		'error': function() {
			$('.giveaway__icon.giveaway__hide[data-popup="popup--hide-games"][data-game-id='+this.id+']')
			.closest('.giveaway__row-outer-wrap')
			.removeClass(this.progress_class)
			.addClass('BarefootMonkey-error')
		},
		'success': function() {
			$('.giveaway__icon.giveaway__hide[data-popup="popup--hide-games"][data-game-id='+this.id+']')
			.closest('.giveaway__row-outer-wrap')
			.removeClass(this.progress_class)
			.addClass(this.complete_class)
		}
	})
}

function callback(event) {

	// get id and token
	var id = $(this).data('game-id')
	var token = $('.popup--hide-games form input[name="xsrf_token"]').val()

	// hide or unhide the game
	if (id && token) {
		var closest = $(this).closest('.giveaway__row-outer-wrap')
		if (closest.hasClass('BarefootMonkey-hidden')) {
			update_filter(id, token, 'remove_filter', '/ajax.php', 'BarefootMonkey-hidden', 'BarefootMonkey-unhiding', null)
		} else if (!closest.hasClass('BarefootMonkey-unhiding') && !closest.hasClass('BarefootMonkey-hiding')) {
			update_filter(id, token, 'hide_giveaways_by_game_id', '/', null, 'BarefootMonkey-hiding', 'BarefootMonkey-hidden')
		}
	}

	event.stopPropagation()
}

setTimeout(function() {

	$('.giveaway__icon.giveaway__hide')
	.off()
	.click(callback)

	var container = document.querySelector('.page__outer-wrap>.page__inner-wrap>.widget-container>.sidebar+div>.page__heading+div')

	var observer = new MutationObserver(function(mutations) {
		mutations.forEach(function(mutation) {
			var added = mutation.addedNodes
			for (var i = 0; i < mutation.addedNodes.length; i += 1) {
				var node = $(mutation.addedNodes[i])
				if (node.hasClass('giveaway__row-outer-wrap')) {
					
					node.find('.giveaway__icon.giveaway__hide')
					.off()
					.click(callback)
				}
			}
		});    
	});
	observer.observe(container, {childList:true});

}, 1)