By Thlayli
Has 20 other scripts.
// ==UserScript==
// @name Preview StumbleUpon Posts
// @namespace thlayli.detrave.net
// @description Adds a preview button to StumbleUpon forums and contact pages
// @include http://*.group.stumbleupon.com/forum/*
// @include http://*.stumbleupon.com/contact/
// @license http://www.gnu.org/copyleft/gpl.html
// @version 1.7
// ==/UserScript==
//
// Add a prefString to match your details. The script will work without this info, you just won't have an avatar, etc.
// You can enter multiple accounts seperated by semicolons. Make sure there are no spaces in the string.
//
// Format: "USER,ID,FAN,AGE,GENDER,SPONSOR"
// USER - Your SU user name. Case sensitive.
// ID - The Stumbler# found at the bottom of your About page.
// FAN METER - How full your "fan box" is. A number from 1-4.
// AGE - Your age as shown on your blog or 0 if none
// GENDER - M or F or a space for none
// SPONSOR - Are you a sponsor, true or false. This changes the color of the "fan box".
//
// e.g. prefString = "Thlayli,347013,4,28,M,true;StrangeJ,176894,4,17,M,true";
var prefString = "Thlayli,347013,4,28,M,true;Ecchi,926961,4,28,M,false";
// Set draftWarnings to false to turn off warnings when navigating away from an unposted entry. Default is true.
var draftWarnings = true;
// Don't edit below this line!
var prefSet = prefString.split(';');
var url = document.location.href.split('.');
var editFlag = false;
var draftFlag = false;
var realSubmit = false;
// auto-update variables
var script_title = 'Preview StumbleUpon Posts';
var source_location = 'http://thlayli.detrave.net/su-preview.user.js';
var version_holder = 'http://thlayli.detrave.net/su-preview.version.txt';
var current_version = '1.6';
var latest_version = '';
var manual_check = true;
var lastupdatecheck = GM_getValue('Updated', 'never');
if(url[1] == 'group'){ //forum
var field = document.getElementById('posttext').wrappedJSObject;
if(field)
if(field.value == ''){
var msg = 'You have drafted a Post. Changes will be lost.';
}else{
var msg = 'You have drafted an Edit. Changes will be lost.';
var originalPost = field.value;
}
if(document.getElementsByTagName('textarea').length > 0 && document.getElementsByTagName('textarea').item(0).className != 'darkbox'){
function forumPreview(){
var m = ' ' + document.getElementById('posttext').value;
var n = "$1<a href='$2$3$4$5$6$7'>$4$5$6</a> <a href='http://www.stumbleupon.com/url/$3$4$5$6$7'><span class='mini'><span class='text2'>[$5]</span></span></a>";
postText = m.replace(/([^="'])(http:\/\/)(www\.)?([[^\d\s]*?\.])?([^\/\s\?]*)(\S[^\?\s]+)?(\?[^"'\r\n\s]+)?([^\r\n\s\?])?/gi, n);
postText = postText.replace(/^\s/,'');
postText = postText.replace(/\r|\n/g,'<br>');
if(buttonName == 'Post'){
var postText = '<td id="preview" class="lightbg" align="center" valign="top"><a href="http://' + stumbleName.toLowerCase() + '.stumbleupon.com/"><img src="http://www.stumbleupon.com/' + avatar + '" border="0" hspace="4"></a><br>' + sponsorMarkup + '</td><td class="lightbg" valign="top" width="100%"><table cellpadding="2" cellspacing="0" width="100%"><tbody><tr><td class="lightbg"><a name="end"></a><a target="_top" href="http://' + stumbleName.toLowerCase() + '.stumbleupon.com/"><img alt="' + stumbleName.toLowerCase() + '" src="http://www.stumbleupon.com/images/' + rankBox + '" border="0"> ' + stumbleName + '</a></td><td class="lightbg" align="right"><span class="date"><b>Preview</b></span></td></tr><tr><td colspan="2" class="lightbg">' + postText + '</td></tr></tbody></table><br><br style="font-size: 4px;"></td>';
if(!document.getElementById('preview')){
var previewPost = finalPost.cloneNode(true);
var previewBarRow = document.createElement('tr');
var previewBar = document.createElement('td');
finalPost.parentNode.insertBefore(previewPost,finalPost.nextSibling);
finalPost.parentNode.insertBefore(previewBarRow,previewPost);
previewBarRow.appendChild(previewBar);
previewBar.innerHTML = '<hr class=bg style="margin-bottom: 5px;">';
previewBar.id = 'bar';
previewBar.colSpan = '2';
previewPost.innerHTML = postText;
} else {
document.getElementById('preview').parentNode.innerHTML = postText;
}
}
if(buttonName == 'Edit'){
finalPost.firstChild.nextSibling.firstChild.firstChild.firstChild.nextSibling.innerHTML = "<td colspan='2' class='lightbg'>" + postText + '</td>';
finalPost.firstChild.nextSibling.firstChild.firstChild.firstChild.firstChild.nextSibling.firstChild.innerHTML = '<b>Preview</b>';
editFlag = true;
}
previewButton.value = 'Update Preview';
}
var multiLine = false;
var postButton = document.forms.item(document.forms.length-1).elements.item(document.forms.item(document.forms.length-1).elements.length-1);
var finalPost = document.getElementsByTagName('table').item(document.getElementsByTagName('table').length-4).parentNode.parentNode;
var buttonName = postButton.value.substr(0,4);
var space = document.createTextNode(' ');
var previewButton = document.createElement('input');
previewButton.type = 'button';
previewButton.className = 'bold';
previewButton.value = 'Preview ' + buttonName;
var submitProxyButton = postButton.cloneNode(true);
postButton.style.display = 'none';
submitProxyButton.id = 'proxy';
postButton.parentNode.insertBefore(previewButton,postButton.nextSibling);
postButton.parentNode.insertBefore(submitProxyButton,previewButton);
postButton.parentNode.insertBefore(space,previewButton);
previewButton.addEventListener('click', forumPreview, false);
if(document.getElementsByTagName('table').item(8).rows.length>3){
var multiLine = true;
var finalBar = document.getElementsByTagName('table').item(8).rows.item(document.getElementsByTagName('table').item(8).rows.length-4);
}
if(buttonName == 'Post'||buttonName == 'Edit'){
var userName = postButton.value.split(' ');
userName = userName[2];
}
var nameStop = false;
for(i=0;i<prefSet.length;i++){
prefSplit = prefSet[i].split(',');
if(nameStop == false){
if(userName.toLowerCase() == prefSplit[0].toLowerCase()){
nameStop = true;
var stumbleName = prefSplit[0];
var avatar = 'superminipics/' + prefSplit[1] + '.jpg';
var age = prefSplit[3];
var gender = prefSplit[4];
if(prefSplit[5] == 'true'){
var gb = 'd.gif'
var sponsorMarkup = "<span class=mini><a href='http://stumbleupon.com/sponsor.php'>sponsor</a>";
} else {
var gb = '.gif';
var sponsorMarkup = '';
}
var rankBox = 'arank' + prefSplit[2] + gb;
} else {
var stumbleName = userName;
var avatar = 'images/nopic_small.jpg';
var rankBox = 'arank0.gif';
var sponsorMarkup = '';
}
}
}
unsafeWindow.onbeforeunload = unloadPreview;
document.getElementById('proxy').wrappedJSObject.onclick = submitProxy;
field.onkeyup = function() {draftFlag = true;};
}
} else { //contact
function contactPreview(){
var messageText = document.getElementById('msgContent').value;
messageText = messageText.replace(/\r|\n/g,'<br>');
if(!document.getElementById('preview')){
var msgDiv = xpath("//div[@class='listMsgs' and last()]").snapshotItem(0);
var previewDL = document.createElement('dl');
previewDL.innerHTML = '<dt><a href="http://' + stumbleName.toLowerCase() + '.stumbleupon.com"><img src="http://www.stumbleupon.com/' + avatar + '" alt=""></a></dt><dd><div class="bubble"><div class="bubbleHead"><div class="bubbleContent form"><span class="sender"><a href="http://' + stumbleName.toLowerCase() + '.stumbleupon.com">' + stumbleName + '</a></span><span class="bullet">•</span><span class="senderAge textDisabled">' + age + ' ' + gender + '</span><span class="bullet">•</span><span class="msgDate textDisabled">Preview</span><div class="mgnTopSm pdgBottomSm subDivider"><!-- --></div><div class="msgContent"><p id="preview">' + messageText + '</p></div></div></div><div class="bubbleBottom"><!-- --></div></div></dd>';
if(topMsg = msgDiv.firstChild.nextSibling){
topMsg.parentNode.insertBefore(previewDL,topMsg);
}else{
msgDiv.appendChild(previewDL);
}
previewButton.value = 'Update Preview';
} else {
document.getElementById('preview').innerHTML = messageText;
}
}
if(document.getElementById('msgContent')){
var field = document.getElementById('msgContent').wrappedJSObject;
var msg = 'You have drafted a Message. Changes will be lost.';
var userName = xpath("//img[@id='intabInbox']").snapshotItem(0);
userName = userName.parentNode.host.split('.')[0];
var postButton = xpath("//input[@value='Send Message >']").snapshotItem(0);
var nameStop = false;
for(i=0;i<prefSet.length;i++){
prefSplit = prefSet[i].split(',');
if(nameStop == false){
if(userName.toLowerCase() == prefSplit[0].toLowerCase()){
nameStop = true;
var stumbleName = prefSplit[0];
var avatar = 'superminipics/' + prefSplit[1] + '.jpg';
var age = prefSplit[3];
var gender = prefSplit[4];
if(prefSplit[5] == 'true'){
var gb = 'd.gif'
} else {
var gb = '.gif';
}
var rankBox = 'arank' + prefSplit[2] + gb;
} else {
var stumbleName = userName;
var avatar = 'images/nopic_small.jpg';
var rankBox = 'arank0.gif';
}
}
}
var previewButton = document.createElement('input');
previewButton.className = 'btnGreen';
previewButton.type = 'button';
previewButton.style.marginLeft = '6px';
previewButton.value = 'Preview Message';
if(postButton){
var submitProxyButton = postButton.cloneNode(true);
postButton.style.display = 'none';
submitProxyButton.id = 'proxy';
postButton.parentNode.insertBefore(previewButton,postButton.nextSibling);
postButton.parentNode.insertBefore(submitProxyButton,previewButton);
previewButton.addEventListener('click', contactPreview, false);
document.getElementById('proxy').wrappedJSObject.onclick = submitProxy;
unsafeWindow.onbeforeunload = unloadPreview;
field.onkeyup = function() {draftFlag = true;};
}
}
}
function unloadPreview(){
if(realSubmit != true && draftWarnings == true){
if(document.getElementById('preview')){
if(url[1] == 'group'){
return 'You have previewed a Post. Changes will be lost.';
} else {
return 'You have previewed a Message. Changes will be lost.';
}
}else{
originalPost = (originalPost) ? originalPost : '';
if(draftFlag == true){
if(field.value != '' && originalPost != field.value){
return msg;
}
}
}
if(editFlag == true){
return 'You have previewed an Edit. Changes will be lost.';
}
}
}
function submitProxy(){
realSubmit = true;
if(url[1] == 'group'){
document.forms.item(document.forms.length-1).submit();
}else{
unsafeWindow.submitForm('sendMessageForm');
}
}
function xpath(query) {
return document.evaluate(query, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
}
// Userscript Auto-Update - http://userscripts.org/scripts/show/22372
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].[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{
if(current_version == latest_version[1] && 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.');
SkipWeeklyUpdateCheck();
}
}
});
}
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));
}
GM_registerMenuCommand('Update - '+script_title, CheckVersion);
CheckForUpdate();