sig easy copy

easy copying on sig

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name        sig easy copy
// @author      Nick Hall
// @namespace   http://soitgo.es
// @include     https://soitgo.es/
// @include     https://soitgo.es/?*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
// @version     1.2.5
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_listValues
// @description easy copying on sig
// ==/UserScript==
$(document).ready(function()
{
	if ($('#login').length === 0)
	{
		easycopy.init();
	}
});

var easycopy = {
	init: function()
	{
		easycopy.loadSettings();
		console.log(easycopy.settings);

		// Add x and + links
		$('#links .date').append('<span class="easycopy"><a href="#" class="ezc-links">x</a> <a href="#" class="ezc-thumbs">+</a></span>');
		$('.easycopy a.ezc-links').click(easycopy.handleClick);
		$('.easycopy a.ezc-thumbs').click(easycopy.thumbsClick);

		// Link box, loading box
		$('#links').before('<div id="ezc-textcontainer" style="height: 100px; clear: both; margin: 0 20px 20px 20px; padding: 0 !important;"><textarea id="easycopytext" style="width: 922px; height: 98px; padding: 0 !important; margin: 0 !important; z-index: 10;" placeholder="Click the x to the right of each link to get started."></textarea></div><div id="ezc-loading" style="position: fixed; bottom: 0; right: 0;">Loading...</div>');
		$('#ezc-loading').hide();
		$('#easycopytext').focus(function() {$(this).select();});

		//Comment this out if you don't want the top link I guess
		$('body').append('<div id="toTheTop" style="position: fixed; left: 5px; bottom: 5px;"><a href="#">top</a></div>');
		$('#toTheTop').click(function(e)
		{
			e.preventDefault();
			window.scrollTo(0, 0);
		});

		// Settings page
		var settingsIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAAJ2SURBVDhPjVVJixNBFC69qD9BVBwVFQ+DN/EPCIoHYYbxrqC3HHKc5BAIgWxGzB6ym5iNNGTS2ZeLiKcR5uBfEBM3RNwHpP2eqeeUPR31g0dXV73vq7dUdYu/weFwHK1Wq497vd6Lbrf7sl6vP3U6nSfl8v/B5/OtyqEIBAJXx+OxQTYajYzJZGIEg8E1uSy8Xu9FObRGMpncHAwG3zOZTLJYLBYQ1cfhcGiohrlP5YflR/B5gMh30+m0W9L/wIFwOLxJEXAkPDYLmten06kRi8U8pLGQAtxu9yo7W5E5batN6J3M4/FcknJCuFyuw9lsNkEEdiQBXdc/IPVsKpW6i3LcKRQKqXa7/U71o3EulyvZ7fYjUm6BYqGYY0d6NpvN52qDGH6//7zW1J6pvqVSqSmXhcAxOAHiFRT4C4ePwr9HGS5Il30A51Rnq/OGuw//b9C4hkxXBJ0zXuAdkX5GcpcC3b1HDSEOcUmj0WhsC0Q2YzEWTCQStyVvKaLR6DqJME9G+ooE52bBeDx+S/KWIhKJrFkIvhZ0nbjALJjP55OStxRI2WvmoVk7VOAzuGI3qLC0C1lH77ylecndBxT/eKvVmilN2Q2FQuuYPycMIYxlhiNyVmr8Bu7vSq1We8LR0bNcLm/JZbBUEYLyTpHi0IZwtW6iURvovl9v6XNzqrjXWZvNduifgpQOESg1MhrTHIuRcZlw9S7vCVpBCqpkFiBhFqeziOjvo34H9wTZpBBbv9//bBbEMftaqVTaKEUO7z+oJL+EGKqAWRAf0+ucEhmljW5uSCp9jBdpqlAFzIZfwDGtoW0j0hlsrmnaDlI7LakWEOIn6cMDH2scnnQAAAAASUVORK5CYII=';
		$('body').append('<div id="ezc-settings-div" style="position: fixed; width: 800px; max-height: 500px; top: 50%; left: 50%; margin-left: -400px; margin-top: -250px; background-color: ' + $('body').css('background-color') + '; border: 2px solid ' + $('body').css('color') + '; border-radius: 10px; padding: 10px;">\
							<h2>Settings</h2>\
							<p><label>Show link box by default <input type="checkbox" id="ezc-settings-linkbox" /></label></p>\
							<button id="ezc-settings-save">Save</button>\
							<p><a href="#" class="ezc-settings-open">Close</a></p>\
							</div>');
		$('#ezc-settings-div').hide();
		$('#ezc-settings-save').click(easycopy.saveSettings);
		$('nav .ten.columns.omega').append('<a href="#" class="ezc-settings-open"><img src="' + settingsIcon + '" style="height: 20px; width: 20px; margin-bottom: 5px;" /></a>');
		$('.ezc-settings-open').click(function(e) {e.preventDefault(); $('#ezc-settings-div').toggle('fast');});
		if(easycopy.settings.showLinkBox) $('#ezc-settings-linkbox').prop('checked', true);

		// Another div for status messages
		$('body').append('<div id="ezc-status" style="position: fixed; right: 5px; top: 5px; background-color: #191919 !important; color: white !important; padding: 5px !important;">This should never be seen</div>');
		$('#ezc-status').hide();

		MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
		var observer = new MutationObserver(function(mutations)
		{
			mutations.forEach(function(mutation)
			{
				if (typeof mutation.addedNodes == "object")
				{
					$(mutation.addedNodes).find('.date').each(function()
						{
							$(this).append(' <span class="easycopy"><a href="#" class="ezc-links">x</a> <a href="#" class="ezc-thumbs">+</a></span>');
							$(this).find('.ezc-links').click(easycopy.handleClick);
							$(this).find('.ezc-thumbs').click(easycopy.thumbsClick);
						});
				}
			});
		});

		// define what element should be observed by the observer
		observer.observe(document, {
			subtree: true,
			childList: true
		});

		// Set up moving the text area on scroll
		var textareaInitialPosition = $('#easycopytext').offset().top - 10;
		$(window).scroll(function()
		{
			if ($(window).scrollTop() > textareaInitialPosition)
			{
				$('#easycopytext').css('position', 'fixed');
				$('#easycopytext').css('top', '10px');
			}
			else
			{
				$('#easycopytext').css('position', '');
				$('#easycopytext').css('top', '');
			}
		});

		// Throw in some custom inline CSS for voting links (since we need to use !important)
		$('head').append('<style type="text/css">\
			.ezc-flood {\
				color: orange !important;\
			}\
			.ezc-voted {\
				color: green !important;\
			}\
			.ezc-alreadyvoted {\
				color: red !important;\
			}\
			.easycopy button {\
				margin: 0 !important;\
			}\
			</style>');

		// Show/hide the link box if we want
		$('#middlebar > a:nth-child(4)').after('<button id="ezc-linkToggle">Link Box</button>');
		$('#ezc-linkToggle').click(function(e)
		{
			$('#ezc-textcontainer').toggle('fast');
		});
		if (!easycopy.settings.showLinkBox) $('#ezc-textcontainer').hide();
	},

	handleClick: function(event)
	{
		event.preventDefault();
		var url = $(this).parent().parent().prev().find('.title').parent().attr('href'); // This was being really finnicky
		$(this).parent().parent().prev().find('.title').css("cssText", "color: #FF0000 !important;");
		easycopy.enqueue();
		$.get(url, easycopy.populateURLBox);
		$(this).remove();
	},

	thumbsClick: function(event)
	{
		event.preventDefault();
		var linkID = $(this).parent().parent().prev().find('.title').parent().attr('href').split(':');
		var currentLink = $(this);
		if (currentLink.hasClass('ezc-alreadyvoted') || currentLink.hasClass('ezc-voted'))
		{
			easycopy.displayMessage("Already voted");
			return; // Don't pester the server if we've already voted
		}
		easycopy.enqueue('vote');
		$.ajax('ajax.php?i=link&thank=' + linkID[1]).done(function (msg)
			{
				currentLink.removeClass('ezc-flood');
				currentLink.removeClass('ezc-voted');
				currentLink.removeClass('ezc-alreadyvoted');
				if (msg == 'flood')
				{
					currentLink.addClass('ezc-flood');
					easycopy.displayMessage("Please wait");
					console.log("FLOOD!!!");
				}
				else if (msg)
				{
					easycopy.displayMessage("Vote successful");
					currentLink.addClass('ezc-voted');
					console.log("VOTED");
				} 
				else
				{
					easycopy.displayMessage("Already voted");
					currentLink.addClass('ezc-alreadyvoted');
					console.log("Already voted");
				}
				easycopy.dequeue();
			}
			);
	},

	populateURLBox: function(data)
	{
		var linkData = "";
		var password = $(data).find('#password').text();
		linkData += $(data).find('#title').text() + ' [password: ' + password + ']\n';
		$(data).find('#links_mega a').each(function() { linkData += $(this).attr('href') + '\n\n'; });
		$('#easycopytext').val($('#easycopytext').val() + linkData);
		easycopy.dequeue();
	},

	loadingCount: 0,

	enqueue: function(type)
	{
		easycopy.loadingCount++;
		if (type !== 'vote')
		{
			$('#easycopytext').prop('disabled', true);
			$('#easycopytext').css('user-select', 'none');
		}
		$('#ezc-loading').show('fast');
	},

	dequeue: function(type)
	{
		easycopy.loadingCount--;
		if (easycopy.loadingCount === 0)
		{
			if (type !== 'vote')
			{
				$('#easycopytext').prop('disabled', false);
				$('#easycopytext').css('user-select', 'all');
			}
			$('#ezc-loading').hide('slow');
		}
	},

	displayMessage: function(message)
	{
		$('#ezc-status').text(message);
		$('#ezc-status').show('fast').delay(3000).fadeOut();
	},

	settings: [],

	saveSettings: function()
	{
		GM_setValue('showLinkBox', $('#ezc-settings-linkbox').is(':checked'));
		easycopy.displayMessage("Settings saved");
	},

	loadSettings: function()
	{
		var settings = GM_listValues();
		if (settings.length === 0)
		{
			easycopy.runFirstTime(); // Run if we haven't saved anything yet
			settings = GM_listValues(); // Reload
		}
		for (var i = 0; i < settings.length; i++)
		{
			easycopy.settings[settings[i]] = GM_getValue(settings[i]);
		}
	},

	runFirstTime: function()
	{
		console.log('Running initial setup...');
		console.log('Defaulting link box display to true');
		GM_setValue('showLinkBox', true);
	}
};