There are 3 previous versions of this script.
// ==UserScript==
// @name SU Groups Cleaner
// @namespace thlayli.detrave.net
// @description Hides and/or dims messages by age
// @include http://*.stumbleupon.com/groups/
// @license http://www.gnu.org/copyleft/gpl.html
// @version 2.0.2
// ==/UserScript==
// auto-update variables
var script_title = "StumbleUpon Groups Cleaner";
var source_location = "http://thlayli.detrave.net/su-groupscleaner.user.js";
var version_holder = "http://thlayli.detrave.net/su-groupscleaner.version.txt";
var current_version = "2.0.2";
var latest_version = "";
var manual_check = true;
var lastupdatecheck = GM_getValue("Updated", "never");
GM_registerMenuCommand("Update - " + script_title, CheckVersion);
CheckForUpdate();
GM_registerMenuCommand("Toggle Conversation Fading", toggleFading);
var fades = new Array();
var ages = new Array();
var ageLimit = GM_getValue("ageLimit", 0);
var fadingEnabled = GM_getValue('fadingEnabled', true);
var dates = xpath(document, "//span[contains(@class, 'msgDate')]");
var cmdBars = xpath(document, "//div[contains(@class, 'sectionCmds')]");
if(ageLimit != 0)
ageText = "Hiding messages more than " + ageLimit + " hours old";
else
ageText = "Showing all messages";
cmdBars.snapshotItem(1).style.display = "none";
cmdBars.snapshotItem(0).firstChild.nextSibling.firstChild.nextSibling.innerHTML = '<ul class="cmds"><li class="textlink"><a class="textlink" href="javascript:void(0);" id="toggle_agelimit">' + ageText + '</a> (click to change)';
document.getElementById("toggle_agelimit").wrappedJSObject.addEventListener('click', toggleLimit, true);
location.href = "javascript:showAllConvos();";
for(i=0;i<dates.snapshotLength;i++){
age = dates.snapshotItem(i).firstChild.textContent.replace("said ","");
age = age.replace(/ ago\n\t+in/ig,"");
ageArr = age.split(" ");
switch(ageArr[1]){
case "hours":
age = ageArr[0] * 60;
break;
case "hour":
age = ageArr[0] * 60;
break;
case "days":
age = ageArr[0] * 1440;
break;
case "day":
age = ageArr[0] * 1440;
break;
default:
age = ageArr[0];
}
ages[i] = age;
bubble = dates.snapshotItem(i).parentNode.parentNode.parentNode;
bubble.setAttribute("fade_id",i);
bubble.setAttribute("post_age",age);
if(fadingEnabled == true){
fade = 1;
if(age < 15){
fade = .9;
}else if(age < 60){
fade = .85;
}else if(age < 240){
fade = .8;
}else if(age < 300){
fade = .75;
}else if(age < 360){
fade = .7;
}else if(age < 480){
fade = .65;
}else if(age < 600){
fade = .6;
}else if(age < 720){
fade = .55;
}else if(age < 940){
fade = .5;
}else if(age < 1440){
fade = .4;
}else if(age < 2880){
fade = .3;
}else if(age < 3840){
fade = .25;
}else if(age < 4320){
fade = .2;
}else if(age < 7680){
fade = .15;
}else{
fade = .1;
}
bubble.setAttribute("style","-moz-opacity: " + fade + ";");
bubble.wrappedJSObject.addEventListener('mouseover', unFade, true);
bubble.wrappedJSObject.addEventListener('mouseout', reFade, true);
fades[i] = fade;
}
}
hideOld();
function hideOld(){
var messages = xpath(document, "//div[contains(@class, 'listMsgs')]");
for(i=0;i<messages.snapshotLength;i++){
if(ages[i] > ageLimit * 60 && ageLimit != 0)
messages.snapshotItem(i).style.display = "none";
else
messages.snapshotItem(i).style.display = "block";
}
hideEmpty();
}
function hideEmpty(){
var groups = xpath(document, "//div[contains(@class, 'groupBanner')]");
for(i=0;i<groups.snapshotLength;i++){
var empty = true;
var nextLine = groups.snapshotItem(i).nextSibling.nextSibling;
while(nextLine.className.indexOf("listMsgs") != -1){
if(nextLine.style.display != "none")
empty = false;
nextLine = nextLine.nextSibling.nextSibling;
}
if(empty == true){
groups.snapshotItem(i).style.display = "none";
}else{
groups.snapshotItem(i).style.display = "block";
}
}
}
function toggleLimit(){
switch(ageLimit){
case 0:
ageLimit = 12;
break;
case 12:
ageLimit = 24;
break;
case 24:
ageLimit = 36;
break;
case 36:
ageLimit = 48;
break;
case 48:
ageLimit = 60;
break;
default:
ageLimit = 0;
}
if(ageLimit != 0)
this.innerHTML = "Hiding messages more than " + ageLimit + " hours old";
else
this.innerHTML = "Showing all messages";
GM_setValue("ageLimit", ageLimit);
hideOld();
}
function toggleFading(){
if(fadingEnabled == true)
fadingEnabled = false;
else
fadingEnabled = true;
GM_setValue("fadingEnabled", fadingEnabled);
document.location.reload();
}
function reFade(){
fade = fades[this.getAttribute("fade_id")];
this.setAttribute("style","-moz-opacity: " + fade + ";");
}
function unFade(){
this.setAttribute("style","-moz-opacity: 1;");
}
function xpath(obj,query) {
return document.evaluate(query, obj, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
}
// Userscript Auto-Update - http://userscripts.org/scripts/show/22372 - edited July 18 2008 by Nathan Blume
function GetNewVersion() {
var today = new Date();
GM_setValue('Updated', String(today));
window.location = source_location;
}
function CheckForUpdate(){
var today = new Date();
var one_day = 24 * 60 * 60 * 1000; //One day in milliseconds
if(lastupdatecheck != 'never'){
today = today.getTime(); //Get today's date
lastupdatecheck = new Date(lastupdatecheck).getTime();
var interval = (today - lastupdatecheck) / one_day; //Find out how many days have passed
if(interval >= 7){
manual_check = false;
CheckVersion();
}
}else{
lastupdatecheck = new Date(lastupdatecheck).getTime();
manual_check = false;
CheckVersion();
}
}
function CheckVersion(){
GM_xmlhttpRequest({
method: 'GET',
url: version_holder,
headers: {'Content-type':'application/x-www-form-urlencoded'},
onload: function(responseDetails){
var latest_version = responseDetails.responseText.match(/version=([0-9\.]+)/);
if(latest_version[1] != null && latest_version[1] != 'undefined'){
if(current_version != latest_version[1]){
if(confirm('A more recent version of ' + script_title + ' (' + latest_version[1] + ') has been found.\nWould you like to get it now?'))
GetNewVersion();
else
AskForReminder();
}else{
SkipWeeklyUpdateCheck();
if(manual_check == true)
alert('You have the latest version of ' + script_title + '.');
}
}else{
alert('Sorry, there was problem checking for the update.\nPlease try again later.');
}
}
});
}
function AskForReminder(){
if(confirm('Would you like to be reminded in 24 hours ?\n(Cancel to be reminded in one week.)')){
var today = new Date();
today = today.getTime();
var sixdays_ms = 6 * 24 * 60 * 60 * 1000;
var sda_ms = today - sixdays_ms;
var sixdaysago = new Date(sda_ms)
GM_setValue('Updated', String(sixdaysago));
}else{
SkipWeeklyUpdateCheck();
}
}
function SkipWeeklyUpdateCheck(){
var today = new Date();
GM_setValue('Updated', String(today));
}
