// ==UserScript==
// @name Shacknews Comment Preview Display
// @namespace http://www.thomwetzel.com/greasemonkey/
// @description Displays what your comment preview will look like
// @include http://*.shacknews.com/ja.zz?*
// @include http://shacknews.com/ja.zz?*
// ==/UserScript==
/*
-----------------------------------------------
Shacknews Comment Preview Display
Author: Thom Wetzel
-----------------------------------------------
This script will add a line under the post text box that
shows what your post's preview will look like.
In addition to the post preview, this script also adds
CTRL+ENTER support for Firefox users.
-----------------------------------------------
If you like this script, buy me shiny things!!!
Amazon Wishlist: http://amazon.com/gp/registry/1YRBQ22VGN9PR
These things don't write themselves you know. ;)
-----------------------------------------------
REVISIONS:
2005.09.23
Updated for Greasemonkey 0.6.x compatibility
*/
(function() {
// don't run the script from the dthread iframe
if (window.name == 'bufferFrame')
return;
// grab start time of script
var benchmarkTimer = null;
var scriptStartTime = getTime();
function getTime() {
// Author: ThomW
benchmarkTimer = new Date();
return benchmarkTimer.getTime();
}
// variables used throughout this script
var relparent = document.getElementById('relparent');
var frmbody = document.getElementById('frm_body');
var username = document.getElementById('username').value;
var str = '';
// add the preview box to the page
var divPrevBox = document.createElement('div');
divPrevBox.setAttribute('style', 'position: absolute; left: 83px; top: 229px; width: 500px; border: 1px solid #778888; line-height: 1.25em; height:1.5em; display: block; background-color: #333333;');
divPrevBox.setAttribute('id', 'prevBox');
var frmsubmit = document.getElementById('frm_submit');
frmsubmit.parentNode.parentNode.insertBefore(divPrevBox, frmsubmit.parentNode);
// move the submit button down to make room for the comment preview bar
frmsubmit.style.top = '250px';
// fixed doFormKeyPress()
//
frmbody.addEventListener('keypress', function() {
var event = arguments[0];
var code = (event) ? event.keyCode : window.event.keyCode;
var ctrl = (event) ? event.ctrlKey : window.event.ctrlKey;
if (((code == 10) || (code == 13)) && (ctrl == true)) {
document.forms['postform'].submit();
return false;
}
// return true!
return true;
}, true);
// this is blatantly ripped from the javascript that runs the alt-post form
function doPreview(s)
{
s = String(s);
s = s.replace( /\&/g, "&" );
s = s.replace( //g, ">" );
s = s.replace( /q\[/g, "" );
s = s.replace( /\]q/g, "" );
s = s.replace( /r\{/g, "" );
s = s.replace( /\}r/g, "" );
s = s.replace( /y\{/g, "" );
s = s.replace( /\}y/g, "" );
s = s.replace( /g\{/g, "" );
s = s.replace( /\}g/g, "" );
s = s.replace( /b\{/g, "" );
s = s.replace( /\}b/g, "" );
s = s.replace( /o\[/g, "" );
s = s.replace( /\]o/g, "" );
s = s.replace( /\*\[/g, "" );
s = s.replace( /\]\*/g, "" );
s = s.replace( /\/\[/g, "" );
s = s.replace( /\]\//g, "" );
s = s.replace( /s\[/g, "" );
s = s.replace( /\]s/g, "" );
s = s.replace( /-\[/g, "" );
s = s.replace( /\]-/g, "" );
s = s.replace( /_\[/g, "" );
s = s.replace( /\]_/g, "" );
s = s.replace( /e\[/g, "" );
s = s.replace( /\]e/g, "" );
s = s.replace( /\n/g, " " );
s = s.replace( /\"/g, """ );
return s;
}
function stripHtml(str)
{
var regExp=/<\S[^>]*>/g;
return String(str).replace(regExp, '');
}
// install onchange handler to update the post preview
frmbody.addEventListener('keyup', function() {
// display post preview
if (!String(relparent.value).length)
str = "NOT A CHILD POST";
else {
// convert tags to html then strip them to try and preserve counts
str = stripHtml(doPreview(frmbody.value));
if (str.length > 60)
str = str.substr(0, 60) + '...';
str = '#' + relparent.value + ', ' + str + ' : ' + username + ' (#xxx)';
}
divPrevBox.innerHTML = str;
}, true);
// log execution time
GM_log((getTime() - scriptStartTime) + 'ms');
})();