Html5 text editor with contenteditable=true and execCommand.
<script>
window.addEvent('domready', function(){
function showHTML() {
var myContent = $('edit').get('html');
$('html').set('text',myContent);
}
function doExec(fx, extra) {
document.execCommand(fx, false, extra);
showHTML();
}
// formatBlock elements
$('fb_p').addEvents({'click': function(e){
doExec('formatBlock','<p>');
}});
$('fb_bq').addEvents({'click': function(e){
doExec('formatBlock', '<blockquote>');
}});
$('fb_div').addEvents({'click': function(e){
doExec('formatBlock', '<div>');
}});
$('fb_pre').addEvents({'click': function(e){
doExec('formatBlock', '<pre>');
}});
$('fb_h1').addEvents({'click': function(e){
doExec('formatBlock', '<h1>');
}});
$('fb_h2').addEvents({'click': function(e){
doExec('formatBlock', '<h2>');
}});
$('fb_h3').addEvents({'click': function(e){
doExec('formatBlock', '<h3>');
}});
$('fb_h4').addEvents({'click': function(e){
doExec('formatBlock', '<h4>');
}});
$('fb_h5').addEvents({'click': function(e){
doExec('formatBlock', '<h5>');
}});
$('fb_h6').addEvents({'click': function(e){
doExec('formatBlock', '<h6>');
}});
// images
$('insertimage').addEvents({'click': function(e){
var xtra = prompt('Enter a URL for your image:', 'http://');
doExec('insertimage', xtra);
}});
// lists
$('insertorderedlist').addEvents({'click': function(e){
doExec('insertorderedlist', '');
}});
$('insertunorderedlist').addEvents({'click': function(e){
doExec('insertunorderedlist', '');
}});
// formatting
$('bold').addEvents({'click': function(e){
doExec('bold', '');
}});
$('italic').addEvents({'click': function(e){
doExec('italic', '');
}});
$('underline').addEvents({'click': function(e){
doExec('underline', '');
}});
$('strike').addEvents({'click': function(e){
doExec('strikethrough', '');
}});
$('sub').addEvents({'click': function(e){
doExec('subscript', '');
}});
$('sup').addEvents({'click': function(e){
doExec('superscript', '');
}});
$('inserthorizontalrule').addEvents({'click': function(e){
doExec('inserthorizontalrule', '');
}});
$('removeformat').addEvents({'click': function(e){
doExec('removeformat', '');
}});
// links
$('createlink').addEvents({'click': function(e){
var xtra = prompt('Enter a URL:', 'http://');
doExec('createlink', xtra);
}});
$('unlink').addEvents({'click': function(e){
doExec('unlink', '');
}});
// colors
$('backcolor').addEvents({'click': function(e){
var xtra = prompt('Enter a color hex code:', '#');
doExec('backcolor', xtra);
}});
$('forecolor').addEvents({'click': function(e){
var xtra = prompt('Enter a color hex code:', '#');
doExec('forecolor', xtra);
}});
//alignment
$('center').addEvents({'click': function(e){
doExec('justifycenter', '');
}});
$('left').addEvents({'click': function(e){
doExec('justifyleft', '');
}});
$('right').addEvents({'click': function(e){
doExec('justifyright', '');
}});
$('full').addEvents({'click': function(e){
doExec('justifyfull', '');
}});
// fonts
$('fontname').addEvents({'click': function(e){
var xtra = prompt('Enter a font family name:', '');
doExec('fontname', xtra);
}});
$('fontsize').addEvents({'click': function(e){
var xtra = prompt('Enter a font size (1–7):', '3');
doExec('fontsize', xtra);
}});
// other
$('indent').addEvents({'click': function(e){
doExec('indent', '');
}});
$('outdent').addEvents({'click': function(e){
doExec('outdent', '');
}});
$('undo').addEvents({'click': function(e){
doExec('undo', '');
}});
$('redo').addEvents({'click': function(e){
doExec('redo', '');
}});
$('delete').addEvents({'click': function(e){
if (confirm('Are you sure?'))
doExec('delete', '');
}});
$('selectall').addEvents({'click': function(e){
doExec('selectall', '');
}});
$('inserthtml').addEvents({'click': function(e){
var xtra = prompt('Enter valid HTML:', '');
doExec('inserthtml', xtra);
}});
});
</script>