codice:
if (editor_obj.tagName.toLowerCase() == 'textarea') { return; }
var editdoc = editor_obj.contentWindow.document;
editor_focus(editor_obj);
var idx = button_obj.selectedIndex;
var val = (idx != null) ? button_obj[ idx ].value : null;
if (0) {}
else if (cmdID == 'custom1') {
alert("Hello, I am custom button 1!");
}
else if (cmdID == 'custom2') {
var myTitle = "This is a custom title";
var myText = showModalDialog(_editor_url + "popups/custom2.html",
myTitle,
"resizable: yes; help: no; status: no; scroll: no; ");
if (myText) { editor_insertHTML(objname, myText); }
}
else if (cmdID == 'custom3') {
editor_insertHTML(objname, "It's easy to add buttons that insert text!");
}
else if (cmdID == 'FontName' && val) {
editdoc.execCommand(cmdID,0,val);
}
else if (cmdID == 'FontSize' && val) {
editdoc.execCommand(cmdID,0,val);
}
else if (cmdID == 'FontStyle' && val) {
editdoc.execCommand('RemoveFormat');
editdoc.execCommand('FontName',0,'636c6173734e616d6520706c616365686f6c646572');
var fontArray = editdoc.all.tags("FONT");
for (i=0; i<fontArray.length; i++) {
if (fontArray[i].face == '636c6173734e616d6520706c616365686f6c646572') {
fontArray[i].face = "";
fontArray[i].className = val;
fontArray[i].outerHTML = fontArray[i].outerHTML.replace(/face=['"]+/, "");
}
}
button_obj.selectedIndex =0;
}
else if (cmdID == 'ForeColor' || cmdID == 'BackColor') {
var oldcolor = _dec_to_rgb(editdoc.queryCommandValue(cmdID));
var newcolor = showModalDialog(_editor_url + "popups/select_color.html", oldcolor, "resizable: no; help: no; status: no; scroll: no;");
if (newcolor != null) { editdoc.execCommand(cmdID, false, "#"+newcolor); }
}
else {
if (cmdID.toLowerCase() == 'subscript' && editdoc.queryCommandState('superscript')) { editdoc.execCommand('superscript'); }
if (cmdID.toLowerCase() == 'superscript' && editdoc.queryCommandState('subscript')) { editdoc.execCommand('subscript'); }
if (cmdID.toLowerCase() == 'createlink'){
editdoc.execCommand(cmdID,1);
}
else if (cmdID.toLowerCase() == 'insertimage'){
showModalDialog(_editor_url + "popups/insert_image.html", editdoc, "resizable: no; help: no; status: no; scroll: no; ");
}
else if (cmdID.toLowerCase() == 'inserttable'){
showModalDialog(_editor_url + "popups/insert_table.html?"+objname,
window,
"resizable: yes; help: no; status: no; scroll: no; ");
}
else { editdoc.execCommand(cmdID); }
}
editor_event(objname);
}
function editor_event(objname,runDelay) {
var config = document.all[objname].config;
var editor_obj = document.all["_" +objname+ "_editor"];
if (runDelay == null) { runDelay = 0; }
var editdoc;
var editEvent = editor_obj.contentWindow ? editor_obj.contentWindow.event : event;
if (editEvent && editEvent.keyCode) {
var ord = editEvent.keyCode;
var ctrlKey = editEvent.ctrlKey;
var altKey = editEvent.altKey;
var shiftKey = editEvent.shiftKey;
if (ord == 16) { return; }
if (ord == 17) { return; }
if (ord == 18) { return; }
if (ctrlKey && (ord == 122 || ord == 90)) {
return;
}
if ((ctrlKey && (ord == 121 || ord == 89)) ||
ctrlKey && shiftKey && (ord == 122 || ord == 90)) {
return;
}
}
if (runDelay > 0) { return setTimeout(function(){ editor_event(objname); }, runDelay); }
if (this.tooSoon == 1 && runDelay >= 0) { this.queue = 1; return; }
this.tooSoon = 1;
setTimeout(function(){
this.tooSoon = 0;
if (this.queue) { editor_event(objname,-1); };
this.queue = 0;
}, 333);
editor_updateOutput(objname);
editor_updateToolbar(objname);
}
function editor_updateToolbar(objname,action) {
var config = document.all[objname].config;
var editor_obj = document.all["_" +objname+ "_editor"];
if (action == "enable" || action == "disable") {
var tbItems = new Array('FontName','FontSize','FontStyle');
for (var btnName in config.btnList) { tbItems.push(config.btnList[btnName][0]); }
for (var idxN in tbItems) {
var cmdID = tbItems[idxN].toLowerCase();
var tbObj = document.all["_" +objname+ "_" +tbItems[idxN]];
if (cmdID == "htmlmode" || cmdID == "about" || cmdID == "showhelp" || cmdID == "popupeditor") { continue; }
if (tbObj == null) { continue; }
var isBtn = (tbObj.tagName.toLowerCase() == "button") ? true : false;
if (action == "enable") { tbObj.disabled = false; if (isBtn) { tbObj.className = 'btn' }}
if (action == "disable") { tbObj.disabled = true; if (isBtn) { tbObj.className = 'btnNA' }}
}
return;
}
if (editor_obj.tagName.toLowerCase() == 'textarea') { return; } mode
var editdoc = editor_obj.contentWindow.document;
var fontname_obj = document.all["_" +objname+ "_FontName"];
if (fontname_obj) {
var fontname = editdoc.queryCommandValue('FontName');
if (fontname == null) { fontname_obj.value = null; }
else {
var found = 0;
for (i=0; i<fontname_obj.length; i++) {
if (fontname.toLowerCase() == fontname_obj[i].text.toLowerCase()) {
fontname_obj.selectedIndex = i;
found = 1;
}
}
if (found != 1) { fontname_obj.value = null; }
}
}
var fontsize_obj = document.all["_" +objname+ "_FontSize"];
if (fontsize_obj) {
var fontsize = editdoc.queryCommandValue('FontSize');
if (fontsize == null) { fontsize_obj.value = null; }
else {
var found = 0;
for (i=0; i<fontsize_obj.length; i++) {
if (fontsize == fontsize_obj[i].value) { fontsize_obj.selectedIndex = i; found=1; }
}
if (found != 1) { fontsize_obj.value = null; }
}
}
var classname_obj = document.all["_" +objname+ "_FontStyle"];
if (classname_obj) {
var curRange = editdoc.selection.createRange();
var pElement;
if (curRange.length) { pElement = curRange[0]; }
else { pElement = curRange.parentElement(); }
while (pElement && !pElement.className) { pElement = pElement.parentElement; }
var thisClass = pElement ? pElement.className.toLowerCase() : "";
if (!thisClass && classname_obj.value) { classname_obj.value = null; }
else {
var found = 0;
for (i=0; i<classname_obj.length; i++) {
if (thisClass == classname_obj[i].value.toLowerCase()) {
classname_obj.selectedIndex = i;
found=1;
}
}
if (found != 1) { classname_obj.value = null; }
}
}
var IDList = Array('Bold','Italic','Underline','StrikeThrough','SubScript','SuperScript','JustifyLeft','JustifyCenter','JustifyRight','InsertOrderedList','InsertUnorderedList');
for (i=0; i<IDList.length; i++) {
var btnObj = document.all["_" +objname+ "_" +IDList[i]];
if (btnObj == null) { continue; }
var cmdActive = editdoc.queryCommandState( IDList[i] );
if (!cmdActive) {
if (btnObj.className != 'btn') { btnObj.className = 'btn'; }
if (btnObj.disabled != false) { btnObj.disabled = false; }
} else if (cmdActive) {
if (btnObj.className != 'btnDown') { btnObj.className = 'btnDown'; }
if (btnObj.disabled != false) { btnObj.disabled = false; }
}
}
}
function editor_updateOutput(objname) {
var config = document.all[objname].config;
var editor_obj = document.all["_" +objname+ "_editor"];
var editEvent = editor_obj.contentWindow ? editor_obj.contentWindow.event : event;
var isTextarea = (editor_obj.tagName.toLowerCase() == 'textarea');
var editdoc = isTextarea ? null : editor_obj.contentWindow.document;
var contents;
if (isTextarea) { contents = editor_obj.value; }
else { contents = editdoc.body.innerHTML; }
if (config.lastUpdateOutput && config.lastUpdateOutput == contents) { return; }
else { config.lastUpdateOutput = contents; }
document.all[objname].value = contents;
}
function editor_filterOutput(objname) {
editor_updateOutput(objname);
var contents = document.all[objname].value;
var config = document.all[objname].config;
if (contents.toLowerCase() == '
</p>') { contents = ""; }
var filterTag = function(tagBody,tagName,tagAttr) {
tagName = tagName.toLowerCase();
var closingTag = (tagBody.match(/^<\//)) ? true : false;
if (tagName == 'img') { tagBody = tagBody.replace(/(src\s*=\s*.)[^*]*(\*\*\*)/, "$1$2"); }
if (tagName == 'a') { tagBody = tagBody.replace(/(href\s*=\s*.)[^*]*(\*\*\*)/, "$1$2"); }
return tagBody;
};
RegExp.lastIndex = 0;
var matchTag = /<\/?(\w+)((?:[^'">]*|'[^']*'|"[^"]*")*)>/g;
contents = contents.replace(matchTag, filterTag);
if (config.replaceNextlines) {
contents = contents.replace(/\r\n/g, ' ');
contents = contents.replace(/\n/g, ' ');
contents = contents.replace(/\r/g, ' ');
}
document.all[objname].value = contents;
}
/* ---------------------------------------------------------------------- *\
Function : editor_setmode
Description : change mode between WYSIWYG and HTML editor
Usage : editor_setmode(objname, mode);
Arguments : objname - button id string with editor and action name
mode - init, textedit, or wysiwyg
\* ---------------------------------------------------------------------- */
function editor_setmode(objname, mode) {
var config = document.all[objname].config;
var editor_obj = document.all["_" +objname + "_editor"];
// wait until document is fully loaded
if (document.readyState != 'complete') {
setTimeout(function() { editor_setmode(objname,mode) }, 25);
return;
}
// define different editors
var TextEdit = '<textarea ID="_' +objname + '_editor" style="width:' +editor_obj.style.width+ '; height:' +editor_obj.style.height+ '; margin-top: -1px; margin-bottom: -1px;"></textarea>';
var RichEdit = '<iframe ID="_' +objname+ '_editor" style="width:' +editor_obj.style.width+ '; height:' +editor_obj.style.height+ ';"></iframe>';
// src="' +_editor_url+ 'popups/blank.html"
//
// Switch to TEXTEDIT mode
//
if (mode == "textedit" || editor_obj.tagName.toLowerCase() == 'iframe') {
config.mode = "textedit";
var editdoc = editor_obj.contentWindow.document;
var contents = editdoc.body.createTextRange().htmlText;
editor_obj.outerHTML = TextEdit;
editor_obj = document.all["_" +objname + "_editor"];
editor_obj.value = contents;
editor_event(objname);
editor_updateToolbar(objname, "disable"); // disable toolbar items
// set event handlers
editor_obj.onkeydown = function() { editor_event(objname); }
editor_obj.onkeypress = function() { editor_event(objname); }
editor_obj.onkeyup = function() { editor_event(objname); }
editor_obj.onmouseup = function() { editor_event(objname); }
editor_obj.ondrop = function() { editor_event(objname, 100); } // these events fire before they occur
editor_obj.oncut = function() { editor_event(objname, 100); }
editor_obj.onpaste = function() { editor_event(objname, 100); }
editor_obj.onblur = function() { editor_event(objname, -1); }
editor_updateOutput(objname);
editor_focus(editor_obj);
}
//
// Switch to WYSIWYG mode
//
else {
config.mode = "wysiwyg";
var contents = editor_obj.value;
if (mode == 'init') { contents = document.all[objname].value; } // on init use original textarea content
// create editor
editor_obj.outerHTML = RichEdit;
editor_obj = document.all["_" +objname + "_editor"];
// get iframe document object
// create editor contents (and default styles for editor)
var html = "";
html += '<html><head>\n';
if (config.stylesheet) {
html += '<link href="' +config.stylesheet+ '" rel="stylesheet" type="text/css">\n';
}
html += '<style>\n';
html += 'body {' +config.bodyStyle+ '} \n';
for (var i in config.fontstyles) {
var fontstyle = config.fontstyles[i];
if (fontstyle.classStyle) {
html += '.' +fontstyle.className+ ' {' +fontstyle.classStyle+ '}\n';
}
}
html += '</style>\n'
+ '</head>\n'
+ '<body contenteditable="true" topmargin=1 leftmargin=1'