// ==UserScript==
// @name Hotmail rich composer
// @namespace none
// @description v0.1.2, Replaces the standard composer with a rich composer
// @include http://*.hotmail.msn.com/cgi-bin/compose*
// ==/UserScript==
/*
Author: Jasper de Vries, jepsar@gmail.com
Date: 2006-01-04
*/
// Get plain textarea
var textarea = document.getElementsByTagName('textarea')[0];
if (textarea) {
// Set style info
GM_addStyle('.buttons { margin-right: -2px; padding: 2px; text-align: left; background: #A0C6E5; }');
GM_addStyle('.buttons a { float: right }');
GM_addStyle('.buttons img { background: #fff; cursor: pointer; margin-right: 1px; border: 1px solid #A5ACB2; vertical-align: bottom }');
GM_addStyle('.buttons .sep { margin-left: 5px; }');
GM_addStyle('#editor { width: 100%; height: 250px; border: 1px solid #A5ACB2 }');
// Add editor frame
var iframe = document.createElement('iframe');
iframe.setAttribute('id', 'editor');
iframe.setAttribute('name', 'editor');
textarea.parentNode.insertBefore(iframe, textarea);
// 'Hide' plain editor
textarea.setAttribute('style', 'position: absolute; left: -9999px');
// Add formatting tools
var buttons = document.createElement('div');
buttons.className = 'buttons';
buttons.innerHTML += (
'<a href=http://browservulsel.blogspot.com/2005/06/hotmail-rich-composer-user-script.html target=_blank>About</a>'
+'<select id=formatblock><option value=p>Normal</option><option value=p>Paragraph</option><option value=h1>Heading 1</option><option value=h2>Heading 2</option><option value=h3>Heading 3</option><option value=h4>Heading 4</option><option value=h5>Heading 5</option><option value=h6>Heading 6</option><option value=address>Address</option><option value=pre>Formatted</option></select>'
+'<span class=sep></span>'
+'<select id=fontname><option value=Font>Font</option><option value=Arial>Arial</option><option value="Comic Sans MS">Comic Sans MS</option><option value=Courier>Courier</option><option value=Georgia>Georgia</option><option value="Times New Roman">Times New Roman</option><option value="Trebuchet MS">Trebuchet MS</option><option value=Verdana>Verdana</option></select>'
+'<span class=sep></span>'
+'<select id=fontsize><option value=Size>Size</option><option value=1>1</option><option value=2>2</option><option value=3>3</option><option value=4>4</option><option value=5>5</option><option value=6>6</option><option value=7>7</option></select>'
+'<span class=sep></span>'
+'<img id=btn_bold src=data:image/gif;base64,R0lGODlhFQAUAIABAAAAAP///yH5BAEAAAEALAAAAAAVABQAAAIkjI+py+0Po1Sg2iqt0ZDz52HdJY7AVjrhaaKsSqbTTNf2jR8FADs=>'
+'<img id=btn_italic src=data:image/gif;base64,R0lGODlhFQAUAJECAICAgAAAAP///wAAACH5BAEAAAIALAAAAAAVABQAAAIglI+py+0Po3Sh1mkqwAJcrnFewAkhNpanZFnlC8fyDBUAOw==>'
+'<img id=btn_underline src=data:image/gif;base64,R0lGODlhFQAUAJECAICAgAAAAP///wAAACH5BAEAAAIALAAAAAAVABQAAAIplI+py+0Po1ShBmEvrIdHj2mbCD5g6ZyiSa5pAAgA+lrTjWQ6zvf+XQAAOw==>'
+'<span class=sep></span>'
+'<img id=btn_justifyleft src=data:image/gif;base64,R0lGODlhFQAUAIABAAAAAP///yH5BAEAAAEALAAAAAAVABQAAAIfjI+py+0PGZi01oiDtbnrDXoPSIkYuZkNCqjuC8dIAQA7>'
+'<img id=btn_justifycenter src=data:image/gif;base64,R0lGODlhFQAUAIABAAAAAP///yH5BAEAAAEALAAAAAAVABQAAAIejI+py+0PGZi01oiPtTnvD3QYOIkRyZkPqrbuCy8FADs=>'
+'<img id=btn_justifyright src=data:image/gif;base64,R0lGODlhFQAUAIABAAAAAP///yH5BAEAAAEALAAAAAAVABQAAAIejI+py+0PGZi01oiTtTnuD3QdOIkPyZkeqbbuCycFADs=>'
+'<span class=sep></span>'
+'<img id=btn_insertorderedlist src=data:image/gif;base64,R0lGODlhFQAUAJECAAAAgAAAAP///wAAACH5BAEAAAIALAAAAAAVABQAAAImlI+py+0PHgPRhIvxlItWDjpUqFTZuZGGp7YI235n1nzh6Oa6WwAAOw==>'
+'<img id=btn_insertunorderedlist src=data:image/gif;base64,R0lGODlhFQAUAJECAAAAgAAAAP///wAAACH5BAEAAAIALAAAAAAVABQAAAIklI+py+0O4lsRmIBzpnL6DyZVaIyChnIWybZiF5qoprr2jX8FADs=>'
+'<span class=sep></span>'
+'<img id=btn_outdent src=data:image/gif;base64,R0lGODlhFQAUAJECAAAAgAAAAP///wAAACH5BAEAAAIALAAAAAAVABQAAAIrlI+py63hojyhQovr3AKgjCmAR4EaMqacMX6ZQxrgyoXmSTc2lPeyDwxGCgA7>'
+'<img id=btn_indent src=data:image/gif;base64,R0lGODlhFQAUAJECAAAAgAAAAP///wAAACH5BAEAAAIALAAAAAAVABQAAAIrlI+py63hojyhQovr3AKgjC2AZ4BWMqbcMVKZQ5bvuoWmRjs2lPelDwxGCgA7>'
);
iframe.parentNode.insertBefore(buttons, iframe);
// Add listeners
document.getElementById('formatblock').addEventListener('change', selectChange, false);
document.getElementById('fontname').addEventListener('change', selectChange, false);
document.getElementById('fontsize').addEventListener('change', selectChange, false);
document.getElementById('btn_bold').addEventListener('click', buttonClick, false);
document.getElementById('btn_italic').addEventListener('click', buttonClick, false);
document.getElementById('btn_underline').addEventListener('click', buttonClick, false);
document.getElementById('btn_justifyleft').addEventListener('click', buttonClick, false);
document.getElementById('btn_justifycenter').addEventListener('click', buttonClick, false);
document.getElementById('btn_justifyright').addEventListener('click', buttonClick, false);
document.getElementById('btn_insertorderedlist').addEventListener('click', buttonClick, false);
document.getElementById('btn_insertunorderedlist').addEventListener('click', buttonClick, false);
document.getElementById('btn_outdent').addEventListener('click', buttonClick, false);
document.getElementById('btn_indent').addEventListener('click', buttonClick, false);
// Start editor
with (unsafeWindow.editor.document) {
open();
write('<html><body style="background: #fff">');
if (textarea.value == '') {
write('<p> </p>');
}
else {
write(textarea.value.replace(/^(\n|\s)*/, '').replace(/(\n|\s)*$/, '').replace(/\n/g, '<br>'));
}
write('</body></html>');
close();
designMode = 'on';
}
// Alter send td and link
document.getElementById('HMTB').getElementsByTagName('a')[0].removeAttribute('onclick');
var btns = document.getElementById('HMTB').getElementsByTagName('td');
btns[3].setAttribute('onclick', 'setTimeout(function(){'+ btns[3].getAttribute('onclick') +'}, 100)');
btns[3].addEventListener('click', textareaUpdate, false);
// Alter draft td
btns[5].setAttribute('onclick', 'setTimeout(function(){'+ btns[5].getAttribute('onclick') +'}, 100)');
btns[5].addEventListener('click', textareaUpdate, false);
}
// Formatting functions
function buttonClick(e) {
unsafeWindow.editor.document.execCommand(e.target.id.replace('btn_',''), false, null);
}
function selectChange(e) {
if (e.target.selectedIndex != 0) {
var sVal = e.target.options[e.target.selectedIndex].value;
if (e.target.id == 'formatblock') sVal = '<'+ sVal +'>';
unsafeWindow.editor.document.execCommand(e.target.id, false, sVal);
e.target.selectedIndex = 0;
}
unsafeWindow.editor.focus();
}
// Update hotmail textarea
function textareaUpdate() {
textarea.value = unsafeWindow.editor.document.body.innerHTML;
textarea.value = textarea.value.replace(/<\/?html>/, '');
textarea.value = '<html>'+ textarea.value +'<hr><p>This e-mail was composed using <a href="http://www.mozilla.com/firefox/">Firefox</a> and the <a href="http://browservulsel.blogspot.com/2005/06/hotmail-rich-composer-user-script.html">Hotmail rich composer</a></p></html>';
}