Hotmail rich composer

By Jasper de Vries Last update Jun 19, 2005 — Installed 4,817 times. Daily Installs: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0
// ==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>&nbsp;</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>';
}