Upgraded HTML Area rich editor to version 2.0.3.
This commit is contained in:
parent
f738a3051a
commit
974a7a302e
7 changed files with 1015 additions and 825 deletions
|
|
@ -1,9 +1,9 @@
|
||||||
//
|
//
|
||||||
// htmlArea v2.00 - Copyright (c) 2002 interactivetools.com, inc.
|
// htmlArea v2.02 - Copyright (c) 2002 interactivetools.com, inc.
|
||||||
|
// This copyright notice MUST stay intact for use (see license.txt).
|
||||||
|
//
|
||||||
// A free WYSIWYG editor replacement for <textarea> fields.
|
// A free WYSIWYG editor replacement for <textarea> fields.
|
||||||
//
|
// For full source code and docs, visit http://www.interactivetools.com/
|
||||||
// For more information visit:
|
|
||||||
// http://www.interactivetools.com/products/htmlarea/
|
|
||||||
//
|
//
|
||||||
|
|
||||||
// write out styles for UI buttons
|
// write out styles for UI buttons
|
||||||
|
|
@ -26,13 +26,17 @@ document.write('</style>\n');
|
||||||
|
|
||||||
function editor_defaultConfig(objname) {
|
function editor_defaultConfig(objname) {
|
||||||
|
|
||||||
this.version = "2.0"
|
this.version = "2.02"
|
||||||
|
|
||||||
this.width = "auto";
|
this.width = "auto";
|
||||||
this.height = "auto";
|
this.height = "auto";
|
||||||
this.bodyStyle = 'background-color: #FFFFFF; font-family: "Verdana"; font-size: x-small;';
|
this.bodyStyle = 'background-color: #FFFFFF; font-family: "Verdana"; font-size: x-small;';
|
||||||
this.imgURL = _editor_url + 'images/';
|
this.imgURL = _editor_url + 'images/';
|
||||||
this.debug = 0;
|
this.debug = 0;
|
||||||
|
|
||||||
|
this.replaceNextlines = 0; // replace nextlines from spaces (on output)
|
||||||
|
this.plaintextInput = 0; // replace nextlines with breaks (on input)
|
||||||
|
|
||||||
this.toolbar = [
|
this.toolbar = [
|
||||||
['fontname'],
|
['fontname'],
|
||||||
['fontsize'],
|
['fontsize'],
|
||||||
|
|
@ -44,7 +48,8 @@ this.toolbar = [
|
||||||
['OrderedList','UnOrderedList','Outdent','Indent','separator'],
|
['OrderedList','UnOrderedList','Outdent','Indent','separator'],
|
||||||
['forecolor','backcolor','separator'],
|
['forecolor','backcolor','separator'],
|
||||||
['HorizontalRule','Createlink','InsertImage','InsertTable','htmlmode','separator'],
|
['HorizontalRule','Createlink','InsertImage','InsertTable','htmlmode','separator'],
|
||||||
['Macros','separator'],
|
['Macros','separator'],
|
||||||
|
|
||||||
// ['custom1','custom2','custom3','separator'],
|
// ['custom1','custom2','custom3','separator'],
|
||||||
['popupeditor','about']];
|
['popupeditor','about']];
|
||||||
|
|
||||||
|
|
@ -100,11 +105,10 @@ this.btnList = {
|
||||||
"htmlmode": ['HtmlMode', 'View HTML Source', 'editor_setmode(\''+objname+'\')', 'ed_html.gif'],
|
"htmlmode": ['HtmlMode', 'View HTML Source', 'editor_setmode(\''+objname+'\')', 'ed_html.gif'],
|
||||||
"popupeditor": ['popupeditor', 'Enlarge Editor', 'editor_action(this.id)', 'fullscreen_maximize.gif'],
|
"popupeditor": ['popupeditor', 'Enlarge Editor', 'editor_action(this.id)', 'fullscreen_maximize.gif'],
|
||||||
"about": ['about', 'About this editor', 'editor_about(\''+objname+'\')', 'ed_about.gif'],
|
"about": ['about', 'About this editor', 'editor_about(\''+objname+'\')', 'ed_about.gif'],
|
||||||
|
|
||||||
// Add custom buttons here:
|
// Add custom buttons here:
|
||||||
"custom1": ['custom1', 'Purpose of button 1', 'editor_action(this.id)', 'ed_custom.gif'],
|
"custom1": ['custom1', 'Purpose of button 1', 'editor_action(this.id)', 'ed_custom.gif'],
|
||||||
"custom2": ['custom2', 'Purpose of button 2', 'editor_action(this.id)', 'ed_custom.gif'],
|
"custom2": ['custom2', 'Purpose of button 2', 'editor_action(this.id)', 'ed_custom.gif'],
|
||||||
"macros": ['Macros', 'Insert a WebGUI Macro','editor_action(this.id)', 'macro.gif'],
|
"macros": ['Macros','Insert a WebGUI Macro','editor_action(this.id)','macro.gif'],
|
||||||
"custom3": ['custom3', 'Purpose of button 3', 'editor_action(this.id)', 'ed_custom.gif'],
|
"custom3": ['custom3', 'Purpose of button 3', 'editor_action(this.id)', 'ed_custom.gif'],
|
||||||
// end: custom buttons
|
// end: custom buttons
|
||||||
|
|
||||||
|
|
@ -125,21 +129,12 @@ this.btnList = {
|
||||||
|
|
||||||
function editor_generate(objname,userConfig) {
|
function editor_generate(objname,userConfig) {
|
||||||
|
|
||||||
// Check for IE 5.5+ on Windows
|
|
||||||
var Agent, VInfo, MSIE, Ver, Win32, Opera;
|
|
||||||
Agent = navigator.userAgent;
|
|
||||||
VInfo = Array(); // version info
|
|
||||||
VInfo = Agent.split(";")
|
|
||||||
MSIE = Agent.indexOf('MSIE') > 0;
|
|
||||||
Ver = VInfo[1].substr(6,3);
|
|
||||||
Win32 = Agent.indexOf('Windows') > 0 && Agent.indexOf('Mac') < 0 && Agent.indexOf('Windows CE') < 0;
|
|
||||||
Opera = Agent.indexOf('Opera') > -1;
|
|
||||||
if (!MSIE || Opera || Ver < 5.5 || !Win32) { return; }
|
|
||||||
|
|
||||||
// Default Settings
|
// Default Settings
|
||||||
var config = new editor_defaultConfig(objname);
|
var config = new editor_defaultConfig(objname);
|
||||||
for (var thisName in config) {
|
if (userConfig) {
|
||||||
if (userConfig && userConfig[thisName]) { config[thisName] = userConfig[thisName]; }
|
for (var thisName in userConfig) {
|
||||||
|
if (userConfig[thisName]) { config[thisName] = userConfig[thisName]; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
document.all[objname].config = config; // store config settings
|
document.all[objname].config = config; // store config settings
|
||||||
|
|
||||||
|
|
@ -218,21 +213,17 @@ function editor_generate(objname,userConfig) {
|
||||||
var btnObj = config.btnList[btnName];
|
var btnObj = config.btnList[btnName];
|
||||||
if (btnName == 'linebreak') { alert("htmlArea error: 'linebreak' must be in a subgroup by itself, not with other buttons.\n\nhtmlArea wysiwyg editor not created."); return; }
|
if (btnName == 'linebreak') { alert("htmlArea error: 'linebreak' must be in a subgroup by itself, not with other buttons.\n\nhtmlArea wysiwyg editor not created."); return; }
|
||||||
if (!btnObj) { alert("htmlArea error: button '" +btnName+ "' not found in button list when creating the wysiwyg editor for '"+objname+"'.\nPlease make sure you entered the button name correctly.\n\nhtmlArea wysiwyg editor not created."); return; }
|
if (!btnObj) { alert("htmlArea error: button '" +btnName+ "' not found in button list when creating the wysiwyg editor for '"+objname+"'.\nPlease make sure you entered the button name correctly.\n\nhtmlArea wysiwyg editor not created."); return; }
|
||||||
if (btnName == "about") { aboutEditor = 1; }
|
|
||||||
var btnCmdID = btnObj[0];
|
var btnCmdID = btnObj[0];
|
||||||
var btnTitle = btnObj[1];
|
var btnTitle = btnObj[1];
|
||||||
var btnOnClick = btnObj[2];
|
var btnOnClick = btnObj[2];
|
||||||
var btnImage = btnObj[3];
|
var btnImage = btnObj[3];
|
||||||
toolbar += '<button title="' +btnTitle+ '" id="_' +objname+ '_' +btnCmdID+ '" class="btn" onClick="' +btnOnClick+ '" onmouseover="if(this.className==\'btn\'){this.className=\'btnOver\'}" onmouseout="if(this.className==\'btnOver\'){this.className=\'btn\'}" unselectable="on"><img src="' +config.imgURL + btnImage+ '" border=0 unselectable="on"></button>';
|
toolbar += '<button title="' +btnTitle+ '" id="_' +objname+ '_' +btnCmdID+ '" class="btn" onClick="' +btnOnClick+ '" onmouseover="if(this.className==\'btn\'){this.className=\'btnOver\'}" onmouseout="if(this.className==\'btnOver\'){this.className=\'btn\'}" unselectable="on"><img src="' +config.imgURL + btnImage+ '" border=0 unselectable="on"></button>';
|
||||||
|
|
||||||
|
|
||||||
} // end of button sub-group
|
} // end of button sub-group
|
||||||
toolbar += tblClose;
|
toolbar += tblClose;
|
||||||
} // end of entire button set
|
} // end of entire button set
|
||||||
|
|
||||||
// Note: we've worked very hard to bring you this editor for free. Please don't remove the 'about this editor' button
|
|
||||||
if (!aboutEditor) { alert("htmlArea error: You must include the 'about' button in the list of editor toolbar buttons.\nIt's required by the license agreement for the wysiwyg editor, please don't remove it.\n\nhtmlArea wysiwyg editor not created."); return; }
|
|
||||||
|
|
||||||
|
|
||||||
// build editor
|
// build editor
|
||||||
|
|
||||||
var editor = '<span id="_editor_toolbar"><table border=0 cellspacing=0 cellpadding=0 bgcolor="buttonface" style="padding: 1 0 0 2" width=' + config.width + ' unselectable="on"><tr><td>\n'
|
var editor = '<span id="_editor_toolbar"><table border=0 cellspacing=0 cellpadding=0 bgcolor="buttonface" style="padding: 1 0 0 2" width=' + config.width + ' unselectable="on"><tr><td>\n'
|
||||||
|
|
@ -246,6 +237,16 @@ function editor_generate(objname,userConfig) {
|
||||||
|
|
||||||
// hide original textarea and insert htmlarea after it
|
// hide original textarea and insert htmlarea after it
|
||||||
if (!config.debug) { document.all[objname].style.display = "none"; }
|
if (!config.debug) { document.all[objname].style.display = "none"; }
|
||||||
|
|
||||||
|
if (config.plaintextInput) { // replace nextlines with breaks
|
||||||
|
var contents = document.all[objname].value;
|
||||||
|
contents = contents.replace(/\r\n/g, '<br>');
|
||||||
|
contents = contents.replace(/\n/g, '<br>');
|
||||||
|
contents = contents.replace(/\r/g, '<br>');
|
||||||
|
document.all[objname].value = contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
// insert wysiwyg
|
||||||
document.all[objname].insertAdjacentHTML('afterEnd', editor)
|
document.all[objname].insertAdjacentHTML('afterEnd', editor)
|
||||||
|
|
||||||
// convert htmlarea from textarea to wysiwyg editor
|
// convert htmlarea from textarea to wysiwyg editor
|
||||||
|
|
@ -257,6 +258,8 @@ function editor_generate(objname,userConfig) {
|
||||||
if (!r) { alert("Error attaching event to form!"); }
|
if (!r) { alert("Error attaching event to form!"); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- *\
|
/* ---------------------------------------------------------------------- *\
|
||||||
|
|
@ -283,6 +286,14 @@ function editor_action(button_id) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// popup editor
|
||||||
|
if (cmdID == 'popupeditor') {
|
||||||
|
window.open(_editor_url + "popups/fullscreen.html?"+objname,
|
||||||
|
'FullScreen',
|
||||||
|
'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=640,height=480');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// check editor mode (don't perform actions in textedit mode)
|
// check editor mode (don't perform actions in textedit mode)
|
||||||
if (editor_obj.tagName.toLowerCase() == 'textarea') { return; }
|
if (editor_obj.tagName.toLowerCase() == 'textarea') { return; }
|
||||||
|
|
||||||
|
|
@ -306,7 +317,7 @@ function editor_action(button_id) {
|
||||||
|
|
||||||
// Custom2
|
// Custom2
|
||||||
else if (cmdID == 'Macros') { // insert some text from a popup window
|
else if (cmdID == 'Macros') { // insert some text from a popup window
|
||||||
var myTitle = "Insert WebGUI macro";
|
var myTitle = "Insert WebGUI Macro";
|
||||||
var myText = showModalDialog(_editor_url + "popups/macros.html",
|
var myText = showModalDialog(_editor_url + "popups/macros.html",
|
||||||
myTitle, // str or obj specified here can be read from dialog as "window.dialogArguments"
|
myTitle, // str or obj specified here can be read from dialog as "window.dialogArguments"
|
||||||
"resizable: yes; help: no; status: no; scroll: no; ");
|
"resizable: yes; help: no; status: no; scroll: no; ");
|
||||||
|
|
@ -322,11 +333,6 @@ function editor_action(button_id) {
|
||||||
// END OF CUSTOM BUTTONS
|
// END OF CUSTOM BUTTONS
|
||||||
//
|
//
|
||||||
|
|
||||||
// popup editor
|
|
||||||
else if (cmdID == 'popupeditor') {
|
|
||||||
showModalDialog(_editor_url + "popups/fullscreen.html?"+objname, window, "resizable: yes; help: no; status: no; scroll: no; ");
|
|
||||||
}
|
|
||||||
|
|
||||||
// FontName
|
// FontName
|
||||||
else if (cmdID == 'FontName' && val) {
|
else if (cmdID == 'FontName' && val) {
|
||||||
editdoc.execCommand(cmdID,0,val);
|
editdoc.execCommand(cmdID,0,val);
|
||||||
|
|
@ -418,6 +424,14 @@ function editor_event(objname,runDelay) {
|
||||||
if (ord == 17) { return; } // ignore ctrl key by itself
|
if (ord == 17) { return; } // ignore ctrl key by itself
|
||||||
if (ord == 18) { return; } // ignore alt key by itself
|
if (ord == 18) { return; } // ignore alt key by itself
|
||||||
|
|
||||||
|
|
||||||
|
// cancel ENTER key and insert <BR> instead
|
||||||
|
// if (ord == 13 && editEvent.type == 'keypress') {
|
||||||
|
// editEvent.returnValue = false;
|
||||||
|
// editor_insertHTML(objname, "<br>");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
if (ctrlKey && (ord == 122 || ord == 90)) { // catch ctrl-z (UNDO)
|
if (ctrlKey && (ord == 122 || ord == 90)) { // catch ctrl-z (UNDO)
|
||||||
// TODO: Add our own undo/redo functionality
|
// TODO: Add our own undo/redo functionality
|
||||||
// editEvent.cancelBubble = true;
|
// editEvent.cancelBubble = true;
|
||||||
|
|
@ -469,7 +483,7 @@ function editor_updateToolbar(objname,action) {
|
||||||
for (var idxN in tbItems) {
|
for (var idxN in tbItems) {
|
||||||
var cmdID = tbItems[idxN].toLowerCase();
|
var cmdID = tbItems[idxN].toLowerCase();
|
||||||
var tbObj = document.all["_" +objname+ "_" +tbItems[idxN]];
|
var tbObj = document.all["_" +objname+ "_" +tbItems[idxN]];
|
||||||
if (cmdID == "htmlmode" || cmdID == "about" || cmdID == "showhelp") { continue; } // don't change these buttons
|
if (cmdID == "htmlmode" || cmdID == "about" || cmdID == "showhelp" || cmdID == "popupeditor") { continue; } // don't change these buttons
|
||||||
if (tbObj == null) { continue; }
|
if (tbObj == null) { continue; }
|
||||||
var isBtn = (tbObj.tagName.toLowerCase() == "button") ? true : false;
|
var isBtn = (tbObj.tagName.toLowerCase() == "button") ? true : false;
|
||||||
|
|
||||||
|
|
@ -519,8 +533,13 @@ function editor_updateToolbar(objname,action) {
|
||||||
var classname_obj = document.all["_" +objname+ "_FontStyle"];
|
var classname_obj = document.all["_" +objname+ "_FontStyle"];
|
||||||
if (classname_obj) {
|
if (classname_obj) {
|
||||||
var curRange = editdoc.selection.createRange();
|
var curRange = editdoc.selection.createRange();
|
||||||
var pElement = curRange.parentElement();
|
|
||||||
|
// check element and element parents for class names
|
||||||
|
var pElement;
|
||||||
|
if (curRange.length) { pElement = curRange[0]; } // control tange
|
||||||
|
else { pElement = curRange.parentElement(); } // text range
|
||||||
while (pElement && !pElement.className) { pElement = pElement.parentElement; } // keep going up
|
while (pElement && !pElement.className) { pElement = pElement.parentElement; } // keep going up
|
||||||
|
|
||||||
var thisClass = pElement ? pElement.className.toLowerCase() : "";
|
var thisClass = pElement ? pElement.className.toLowerCase() : "";
|
||||||
if (!thisClass && classname_obj.value) { classname_obj.value = null; }
|
if (!thisClass && classname_obj.value) { classname_obj.value = null; }
|
||||||
else {
|
else {
|
||||||
|
|
@ -536,7 +555,7 @@ function editor_updateToolbar(objname,action) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// update button states
|
// update button states
|
||||||
var IDList = Array('Bold','Italic','Underline','JustifyLeft','JustifyCenter','JustifyRight','InsertOrderedList','InsertUnorderedList');
|
var IDList = Array('Bold','Italic','Underline','StrikeThrough','SubScript','SuperScript','JustifyLeft','JustifyCenter','JustifyRight','InsertOrderedList','InsertUnorderedList');
|
||||||
for (i=0; i<IDList.length; i++) {
|
for (i=0; i<IDList.length; i++) {
|
||||||
var btnObj = document.all["_" +objname+ "_" +IDList[i]];
|
var btnObj = document.all["_" +objname+ "_" +IDList[i]];
|
||||||
if (btnObj == null) { continue; }
|
if (btnObj == null) { continue; }
|
||||||
|
|
@ -584,11 +603,17 @@ function editor_updateOutput(objname) {
|
||||||
\* ---------------------------------------------------------------------- */
|
\* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
function editor_filterOutput(objname) {
|
function editor_filterOutput(objname) {
|
||||||
|
editor_updateOutput(objname);
|
||||||
var contents = document.all[objname].value;
|
var contents = document.all[objname].value;
|
||||||
|
var config = document.all[objname].config;
|
||||||
|
|
||||||
|
// ignore blank contents
|
||||||
|
if (contents.toLowerCase() == '<p> </p>') { contents = ""; }
|
||||||
|
|
||||||
// filter tag - this code is run for each HTML tag matched
|
// filter tag - this code is run for each HTML tag matched
|
||||||
var filterTag = function(tagBody,tagName,tagAttr) {
|
var filterTag = function(tagBody,tagName,tagAttr) {
|
||||||
tagName = tagName.toLowerCase();
|
tagName = tagName.toLowerCase();
|
||||||
|
var closingTag = (tagBody.match(/^<\//)) ? true : false;
|
||||||
|
|
||||||
// fix placeholder URLS - remove absolute paths that IE adds
|
// fix placeholder URLS - remove absolute paths that IE adds
|
||||||
if (tagName == 'img') { tagBody = tagBody.replace(/(src\s*=\s*.)[^*]*(\*\*\*)/, "$1$2"); }
|
if (tagName == 'img') { tagBody = tagBody.replace(/(src\s*=\s*.)[^*]*(\*\*\*)/, "$1$2"); }
|
||||||
|
|
@ -596,18 +621,36 @@ function editor_filterOutput(objname) {
|
||||||
|
|
||||||
// add additional tag filtering here
|
// add additional tag filtering here
|
||||||
|
|
||||||
|
// convert to vbCode
|
||||||
|
// if (tagName == 'b' || tagName == 'strong') {
|
||||||
|
// if (closingTag) { tagBody = "[/b]"; } else { tagBody = "[b]"; }
|
||||||
|
// }
|
||||||
|
// else if (tagName == 'i' || tagName == 'em') {
|
||||||
|
// if (closingTag) { tagBody = "[/i]"; } else { tagBody = "[i]"; }
|
||||||
|
// }
|
||||||
|
// else if (tagName == 'u') {
|
||||||
|
// if (closingTag) { tagBody = "[/u]"; } else { tagBody = "[u]"; }
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// tagBody = ""; // disallow all other tags!
|
||||||
|
// }
|
||||||
|
|
||||||
return tagBody;
|
return tagBody;
|
||||||
};
|
};
|
||||||
|
|
||||||
// match tags and call filterTag
|
// match tags and call filterTag
|
||||||
RegExp.lastIndex = 0;
|
RegExp.lastIndex = 0;
|
||||||
var matchTag = /<\/?(\w+)((?:[^'">]*|'[^']*'|"[^"]*")*)>/g; // this will match tags, but still doesn't handle container tags (textarea, comments, etc)
|
var matchTag = /<\/?(\w+)((?:[^'">]*|'[^']*'|"[^"]*")*)>/g; // this will match tags, but still doesn't handle container tags (textarea, comments, etc)
|
||||||
|
|
||||||
contents = contents.replace(matchTag, filterTag);
|
contents = contents.replace(matchTag, filterTag);
|
||||||
|
|
||||||
|
// remove nextlines from output (if requested)
|
||||||
|
if (config.replaceNextlines) {
|
||||||
|
contents = contents.replace(/\r\n/g, ' ');
|
||||||
|
contents = contents.replace(/\n/g, ' ');
|
||||||
|
contents = contents.replace(/\r/g, ' ');
|
||||||
|
}
|
||||||
|
|
||||||
// update output with filtered content
|
// update output with filtered content
|
||||||
document.all[objname].value = contents;
|
document.all[objname].value = contents;
|
||||||
|
|
||||||
|
|
@ -635,11 +678,14 @@ function editor_setmode(objname, mode) {
|
||||||
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 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>';
|
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
|
// Switch to TEXTEDIT mode
|
||||||
//
|
//
|
||||||
|
|
||||||
if (mode == "textedit" || editor_obj.tagName.toLowerCase() == 'iframe') {
|
if (mode == "textedit" || editor_obj.tagName.toLowerCase() == 'iframe') {
|
||||||
|
config.mode = "textedit";
|
||||||
var editdoc = editor_obj.contentWindow.document;
|
var editdoc = editor_obj.contentWindow.document;
|
||||||
var contents = editdoc.body.createTextRange().htmlText;
|
var contents = editdoc.body.createTextRange().htmlText;
|
||||||
editor_obj.outerHTML = TextEdit;
|
editor_obj.outerHTML = TextEdit;
|
||||||
|
|
@ -650,6 +696,7 @@ function editor_setmode(objname, mode) {
|
||||||
editor_updateToolbar(objname, "disable"); // disable toolbar items
|
editor_updateToolbar(objname, "disable"); // disable toolbar items
|
||||||
|
|
||||||
// set event handlers
|
// set event handlers
|
||||||
|
editor_obj.onkeydown = function() { editor_event(objname); }
|
||||||
editor_obj.onkeypress = function() { editor_event(objname); }
|
editor_obj.onkeypress = function() { editor_event(objname); }
|
||||||
editor_obj.onkeyup = function() { editor_event(objname); }
|
editor_obj.onkeyup = function() { editor_event(objname); }
|
||||||
editor_obj.onmouseup = function() { editor_event(objname); }
|
editor_obj.onmouseup = function() { editor_event(objname); }
|
||||||
|
|
@ -667,7 +714,7 @@ function editor_setmode(objname, mode) {
|
||||||
//
|
//
|
||||||
|
|
||||||
else {
|
else {
|
||||||
|
config.mode = "wysiwyg";
|
||||||
var contents = editor_obj.value;
|
var contents = editor_obj.value;
|
||||||
if (mode == 'init') { contents = document.all[objname].value; } // on init use original textarea content
|
if (mode == 'init') { contents = document.all[objname].value; } // on init use original textarea content
|
||||||
|
|
||||||
|
|
@ -704,6 +751,7 @@ function editor_setmode(objname, mode) {
|
||||||
|
|
||||||
// write to editor window
|
// write to editor window
|
||||||
var editdoc = editor_obj.contentWindow.document;
|
var editdoc = editor_obj.contentWindow.document;
|
||||||
|
|
||||||
editdoc.open();
|
editdoc.open();
|
||||||
editdoc.write(html);
|
editdoc.write(html);
|
||||||
editdoc.close();
|
editdoc.close();
|
||||||
|
|
@ -714,6 +762,7 @@ function editor_setmode(objname, mode) {
|
||||||
editdoc.objname = objname;
|
editdoc.objname = objname;
|
||||||
|
|
||||||
// set event handlers
|
// set event handlers
|
||||||
|
editdoc.onkeydown = function() { editor_event(objname); }
|
||||||
editdoc.onkeypress = function() { editor_event(objname); }
|
editdoc.onkeypress = function() { editor_event(objname); }
|
||||||
editdoc.onkeyup = function() { editor_event(objname); }
|
editdoc.onkeyup = function() { editor_event(objname); }
|
||||||
editdoc.onmouseup = function() { editor_event(objname); }
|
editdoc.onmouseup = function() { editor_event(objname); }
|
||||||
|
|
@ -785,10 +834,10 @@ function editor_about(objname) {
|
||||||
function _dec_to_rgb(value) {
|
function _dec_to_rgb(value) {
|
||||||
var hex_string = "";
|
var hex_string = "";
|
||||||
for (var hexpair = 0; hexpair < 3; hexpair++) {
|
for (var hexpair = 0; hexpair < 3; hexpair++) {
|
||||||
var byte = value & 0xFF; // get low byte
|
var myByte = value & 0xFF; // get low byte
|
||||||
value >>= 8; // drop low byte
|
value >>= 8; // drop low byte
|
||||||
var nybble2 = byte & 0x0F; // get low nybble (4 bits)
|
var nybble2 = myByte & 0x0F; // get low nybble (4 bits)
|
||||||
var nybble1 = (byte >> 4) & 0x0F; // get high nybble
|
var nybble1 = (myByte >> 4) & 0x0F; // get high nybble
|
||||||
hex_string += nybble1.toString(16); // convert nybble to hex
|
hex_string += nybble1.toString(16); // convert nybble to hex
|
||||||
hex_string += nybble2.toString(16); // convert nybble to hex
|
hex_string += nybble2.toString(16); // convert nybble to hex
|
||||||
}
|
}
|
||||||
|
|
@ -872,6 +921,48 @@ function editor_insertHTML(objname, str1,str2, reqSel) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- *\
|
||||||
|
Function : editor_getHTML
|
||||||
|
Description : return HTML contents of editor (in either wywisyg or html mode)
|
||||||
|
Usage : var myHTML = editor_getHTML('objname');
|
||||||
|
\* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
function editor_getHTML(objname) {
|
||||||
|
var editor_obj = document.all["_" +objname + "_editor"];
|
||||||
|
var isTextarea = (editor_obj.tagName.toLowerCase() == 'textarea');
|
||||||
|
|
||||||
|
if (isTextarea) { return editor_obj.value; }
|
||||||
|
else { return editor_obj.contentWindow.document.body.innerHTML; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- *\
|
||||||
|
Function : editor_setHTML
|
||||||
|
Description : set HTML contents of editor (in either wywisyg or html mode)
|
||||||
|
Usage : editor_setHTML('objname',"<b>html</b> <u>here</u>");
|
||||||
|
\* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
function editor_setHTML(objname, html) {
|
||||||
|
var editor_obj = document.all["_" +objname + "_editor"];
|
||||||
|
var isTextarea = (editor_obj.tagName.toLowerCase() == 'textarea');
|
||||||
|
|
||||||
|
if (isTextarea) { editor_obj.value = html; }
|
||||||
|
else { editor_obj.contentWindow.document.body.innerHTML = html; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- *\
|
||||||
|
Function : editor_appendHTML
|
||||||
|
Description : append HTML contents to editor (in either wywisyg or html mode)
|
||||||
|
Usage : editor_appendHTML('objname',"<b>html</b> <u>here</u>");
|
||||||
|
\* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
function editor_appendHTML(objname, html) {
|
||||||
|
var editor_obj = document.all["_" +objname + "_editor"];
|
||||||
|
var isTextarea = (editor_obj.tagName.toLowerCase() == 'textarea');
|
||||||
|
|
||||||
|
if (isTextarea) { editor_obj.value += html; }
|
||||||
|
else { editor_obj.contentWindow.document.body.innerHTML += html; }
|
||||||
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------- */
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
function _isMouseOver(obj,event) { // determine if mouse is over object
|
function _isMouseOver(obj,event) { // determine if mouse is over object
|
||||||
|
|
|
||||||
|
|
@ -16,30 +16,39 @@
|
||||||
|
|
||||||
--></style>
|
--></style>
|
||||||
|
|
||||||
<script><!-- // load htmlArea files
|
|
||||||
_editor_url = "./";
|
|
||||||
document.write('<scr'+'ipt src="' +_editor_url+ 'editor.js" language="Javascript1.2"></scr'+'ipt>');
|
<script language="Javascript1.2"><!-- // load htmlarea
|
||||||
//--></script>
|
_editor_url = ""; // URL to htmlarea files
|
||||||
|
var win_ie_ver = parseFloat(navigator.appVersion.split("MSIE")[1]);
|
||||||
|
if (navigator.userAgent.indexOf('Mac') >= 0) { win_ie_ver = 0; }
|
||||||
|
if (navigator.userAgent.indexOf('Windows CE') >= 0) { win_ie_ver = 0; }
|
||||||
|
if (navigator.userAgent.indexOf('Opera') >= 0) { win_ie_ver = 0; }
|
||||||
|
if (win_ie_ver >= 5.5) {
|
||||||
|
document.write('<scr' + 'ipt src="' +_editor_url+ 'editor.js"');
|
||||||
|
document.write(' language="Javascript1.2"></scr' + 'ipt>');
|
||||||
|
} else { document.write('<scr'+'ipt>function editor_generate() { return false; }</scr'+'ipt>'); }
|
||||||
|
// --></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<a name="top"></a>
|
<a name="top"></a>
|
||||||
|
|
||||||
<form>
|
<form method=POST action="">
|
||||||
|
|
||||||
<div align=center>
|
<div align=center>
|
||||||
<span class="headline">htmlArea v2.00</span><br>
|
<span class="headline">htmlArea v2.03</span><br>
|
||||||
<span class="headline2">Turn any <textarea> into a WYSIWYG editor<br><a href="http://www.interactivetools.com/" target="_blank">from your friends at interactivetools.com</a></span>
|
<span class="headline2">A free WYSIWYG editor replacement for <textarea> fields.<br><a href="http://www.interactivetools.com/" target="_blank">from your friends at interactivetools.com</a></span>
|
||||||
<hr>
|
<hr>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- TOC -->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p>Sample textarea follows:</p>
|
<p>Sample textarea follows:</p>
|
||||||
|
|
||||||
<textarea name="yourFieldNameHere" style="width:500; height:150">
|
<textarea name="yourFieldNameHere" style="width:800; height:150">
|
||||||
|
|
||||||
<p>Here is some sample text: <b>bold</b>, <i>italic</i>, <u>underline</u>. </p>
|
<p>Here is some sample text: <b>bold</b>, <i>italic</i>, <u>underline</u>. </p>
|
||||||
<p align=center>Different fonts, sizes and colors (all in bold):</p>
|
<p align=center>Different fonts, sizes and colors (all in bold):</p>
|
||||||
<p><b>
|
<p><b>
|
||||||
|
|
@ -55,20 +64,20 @@ document.write('<scr'+'ipt src="' +_editor_url+ 'editor.js" language="Javascript
|
||||||
</textarea><br>
|
</textarea><br>
|
||||||
|
|
||||||
<b>Example "InsertHTML" links: </b>
|
<b>Example "InsertHTML" links: </b>
|
||||||
<a href="javascript:editor_insertHTML('yourFieldNameHere','<font style=\'background-color: yellow\'>','</font>');">Highlight selected text</a> -
|
<a href="javascript:editor_insertHTML('yourFieldNameHere','<font style=\'background-color: yellow\'>','</font>',1);">Highlight selected text</a> -
|
||||||
<a href="javascript:editor_insertHTML('yourFieldNameHere',':)');">Insert Smiley</a>
|
<a href="javascript:editor_insertHTML('yourFieldNameHere',':)');">Insert Smiley</a>
|
||||||
|
<a href="javascript:alert(editor_getHTML('yourFieldNameHere'));">getHTML</a>
|
||||||
|
<a href="javascript:editor_setHTML('yourFieldNameHere','<b>Hello World</b>!!');">setHTML</a>
|
||||||
|
|
||||||
<script language="javascript1.2" defer>
|
<script language="javascript1.2">
|
||||||
editor_generate('yourFieldNameHere');
|
editor_generate('yourFieldNameHere');
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p><hr>
|
<p><hr>
|
||||||
<p>Another textarea follows: (This one has many more configuration defined in the source code)</p>
|
<p>Another textarea follows: (This one has many more configuration defined in the source code)</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<textarea name="yourFieldNameHere2" style="width:100%; height:200">
|
<textarea name="yourFieldNameHere2" style="width:100%; height:200">
|
||||||
<hr>
|
<hr>
|
||||||
<p>Here is some sample text: <b>bold</b>, <i>italic</i>, <u>underline</u>. </p>
|
<p>Here is some sample text: <b>bold</b>, <i>italic</i>, <u>underline</u>. </p>
|
||||||
|
|
@ -85,7 +94,8 @@ editor_generate('yourFieldNameHere');
|
||||||
<p>Click on <a href="http://www.interactivetools.com/">this link</a> and then on the link button to the details ... OR ... select some text and click link to create a <b>new</b> link.</p>
|
<p>Click on <a href="http://www.interactivetools.com/">this link</a> and then on the link button to the details ... OR ... select some text and click link to create a <b>new</b> link.</p>
|
||||||
</textarea><br>
|
</textarea><br>
|
||||||
|
|
||||||
<script language="javascript1.2" defer>
|
|
||||||
|
<script language="javascript1.2">
|
||||||
var config = new Object(); // create new config object
|
var config = new Object(); // create new config object
|
||||||
|
|
||||||
config.width = "90%";
|
config.width = "90%";
|
||||||
|
|
@ -99,13 +109,12 @@ config.toolbar = [
|
||||||
['fontname'],
|
['fontname'],
|
||||||
['fontsize'],
|
['fontsize'],
|
||||||
['fontstyle'],
|
['fontstyle'],
|
||||||
// ['linebreak'],
|
['linebreak'],
|
||||||
['bold','italic','underline','separator'],
|
['bold','italic','underline','separator'],
|
||||||
// ['strikethrough','subscript','superscript','separator'],
|
// ['strikethrough','subscript','superscript','separator'],
|
||||||
['justifyleft','justifycenter','justifyright','separator'],
|
['justifyleft','justifycenter','justifyright','separator'],
|
||||||
['OrderedList','UnOrderedList','Outdent','Indent','separator'],
|
['OrderedList','UnOrderedList','Outdent','Indent','separator'],
|
||||||
['forecolor','backcolor','separator'],
|
['forecolor','backcolor','separator'],
|
||||||
['custom1','custom2','custom3','separator'],
|
|
||||||
['HorizontalRule','Createlink','InsertImage','htmlmode','separator'],
|
['HorizontalRule','Createlink','InsertImage','htmlmode','separator'],
|
||||||
['about','help','popupeditor'],
|
['about','help','popupeditor'],
|
||||||
];
|
];
|
||||||
|
|
@ -136,13 +145,16 @@ config.fontstyles = [ // make sure classNames are defined in the page the cont
|
||||||
{ name: "headline", className: "headline", classStyle: "font-family: arial black, arial; font-size: 28px; letter-spacing: -2px;" },
|
{ name: "headline", className: "headline", classStyle: "font-family: arial black, arial; font-size: 28px; letter-spacing: -2px;" },
|
||||||
{ name: "arial red", className: "headline2", classStyle: "font-family: arial black, arial; font-size: 12px; letter-spacing: -2px; color:red" },
|
{ name: "arial red", className: "headline2", classStyle: "font-family: arial black, arial; font-size: 12px; letter-spacing: -2px; color:red" },
|
||||||
{ name: "verdana blue", className: "headline4", classStyle: "font-family: verdana; font-size: 18px; letter-spacing: -2px; color:blue" }
|
{ name: "verdana blue", className: "headline4", classStyle: "font-family: verdana; font-size: 18px; letter-spacing: -2px; color:blue" }
|
||||||
// leave classStyle blank if it's defined in your stylesheet (above), like this:
|
|
||||||
|
// leave classStyle blank if it's defined in config.stylesheet (above), like this:
|
||||||
// { name: "verdana blue", className: "headline4", classStyle: "" }
|
// { name: "verdana blue", className: "headline4", classStyle: "" }
|
||||||
];
|
];
|
||||||
//config.editor_insertHTML = [ { name: "test", "It's easy to add buttons that insert text!" } ];
|
|
||||||
editor_generate('yourFieldNameHere2',config); // field, width, height
|
editor_generate('yourFieldNameHere2',config);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|
@ -1,19 +1,15 @@
|
||||||
<HTML STYLE="width: 450px; height: 285px; ">
|
<HTML STYLE="width: 450px; height: 185px; ">
|
||||||
<HEAD><TITLE>About</TITLE>
|
<HEAD><TITLE>About</TITLE>
|
||||||
<style>
|
<style>
|
||||||
html,body,textarea { font-family: verdana,arial; font-size: 9pt; };
|
html,body,textarea { font-family: verdana,arial; font-size: 9pt; };
|
||||||
</style></HEAD>
|
</style></HEAD>
|
||||||
<BODY style="background: threedface; color: #000000" topmargin=5 leftmargin=12>
|
<BODY style="background: #FFFFFF; color: #000000" topmargin=5 leftmargin=12>
|
||||||
<span style="font-family: arial black, arial; font-size: 28px; letter-spacing: -2px;">htmlArea</span> v2.0 by interactivetools.com<br>
|
<span style="font-family: arial black, arial; font-size: 28px; letter-spacing: -2px;">htmlArea v2.03</span><br>
|
||||||
A free WYSIWYG editor replacement for <textarea> fields.<br>
|
A free WYSIWYG editor replacement for <textarea> fields.<br>
|
||||||
<p><textarea style="width:100%; height:120px" readonly>
|
|
||||||
Copyright (c) 2002 interactivetools.com, inc.
|
<p>For full source code and docs, visit:<br>
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
a) The above copyright notice, this permission notice, and the "About this editor" button that appears as the letter "i" in the editor interface, shall be included in all copies or substantial portions of the Software.
|
|
||||||
b) The "About this editor" button that appears as the letter "i" in the editor interface must always be visible in the editor interface and bring up the original "About" dialog window when clicked.
|
|
||||||
c) The "About" dialog window and its contents, including the link to interactivetools.com can not be amended.
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
</textarea>
|
|
||||||
<p>For more information visit:<br>
|
|
||||||
<a href="http://www.interactivetools.com/products/htmlarea/" target="_blank">http://www.interactivetools.com/products/htmlarea/</a><br><br>
|
<a href="http://www.interactivetools.com/products/htmlarea/" target="_blank">http://www.interactivetools.com/products/htmlarea/</a><br><br>
|
||||||
|
|
||||||
|
<p>Copyright (c) 2002 interactivetools.com, inc. All Rights Reserved.<br>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
<html style="width:600px; Height: 50px;">
|
<html style="width:300px; Height: 60px;">
|
||||||
<head>
|
<head>
|
||||||
<title>Insert WebGUI macro</title>
|
<title>Select Phrase</title>
|
||||||
<script language="javascript">
|
<script language="javascript">
|
||||||
|
|
||||||
function returnSelected(in_values) {
|
var myTitle = window.dialogArguments;
|
||||||
var text = in_values;
|
document.title = myTitle;
|
||||||
|
|
||||||
|
|
||||||
|
function returnSelected() {
|
||||||
|
var idx = document.all.textPulldown.selectedIndex;
|
||||||
|
var text = document.all.textPulldown[idx].text;
|
||||||
|
|
||||||
window.returnValue = text; // set return value
|
window.returnValue = text; // set return value
|
||||||
window.close(); // close dialog
|
window.close(); // close dialog
|
||||||
|
|
@ -13,87 +18,17 @@ function returnSelected(in_values) {
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body bgcolor="#FFFFFF" topmargin=15 leftmargin=0>
|
<body bgcolor="#FFFFFF" topmargin=15 leftmargin=0>
|
||||||
<form name="macros" method=get onSubmit="Set(document.all.ColorHex.value); return false;">
|
|
||||||
|
<form method=get onSubmit="Set(document.all.ColorHex.value); return false;">
|
||||||
<div align=center>
|
<div align=center>
|
||||||
<select name="textPulldown" onchange="returnSelected(this.value)">
|
|
||||||
<option value=''>Menus and navigation...</option>
|
|
||||||
<option value='^FlexMenu;'>FlexMenu</option>
|
|
||||||
<option value='^M;'>Current Menu (Vertical)</option>
|
|
||||||
<option value='^m;'>Current Menu (Horizontal)</option>
|
|
||||||
<option value='^P;'>Previous Menu (Vertical)</option>
|
|
||||||
<option value='^p;'>Previous Menu (Horizontal)</option>
|
|
||||||
<option value='^rootmenu;'>Root Menu (Horizontal)</option>
|
|
||||||
<option value='^S("home",0);'>Specific SubMenu (Vertical)</option>
|
|
||||||
<option value='^s("home");'>Specific SubMenu (Horizontal)</option>
|
|
||||||
<option value='^Synopsis;'>Synopsis Menu</option>
|
|
||||||
<option value='^T;'>Top Level Menu (Vertical)</option>
|
|
||||||
<option value='^t;'>Top Level Menu (Horizontal)</option>
|
|
||||||
<option value='^t;'>Top Level Menu (Horizontal)</option>
|
|
||||||
<option value='^C;'>Crumb Trail</option>
|
|
||||||
<option value='^H;'>Home Link</option>
|
|
||||||
|
|
||||||
|
<select name="textPulldown">
|
||||||
|
<option>The quick brown</option>
|
||||||
|
<option>fox jumps over</option>
|
||||||
|
<option>the lazy dog.</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select onchange="returnSelected(this.value)">
|
<input type="button" value=" Go " onClick="returnSelected()">
|
||||||
<option value=''>SQL...</option>
|
|
||||||
<option value='^FormParam("phoneNumber");'>FormParam</option>
|
|
||||||
<option value='^*(100);'>Random Number</option>
|
|
||||||
<option value='^rownum;'>Row Number</option>
|
|
||||||
<option value='SQL("select count(*) from users", "there are ^0; on this system.");'>SQL</option>
|
|
||||||
<option value='^-;'>Begin/End looping</option>
|
|
||||||
<option value='^0;'>Column 1</option>
|
|
||||||
<option value='^1;'>Column 2</option>
|
|
||||||
<option value='^2;'>Column 3</option>
|
|
||||||
<option value='^3;'>Column 4</option>
|
|
||||||
<option value='^4;'>Column 5</option>
|
|
||||||
<option value='^5;'>Column 6</option>
|
|
||||||
<option value='^6;'>Column 7</option>
|
|
||||||
<option value='^7;'>Column 8</option>
|
|
||||||
<option value='^8;'>Column 9</option>
|
|
||||||
<option value='^9;'>Column 10</option>
|
|
||||||
</select>
|
|
||||||
<select onchange="returnSelected(this.value)">
|
|
||||||
<option value=''>User/Group/Admin...</option>
|
|
||||||
<option value='^a("Account Info");'>My Account Link</option>
|
|
||||||
<option value='^AdminBar;'>AdminBar</option>
|
|
||||||
<option value='^AdminText("You are in admin mode!");'>AdminText</option>
|
|
||||||
<option value='^AdminToggle;'>AdminToggle</option>
|
|
||||||
<option value='^GroupText("Visitors","You need an account to do anything cool on this site!");'>GroupText</option>
|
|
||||||
<option value='^H("Go Home");'>Home Link</option>
|
|
||||||
<option value='^L;'>Login Form</option>
|
|
||||||
<option value='^LoginToggle;'>LoginToggle</option>
|
|
||||||
<option value='^User("email");'>User Information</option>
|
|
||||||
<option value='^@;'>Username</option>
|
|
||||||
<option value='^#;'>User ID</option>
|
|
||||||
</select>
|
|
||||||
<select onchange="returnSelected(this.value)">
|
|
||||||
<option value=''>Page/System/Info...</option>
|
|
||||||
<option value='^c;'>Company Name</option>
|
|
||||||
<option value='^D;'>Date</option>
|
|
||||||
<option value='^e;'>Company Email Address</option>
|
|
||||||
<option value='^Env("REMOTE_ADDR");'>Web Environment Variable</option>
|
|
||||||
<option value='^Execute("/this/file.sh");'>Execute</option>
|
|
||||||
<option value='^Extras;'>extras folder</option>
|
|
||||||
<option value='^Include("/this/file.html");'>Include</option>
|
|
||||||
<option value='^Page("urlizedTitle");'>Page Properties</option>
|
|
||||||
<option value='^PageTitle;'>PageTitle</option>
|
|
||||||
<option value='^r;'>Make Page Printable</option>
|
|
||||||
<option value='^RootTitle;'>RootTitle</option>
|
|
||||||
<option value='^*(100);'>Random Number</option>
|
|
||||||
<option value='^u;'>Company URL</option>
|
|
||||||
<option value='^URLEncode("Is this my string ?");'>URLEncode</option>
|
|
||||||
<option value='^/;'>System URL</option>
|
|
||||||
<option value='^\;'>Page URL</option>
|
|
||||||
<option value='^?;'>Search Box</option>
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<select onchange="returnSelected(this.value)">
|
|
||||||
<option value=''>Images...</option>
|
|
||||||
<option value='^I("imageName");'>Image Manager Image with Tag</option>
|
|
||||||
<option value='^i("imageName");'>Image Manager Image Path</option>
|
|
||||||
<option value='^Thumbnail("imageName");'>Thumbnail</option>
|
|
||||||
<option value='^ThumbnailLinker("imageName");'>ThumbnailLinker</option>
|
|
||||||
</select>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<html STYLE="width: 640px; height: 480px; ">
|
<html>
|
||||||
<head><title>Fullscreen Editor</title>
|
<head><title>Fullscreen Editor</title>
|
||||||
<style type="text/css"> body { margin: 0px; border: 0px; background-color: buttonface; } </style>
|
<style type="text/css"> body { margin: 0px; border: 0px; background-color: buttonface; } </style>
|
||||||
|
|
||||||
|
|
@ -6,15 +6,25 @@
|
||||||
|
|
||||||
// if we pass the "window" object as a argument and then set opener to
|
// if we pass the "window" object as a argument and then set opener to
|
||||||
// equal that we can refer to dialogWindows and popupWindows the same way
|
// equal that we can refer to dialogWindows and popupWindows the same way
|
||||||
opener = window.dialogArguments;
|
if (window.dialogArguments) { opener = window.dialogArguments; }
|
||||||
|
|
||||||
var _editor_url = "../";
|
var _editor_url = "../";
|
||||||
document.write('<scr'+'ipt src="' +_editor_url+ 'editor.js" language="Javascript1.2"></scr'+'ipt>');
|
document.write('<scr'+'ipt src="' +_editor_url+ 'editor.js" language="Javascript1.2"></scr'+'ipt>');
|
||||||
|
|
||||||
var objname = location.search.substring(1,location.search.length);
|
var parent_objname = location.search.substring(1,location.search.length); // parent editor objname
|
||||||
var config = opener.document.all[objname].config;
|
var parent_config = opener.document.all[parent_objname].config;
|
||||||
var editor_obj = opener.document.all["_" +objname+ "_editor"]; // html editor object
|
|
||||||
var parent_editdoc = editor_obj.contentWindow.document; // get iframe editor document object
|
var config = cloneObject( parent_config );
|
||||||
|
var objname = 'editor'; // name of this editor
|
||||||
|
|
||||||
|
// DOMViewerObj = config;
|
||||||
|
// DOMViewerName = 'config';
|
||||||
|
// window.open('/innerHTML/domviewer.htm');
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- *\
|
||||||
|
Function :
|
||||||
|
Description :
|
||||||
|
\* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
function _CloseOnEsc() {
|
function _CloseOnEsc() {
|
||||||
if (event.keyCode == 27) {
|
if (event.keyCode == 27) {
|
||||||
|
|
@ -25,12 +35,35 @@ function _CloseOnEsc() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- *\
|
/* ---------------------------------------------------------------------- *\
|
||||||
Function :
|
Function : cloneObject
|
||||||
Description :
|
Description : copy an object by value instead of by reference
|
||||||
|
Usage : var newObj = cloneObject(oldObj);
|
||||||
|
\* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
function cloneObject(obj) {
|
||||||
|
var newObj = new Object;
|
||||||
|
|
||||||
|
// check for array objects
|
||||||
|
if (obj.constructor.toString().indexOf('function Array(') == 1) {
|
||||||
|
newObj = obj.constructor();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var n in obj) {
|
||||||
|
var node = obj[n];
|
||||||
|
if (typeof node == 'object') { newObj[n] = cloneObject(node); }
|
||||||
|
else { newObj[n] = node; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return newObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- *\
|
||||||
|
Function : resize_editor
|
||||||
|
Description : resize the editor when the user resizes the popup
|
||||||
\* ---------------------------------------------------------------------- */
|
\* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
function resize_editor() { // resize editor to fix window
|
function resize_editor() { // resize editor to fix window
|
||||||
var editor = document.all['_editor_editor'];
|
var editor = document.all['_editor_editor'];
|
||||||
|
|
||||||
newWidth = document.body.offsetWidth;
|
newWidth = document.body.offsetWidth;
|
||||||
newHeight = document.body.offsetHeight - editor.offsetTop;
|
newHeight = document.body.offsetHeight - editor.offsetTop;
|
||||||
|
|
@ -40,30 +73,33 @@ function resize_editor() { // resize editor to fix window
|
||||||
|
|
||||||
editor.style.width = newWidth;
|
editor.style.width = newWidth;
|
||||||
editor.style.height = newHeight;
|
editor.style.height = newHeight;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- *\
|
/* ---------------------------------------------------------------------- *\
|
||||||
Function :
|
Function : init
|
||||||
Description :
|
Description : run this code on page load
|
||||||
\* ---------------------------------------------------------------------- */
|
\* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// change maximize button to minimize button
|
// change maximize button to minimize button
|
||||||
config.btnList["popupeditor"] = ['popupeditor', 'Minimize Editor', 'update_parent(); window.close();', 'fullscreen_minimize.gif'];
|
config.btnList["popupeditor"] = ['popupeditor', 'Minimize Editor', 'update_parent(); window.close();', 'fullscreen_minimize.gif'];
|
||||||
|
|
||||||
|
// set htmlmode button to refer to THIS editor
|
||||||
|
config.btnList["htmlmode"] = ['HtmlMode', 'View HTML Source', 'editor_setmode(\'editor\')', 'ed_html.gif'];
|
||||||
|
|
||||||
|
// change image url to be relative to current path
|
||||||
config.imgURL = "../images/";
|
config.imgURL = "../images/";
|
||||||
|
|
||||||
|
// generate editor and resize it
|
||||||
editor_generate('editor', config);
|
editor_generate('editor', config);
|
||||||
|
|
||||||
resize_editor();
|
resize_editor();
|
||||||
|
|
||||||
// set default contents
|
// switch mode if needed
|
||||||
popup_editdoc = document.all['_editor_editor'].contentWindow.document;
|
if (parent_config.mode == 'textedit') { editor_setmode(objname, 'textedit'); }
|
||||||
popup_editdoc.body.innerHTML = parent_editdoc.body.innerHTML;
|
|
||||||
|
// set child window contents
|
||||||
|
var parentHTML = opener.editor_getHTML(parent_objname);
|
||||||
|
editor_setHTML(objname, parentHTML);
|
||||||
|
|
||||||
// continuously update parent editor window
|
// continuously update parent editor window
|
||||||
window.setInterval(update_parent, 333);
|
window.setInterval(update_parent, 333);
|
||||||
|
|
@ -71,17 +107,16 @@ function init() {
|
||||||
// setup event handlers
|
// setup event handlers
|
||||||
document.body.onkeypress = _CloseOnEsc;
|
document.body.onkeypress = _CloseOnEsc;
|
||||||
window.onresize = resize_editor;
|
window.onresize = resize_editor;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- *\
|
/* ---------------------------------------------------------------------- *\
|
||||||
Function :
|
Function : update_parent
|
||||||
Description :
|
Description : update parent window editor field with contents from child window
|
||||||
\* ---------------------------------------------------------------------- */
|
\* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
function update_parent() {
|
function update_parent() {
|
||||||
parent_editdoc.body.innerHTML = popup_editdoc.body.innerHTML;
|
var childHTML = editor_getHTML(objname);
|
||||||
|
opener.editor_setHTML(parent_objname, childHTML);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,9 +75,9 @@ function btnOKClick() {
|
||||||
+ ' width="' +document.all.width.value + document.all.widthExt.value+ '"'
|
+ ' width="' +document.all.width.value + document.all.widthExt.value+ '"'
|
||||||
+ ' align="' +document.all.alignment.value+ '">\n';
|
+ ' align="' +document.all.alignment.value+ '">\n';
|
||||||
|
|
||||||
for (var x=1; x<document.all.rows.value; x++) {
|
for (var x=0; x<document.all.rows.value; x++) {
|
||||||
table += " <tr>\n";
|
table += " <tr>\n";
|
||||||
for (var y=1; y<document.all.cols.value; y++) {
|
for (var y=0; y<document.all.cols.value; y++) {
|
||||||
table += " <td></td>\n";
|
table += " <td></td>\n";
|
||||||
}
|
}
|
||||||
table += " </tr>\n";
|
table += " </tr>\n";
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ document.write('<scr'+'ipt src="' +_editor_url+ 'editor.js" language="JavaScript
|
||||||
<a name="top"></a>
|
<a name="top"></a>
|
||||||
|
|
||||||
<div align=center>
|
<div align=center>
|
||||||
<span class="headline">htmlArea v2.00</span><br>
|
<span class="headline">htmlArea v2.03</span><br>
|
||||||
<span class="headline2">Turn any <textarea> into a WYSIWYG editor, a free script<br><a href="http://www.interactivetools.com/">from your friends at interactivetools.com</a></span>
|
<span class="headline2">Turn any <textarea> into a WYSIWYG editor, a free script<br><a href="http://www.interactivetools.com/">from your friends at interactivetools.com</a></span>
|
||||||
<hr>
|
<hr>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -53,13 +53,14 @@ document.write('<scr'+'ipt src="' +_editor_url+ 'editor.js" language="JavaScript
|
||||||
|
|
||||||
<a href="#faq-goals">What the project goals for htmlArea?</a><br>
|
<a href="#faq-goals">What the project goals for htmlArea?</a><br>
|
||||||
<a href="#faq1">This editor is pretty neat, so how does it actually work?</a><br>
|
<a href="#faq1">This editor is pretty neat, so how does it actually work?</a><br>
|
||||||
<a href="#faq2">You don't happen to have one of these for (Netscape, Mozilla, Opera, etc) do you?</a><br>
|
<a href="#faq2">You don't happen to have one of these for (Netscape, Mozilla, Opera, Mac IE, etc) do you?</a><br>
|
||||||
<a href="#faq3">Why doesn't htmlArea output XHTML instead of regular HTML? Can you make it do that?</a><br>
|
<a href="#faq3">Why doesn't htmlArea output XHTML instead of regular HTML? Can you make it do that?</a><br>
|
||||||
<a href="#faq4">I'd like to be able to upload images from my hard drive, can you add that feature?</a><br>
|
<a href="#faq4">I'd like to be able to upload images from my hard drive, can you add that feature?</a><br>
|
||||||
<a href="#faq5">I'd like to be insert & modify tables, can you add that feature?</a><br>
|
|
||||||
<a href="#faq6">I'd like to <insert idea here>, can you add that feature?</a><br>
|
<a href="#faq6">I'd like to <insert idea here>, can you add that feature?</a><br>
|
||||||
<a href="#faq7">Can I change the toolbar/button colors?</a><br>
|
<a href="#faq7">Can I change the toolbar/button colors?</a><br>
|
||||||
<a href="#faq8" style="color: red"><b>I love htmlArea,</b> is there anything I can do to help the project?</a><br>
|
<a href="#faq8" style="color: red"><b>I love htmlArea,</b> is there anything I can do to help the project?</a><br>
|
||||||
|
<a href="#faq_slow_images">Why do the toolbar buttons take so long to load when I have multiple htmlArea editors on the same page?</a><br>
|
||||||
|
|
||||||
|
|
||||||
<p class="subhead">Known Bugs & Issues</p>
|
<p class="subhead">Known Bugs & Issues</p>
|
||||||
|
|
||||||
|
|
@ -68,6 +69,7 @@ document.write('<scr'+'ipt src="' +_editor_url+ 'editor.js" language="JavaScript
|
||||||
<a href="#bugs3">HTML header info (eg: <head>, <body>, etc) doesn't get preserved</a><br>
|
<a href="#bugs3">HTML header info (eg: <head>, <body>, etc) doesn't get preserved</a><br>
|
||||||
<a href="#bugs4">Some tags (eg: noframes, noscript, etc) doesn't get preserved</a><br>
|
<a href="#bugs4">Some tags (eg: noframes, noscript, etc) doesn't get preserved</a><br>
|
||||||
<a href="#bugs5">htmlArea doesn't work when multiple textareas that have the same name</a><br>
|
<a href="#bugs5">htmlArea doesn't work when multiple textareas that have the same name</a><br>
|
||||||
|
<a href="#bugs_ssl">Why do I get "non secure items" warnings when using htmlarea on a secure (SSL) https:// page?</a><br>
|
||||||
|
|
||||||
<p class="subhead">Change Log</p>
|
<p class="subhead">Change Log</p>
|
||||||
|
|
||||||
|
|
@ -103,8 +105,8 @@ editor that let your users do the following:
|
||||||
|
|
||||||
<p><ul>
|
<p><ul>
|
||||||
<li>It's lightweight, fast loading and can transform a regular textarea into a rich-text editor with a single line of JavaScript.</li>
|
<li>It's lightweight, fast loading and can transform a regular textarea into a rich-text editor with a single line of JavaScript.</li>
|
||||||
<li>It's 100% backwards compatable with older or non-supported browsers (they get the original textarea field).</li>
|
<li>It's 100% backwards compatible with older or non-supported browsers (they get the original textarea field).</li>
|
||||||
<li>It's free and can be incorporated into any free or commericial program.</li>
|
<li>It's free and can be incorporated into any free or commercial program.</li>
|
||||||
<li>It works with any programming language (ASP, PHP, Perl, Java, etc).</li>
|
<li>It works with any programming language (ASP, PHP, Perl, Java, etc).</li>
|
||||||
<li>It's written in simple JavaScript and can be easily viewed, modified or extended.</li>
|
<li>It's written in simple JavaScript and can be easily viewed, modified or extended.</li>
|
||||||
<li>It remembers entered content when a user navigates away and then hits "back" in their browser.</li>
|
<li>It remembers entered content when a user navigates away and then hits "back" in their browser.</li>
|
||||||
|
|
@ -118,13 +120,7 @@ editor that let your users do the following:
|
||||||
<a name="intro2"></a>
|
<a name="intro2"></a>
|
||||||
<p><dt><b>Is it really free? What's the catch?</b></dt>
|
<p><dt><b>Is it really free? What's the catch?</b></dt>
|
||||||
<dd>Yes! It's really free. You can use it, modify it, distribute it with your software,
|
<dd>Yes! It's really free. You can use it, modify it, distribute it with your software,
|
||||||
or do just about anything you like with it. The only thing we ask is that you don't remove
|
or do just about anything you like with it.
|
||||||
the "about this editor" info button.
|
|
||||||
|
|
||||||
We want everybody to be able to make use of htmlArea, but we'd also like other users to be
|
|
||||||
able to find out about it so they can download it as well. Having a single button
|
|
||||||
on the interface that pops up an "About this editor" window seemed to be the most low-key
|
|
||||||
way to do this. The info button looks like this <img src="images/ed_about.gif">.
|
|
||||||
</dd></p>
|
</dd></p>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -167,7 +163,7 @@ editor_generate('textbox2');
|
||||||
<dd>You can find out more about htmlArea and download the latest version on the
|
<dd>You can find out more about htmlArea and download the latest version on the
|
||||||
<a href="http://www.interactivetools.com/products/htmlarea/">htmlArea homepage</a>
|
<a href="http://www.interactivetools.com/products/htmlarea/">htmlArea homepage</a>
|
||||||
and you can talk to other htmlArea users and post any comments or suggestions you have in the
|
and you can talk to other htmlArea users and post any comments or suggestions you have in the
|
||||||
<a href="http://www.interactivetools.com/forum/forum.cgi?forum=14">htmlArea forum</a>.
|
<a href="http://www.interactivetools.com/forum/forum.cgi?forum=18">htmlArea forum</a>.
|
||||||
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
|
|
@ -195,11 +191,17 @@ add WYSIWYG editors to. Here's how to do that.
|
||||||
<li>Open the page you want to add a WYSIWYG editor to. Add the following to the top of
|
<li>Open the page you want to add a WYSIWYG editor to. Add the following to the top of
|
||||||
the page in the <head></head> of the HTML document.
|
the page in the <head></head> of the HTML document.
|
||||||
<div class="code">
|
<div class="code">
|
||||||
<script><!-- // load htmlArea files<br>
|
<script language="Javascript1.2"><!-- // load htmlarea<br>
|
||||||
_editor_url = "/htmlarea/"; // URL to htmlarea files<br>
|
_editor_url = ""; // URL to htmlarea files<br>
|
||||||
document.write('<scr'+'ipt src="' +_editor_url+ 'editor.js"');<br>
|
var win_ie_ver = parseFloat(navigator.appVersion.split("MSIE")[1]);<br>
|
||||||
document.write('language="JavaScript1.2"></scr'+'ipt>');<br>
|
if (navigator.userAgent.indexOf('Mac') >= 0) { win_ie_ver = 0; }<br>
|
||||||
//--></script><br>
|
if (navigator.userAgent.indexOf('Windows CE') >= 0) { win_ie_ver = 0; }<br>
|
||||||
|
if (navigator.userAgent.indexOf('Opera') >= 0) { win_ie_ver = 0; }<br>
|
||||||
|
if (win_ie_ver >= 5.5) {<br>
|
||||||
|
document.write('<scr' + 'ipt src="' +_editor_url+ 'editor.js"');<br>
|
||||||
|
document.write(' language="Javascript1.2"></scr' + 'ipt>'); <br>
|
||||||
|
} else { document.write('<scr'+'ipt>function editor_generate() { return false; }</scr'+'ipt>'); }<br>
|
||||||
|
// --></script>
|
||||||
</div>
|
</div>
|
||||||
If you've installed htmlArea anywhere other than /htmlarea/ then <b>be sure to change _editor_url</b> to point to
|
If you've installed htmlArea anywhere other than /htmlarea/ then <b>be sure to change _editor_url</b> to point to
|
||||||
your htmlarea directory (ending with a forward slash "/").</li>
|
your htmlarea directory (ending with a forward slash "/").</li>
|
||||||
|
|
@ -214,7 +216,7 @@ Be sure to change "<b><i>fieldname</i></b>" to be the name (not id) of the texta
|
||||||
|
|
||||||
<p><li>And you're done, open your page in your browser and see if it worked. If you run into
|
<p><li>And you're done, open your page in your browser and see if it worked. If you run into
|
||||||
any problems, keep trying and feel free to visit the
|
any problems, keep trying and feel free to visit the
|
||||||
<a href="http://www.interactivetools.com/forum/forum.cgi?forum=14">htmlArea forum</a>.</li>
|
<a href="http://www.interactivetools.com/forum/forum.cgi?forum=18">htmlArea forum</a>.</li>
|
||||||
</ol></p>
|
</ol></p>
|
||||||
|
|
||||||
<a name="setup2"></a>
|
<a name="setup2"></a>
|
||||||
|
|
@ -279,7 +281,7 @@ odd ones for reference.
|
||||||
|
|
||||||
<a name="setup4"></a>
|
<a name="setup4"></a>
|
||||||
<p><dt><b>How can I change what fonts are in the font list?</b></dt>
|
<p><dt><b>How can I change what fonts are in the font list?</b></dt>
|
||||||
<dd>There is a config.fontnames setting that let's you control this. See below.
|
<dd>There is a config.fontnames setting that lets you control this. See below.
|
||||||
<div class="code">
|
<div class="code">
|
||||||
config.fontnames = {<br>
|
config.fontnames = {<br>
|
||||||
"Arial": "arial, helvetica, sans-serif",<br>
|
"Arial": "arial, helvetica, sans-serif",<br>
|
||||||
|
|
@ -297,7 +299,7 @@ actually put into the font tag in the code.</dd></p>
|
||||||
|
|
||||||
<a name="setup5"></a>
|
<a name="setup5"></a>
|
||||||
<p><dt><b>How can I change what sizes are in the font size?</b></dt>
|
<p><dt><b>How can I change what sizes are in the font size?</b></dt>
|
||||||
<dd>There is a config.fontsizes setting that let's you control this. See below.
|
<dd>There is a config.fontsizes setting that lets you control this. See below.
|
||||||
<div class="code">
|
<div class="code">
|
||||||
config.fontsizes = {<br>
|
config.fontsizes = {<br>
|
||||||
"1 (8 pt)": "1",<br>
|
"1 (8 pt)": "1",<br>
|
||||||
|
|
@ -363,12 +365,12 @@ goals still lead the direction of development today and are listed below in orde
|
||||||
of priority.
|
of priority.
|
||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
<p><li><b>Compatability</b></li>
|
<p><li><b>Compatibility</b></li>
|
||||||
<dd>htmlArea has to always be backwards compatable with older and unsupported browsers. This
|
<dd>htmlArea has to always be backwards compatible with older and unsupported browsers. This
|
||||||
ensures that even if a user with an older and unsupported browser can't use htmlArea, they'll always be able to, at a minimum,
|
ensures that even if a user with an older and unsupported browser can't use htmlArea, they'll always be able to, at a minimum,
|
||||||
enter text in a plain textarea like they would have done before.
|
enter text in a plain textarea like they would have done before.
|
||||||
|
|
||||||
htmlArea should also be compatable with as many programming languages as possible by being
|
htmlArea should also be compatible with as many programming languages as possible by being
|
||||||
completely DHTML and JavaScript based.
|
completely DHTML and JavaScript based.
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
|
|
@ -400,13 +402,13 @@ much code as possible in the popup window so it doesn't increase the size of the
|
||||||
<p><dt><b>This editor is pretty neat, so how does it actually work?</b></dt>
|
<p><dt><b>This editor is pretty neat, so how does it actually work?</b></dt>
|
||||||
<dd>htmlArea is based on the <a href="http://msdn.microsoft.com/library/en-us/dnmshtml/html/mshtmleditplatf.asp">MSHTML Editing Platform</a>
|
<dd>htmlArea is based on the <a href="http://msdn.microsoft.com/library/en-us/dnmshtml/html/mshtmleditplatf.asp">MSHTML Editing Platform</a>
|
||||||
in Internet Explorer 5.5+ on windows. Basically, Internet Explorer includes some functionality to make sections of a
|
in Internet Explorer 5.5+ on windows. Basically, Internet Explorer includes some functionality to make sections of a
|
||||||
webpage edittable by defining a "contentEditable" attribute or "designMode" property. It also provides some built in
|
webpage editable by defining a "contentEditable" attribute or "designMode" property. It also provides some built in
|
||||||
<a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/commandids.asp">commands</a>
|
<a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/commandids.asp">commands</a>
|
||||||
for performing common web editting operations (bold, italic, center, insert image, etc).
|
for performing common web editing operations (bold, italic, center, insert image, etc).
|
||||||
|
|
||||||
<p>htmlArea builds on the features provided by Internet Explorer and adds its own user definable toolbar,
|
<p>htmlArea builds on the features provided by Internet Explorer and adds its own user definable toolbar,
|
||||||
an easy method to include a WYSIWYG editor in a web page (replacing textareas), an easy way to save user
|
an easy method to include a WYSIWYG editor in a web page (replacing textareas), an easy way to save user
|
||||||
changes, as well as a number of custom web editting commands of its own.
|
changes, as well as a number of custom web editing commands of its own.
|
||||||
|
|
||||||
<p>How htmlArea actually works is it replaces a textarea with an (user definable) toolbar, an iframe that
|
<p>How htmlArea actually works is it replaces a textarea with an (user definable) toolbar, an iframe that
|
||||||
has the "contentEditable" attribute set to true, and a hidden field with the same name as your original
|
has the "contentEditable" attribute set to true, and a hidden field with the same name as your original
|
||||||
|
|
@ -426,9 +428,9 @@ the editor.js file or the popup windows (in the /popups/ folder).
|
||||||
<dd>No. None of these other browsers (including IE for Mac) support "contentEditable" or a way to make
|
<dd>No. None of these other browsers (including IE for Mac) support "contentEditable" or a way to make
|
||||||
existing content in the page editable. It might be possible to emulate this in JavaScript, but it would
|
existing content in the page editable. It might be possible to emulate this in JavaScript, but it would
|
||||||
be a lot of work. Other problems include displaying or emulating the flashing | bar cursor you see when
|
be a lot of work. Other problems include displaying or emulating the flashing | bar cursor you see when
|
||||||
editting. The cross-platform Mozilla browser has some bug entries related to adding contentEditable
|
editing. The cross-platform Mozilla browser has some bug entries related to adding contentEditable
|
||||||
functionality, and perhaps in the future it may be possible to create something for that browser.
|
functionality, and perhaps in the future it may be possible to create something for that browser.
|
||||||
<p>Although it's a longshot, you might want to send a friendly letter to Microsoft to encourage them to
|
<p>Although it's a long shot, you might want to send a friendly letter to Microsoft to encourage them to
|
||||||
make the "contentEditable" functionality work on IE for the Macintosh. Once they implement it, we can offer it.
|
make the "contentEditable" functionality work on IE for the Macintosh. Once they implement it, we can offer it.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -445,7 +447,7 @@ we hope to do at some point.
|
||||||
|
|
||||||
<a name="faq4"></a>
|
<a name="faq4"></a>
|
||||||
<p><dt><b>I'd like to be able to upload images from my hard drive, can you add that feature?</b></dt>
|
<p><dt><b>I'd like to be able to upload images from my hard drive, can you add that feature?</b></dt>
|
||||||
<dd>No. We want htmlArea to be compatable with as many programming languages as possible. Because it's
|
<dd>No. We want htmlArea to be compatible with as many programming languages as possible. Because it's
|
||||||
written in client side JavaScript, it should work with any programming language. If we start adding
|
written in client side JavaScript, it should work with any programming language. If we start adding
|
||||||
language specific features htmlArea won't be as useful to as many people. That said, there's a lot of
|
language specific features htmlArea won't be as useful to as many people. That said, there's a lot of
|
||||||
free "file upload" scripts available, and htmlArea does include a function called editor_insertHTML()\
|
free "file upload" scripts available, and htmlArea does include a function called editor_insertHTML()\
|
||||||
|
|
@ -453,17 +455,11 @@ for inserting text or HTML tags. If you want to write your own program for doin
|
||||||
that hard. Alternatively, you might check in the forum to see if someone already has.
|
that hard. Alternatively, you might check in the forum to see if someone already has.
|
||||||
</dd></p>
|
</dd></p>
|
||||||
|
|
||||||
<a name="faq5"></a>
|
|
||||||
<p><dt><b>I'd like to be insert & modify tables, can you add that feature?</b></dt>
|
|
||||||
<dd>It's definately something that can be done, and something we'd really like to add.
|
|
||||||
We hope to do so sometime in the neat future. Sign up to our newsletter and watch the
|
|
||||||
<a href="http://www.interactivetools.com/forum/forum.cgi?forum=14">forum</a> for futher developments.</dd></p>
|
|
||||||
|
|
||||||
<a name="faq6"></a>
|
<a name="faq6"></a>
|
||||||
<p><dt><b>I'd like to <insert idea here>, can you add that feature?</b></dt>
|
<p><dt><b>I'd like to <insert idea here>, can you add that feature?</b></dt>
|
||||||
<dd>Maybe, maybe not. If it's a good feature and it fits in with the goals of our project we'll
|
<dd>Maybe, maybe not. If it's a good feature and it fits in with the goals of our project we'll
|
||||||
likely consider it. The best thing to do is post your suggestions to the
|
likely consider it. The best thing to do is post your suggestions to the
|
||||||
<a href="http://www.interactivetools.com/forum/forum.cgi?forum=14">forum</a>. At the very least
|
<a href="http://www.interactivetools.com/forum/forum.cgi?forum=18">forum</a>. At the very least
|
||||||
we'll try to give you some suggestions and point you in the right direction. At best you might
|
we'll try to give you some suggestions and point you in the right direction. At best you might
|
||||||
find somebody else has already implemented the feature you were hoping for.
|
find somebody else has already implemented the feature you were hoping for.
|
||||||
|
|
||||||
|
|
@ -484,10 +480,22 @@ theme. Try it, it's really neat.</dd></p>
|
||||||
The more people who can find out about htmlArea the better it will be.
|
The more people who can find out about htmlArea the better it will be.
|
||||||
|
|
||||||
<p>The next best thing you can do is participate in our
|
<p>The next best thing you can do is participate in our
|
||||||
<a href="http://www.interactivetools.com/forum/forum.cgi?forum=14">forum</a> and post a message or two to
|
<a href="http://www.interactivetools.com/forum/forum.cgi?forum=18">forum</a> and post a message or two to
|
||||||
help other htmlArea users (or learn something new yourself).
|
help other htmlArea users (or learn something new yourself).
|
||||||
|
|
||||||
<p>Lastly, any code improvements you want to share would certianly be welcome as well.</dd></p>
|
<p>Lastly, any code improvements you want to share would certainly be welcome as well.</dd></p>
|
||||||
|
|
||||||
|
<a name="faq_slow_images"></a>
|
||||||
|
<p><dt><b>Why do the toolbar buttons take so long to load when I have multiple htmlArea editors on the same page?</b></dt>
|
||||||
|
<dd>This is a bug/feature of Internet Explorer. htmlArea dynamically updates the content of your page to replace
|
||||||
|
a textarea with the WYSIWYG editor. In Internet Explorer, when you update the content of a page after it has loaded
|
||||||
|
and insert an image it will load the image from the server EVEN if has the image in it's cache. This means if you have 10
|
||||||
|
htmlareas on the same page the "bold" toolbar button will be loaded 10 times.
|
||||||
|
|
||||||
|
<p>One workaround for this is to move all your editor_generate() scripts to the bottom of the page, combine them
|
||||||
|
into one script tag, and remove the "defer" attribute from that script tag. This will cause them all to run just
|
||||||
|
as the page is finishing loading and the cached images WILL be used. Meaning, the browser will only need to load each
|
||||||
|
image once.
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
@ -499,16 +507,16 @@ help other htmlArea users (or learn something new yourself).
|
||||||
|
|
||||||
<a name="bugs1"></a>
|
<a name="bugs1"></a>
|
||||||
<p><dt><b>Undo/Redo doesn't work</b></dt>
|
<p><dt><b>Undo/Redo doesn't work</b></dt>
|
||||||
<dd>We update a hidden field everytime you make a change in the editor so the hidden field will be
|
<dd>We update a hidden field every time you make a change in the editor so the hidden field will be
|
||||||
submitted when you submit the form. The way undo/redo works in Internet Explorer it seems to reset
|
submitted when you submit the form. The way undo/redo works in Internet Explorer it seems to reset
|
||||||
the undo buffer everytime you use JavaScript to set the value of a form element or otherwise make
|
the undo buffer every time you use JavaScript to set the value of a form element or otherwise make
|
||||||
changes to the page. Because of this the built in undo/redo functionality of the browser doesn't
|
changes to the page. Because of this the built in undo/redo functionality of the browser doesn't
|
||||||
work. We hope to implement our own undo/redo functionality at a future point.</dd></p>
|
work. We hope to implement our own undo/redo functionality at a future point.</dd></p>
|
||||||
|
|
||||||
<a name="bugs2"></a>
|
<a name="bugs2"></a>
|
||||||
<p><dt><b>Relative paths are converted to absolute paths</b></dt>
|
<p><dt><b>Relative paths are converted to absolute paths</b></dt>
|
||||||
<dd>Internet Explorer has a tendency to convert relative paths into absolute paths. We've seen some
|
<dd>Internet Explorer has a tendency to convert relative paths into absolute paths. We've seen some
|
||||||
implentations of WYSIWYG editors that maintain relative paths "better" than others but certain operations
|
implementations of WYSIWYG editors that maintain relative paths "better" than others but certain operations
|
||||||
(such as dragging and dropping, etc) still convert relative paths to absolute paths. We hope to find a
|
(such as dragging and dropping, etc) still convert relative paths to absolute paths. We hope to find a
|
||||||
workaround for this in a future version.
|
workaround for this in a future version.
|
||||||
</dd></p>
|
</dd></p>
|
||||||
|
|
@ -528,10 +536,22 @@ preserve content the browser has "thrown away".</dd></p>
|
||||||
<a name="bugs5"></a>
|
<a name="bugs5"></a>
|
||||||
<p><dt><b>htmlArea doesn't work with multiple textareas that have the same name</b></dt>
|
<p><dt><b>htmlArea doesn't work with multiple textareas that have the same name</b></dt>
|
||||||
<dd>If you have two or more textareas with the same name on the same page and you try
|
<dd>If you have two or more textareas with the same name on the same page and you try
|
||||||
to convert one of more of them into a WYSIWYG editor htmlArea won't work. This is because htmlArea
|
to convert one or more of them into a WYSIWYG editor htmlArea won't work. This is because htmlArea
|
||||||
looks up the textareas by name in the entire page, not just inside a specific form. There's currently
|
looks up the textareas by name in the entire page, not just inside a specific form. There's currently
|
||||||
no workaround for this. We hope to resolve it in a future release.</dd></p>
|
no workaround for this. We hope to resolve it in a future release.</dd></p>
|
||||||
|
|
||||||
|
<a name="bugs_ssl"></a>
|
||||||
|
<p><dt><b>Why do I get "non secure items" warnings when using htmlarea on a secure (SSL) https:// page?</b></dt>
|
||||||
|
<dd>This is a bug/feature of Internet Explorer. Even if you get unsecure warnings your form contents should
|
||||||
|
still be submitted securely.
|
||||||
|
|
||||||
|
<p>htmlArea uses an <iframe> to contain the editor and because the contents of the iframe isn't being
|
||||||
|
loaded off a secure site, Internet Explorer thinks the iframe is unsecure. The problem is, the iframe doesn't
|
||||||
|
load anything off any site, it's blank, it doesn't even have a src attribute. We just create an empty iframe
|
||||||
|
and then use javascript to update it. We hope to have this fixed in a future release.
|
||||||
|
|
||||||
|
<p>Note: There's a clever workaround for this problem posted in the forum <a href="http://www.interactivetools.com/iforum/P3686/">here</a>.
|
||||||
|
The only issue with it is that can cause the back button to not work as intended (it goes back in the iframe first).
|
||||||
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
|
|
@ -541,12 +561,101 @@ no workaround for this. We hope to resolve it in a future release.</dd></p>
|
||||||
<a name="changelog"></a>
|
<a name="changelog"></a>
|
||||||
<p><span class="subhead">Change Log</span> <a href="#top" class="backtotop">back to top</a></p>
|
<p><span class="subhead">Change Log</span> <a href="#top" class="backtotop">back to top</a></p>
|
||||||
<dl>
|
<dl>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
<p><dt><b>Version 2.00 (beta1)</b> (Released: August 19, 2002)</dt><ul>
|
<p><dt><b>Version 2.00 (beta1)</b> (Released: August 19, 2002)</dt><ul>
|
||||||
<li>Initial Release</li>
|
<li>Initial Release</li>
|
||||||
</ul></p>
|
</ul></p>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p><dt><b>Version 2.03</b> (Released: December 17, 2002)</dt>
|
||||||
|
|
||||||
|
<p><ul>
|
||||||
|
<li><b>new license</b> - switched to "BSD style" software license. The "About this editor" button is no longer required.
|
||||||
|
<li>readme updates - minor updates, spelling, and grammer fixes.
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</ul></p>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
|
|
||||||
|
<p><dt><b>Version 2.02a</b> (Released: December 5, 2002)</dt>
|
||||||
|
|
||||||
|
<p><ul>
|
||||||
|
<li>fixed error in readme.html example code under "How do I add htmlArea to my web page?".
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</ul></p>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p><dt><b>Version 2.02</b> (Released: December 5, 2002)</dt><ul>
|
||||||
|
|
||||||
|
<p><dt><b>Bug Fixes</b> (Thanks to everybody in the forum for contributing and reporting bugs!)</dt>
|
||||||
|
|
||||||
|
<li>fix nested script tag error (thanks to Phil Revill)
|
||||||
|
|
||||||
|
<p><dt><b>New Features</b></dt>
|
||||||
|
<li>added 'replaceNextlines' config option to replace nextlines with spaces on output
|
||||||
|
<li>added 'plaintextInput' config option to replace nextlines with <br> tags on input
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</ul></p>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p><dt><b>Version 2.01</b> (Released: December 3, 2002)</dt><ul>
|
||||||
|
|
||||||
|
<p><dt><b>Bug Fixes</b> (Thanks to everybody in the forum for contributing and reporting bugs!)</dt>
|
||||||
|
|
||||||
|
<li>fixed "function not found" error for non IE5.5+ browsers (thanks to slowhand)
|
||||||
|
<li>popup editor - fixed javascript error caused during launch of popup (thanks to slowhand and Chlorel)
|
||||||
|
<li>popup editor - fixed toolbar 'linebreak' error (thanks to fbridge9 and RekiM)
|
||||||
|
|
||||||
|
<p><dt><b>Documentation Updates</b></dt>
|
||||||
|
<li>Add two new questions to readme.html
|
||||||
|
<ul>
|
||||||
|
<li> Why do the toolbar buttons take so long to load when I have multiple htmlArea editors on the same page?<br>
|
||||||
|
<li>Why do I get "non secure items" warnings when using htmlarea on a secure (SSL) https:// page?<br>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
|
<p><dt><b>Version 2.00 (official release)</b> (Released: November 25, 2002)</dt><ul>
|
||||||
|
|
||||||
|
<p><dt><b>New Javascript Functions</b></dt>
|
||||||
|
<li>editor_getHTML(objname) - return HTML content of editor
|
||||||
|
<li>editor_setHTML(objname) - set HTML content of editor
|
||||||
|
<li>editor_appendHTML(objname) - add HTML content to editor
|
||||||
|
|
||||||
|
<p><dt><b>New Features</b></dt>
|
||||||
|
<li>Popup "fullscreen" editor now has minimize and maximize buttons (switched from ModalDialog to popup window)
|
||||||
|
|
||||||
|
<p><dt><b>Bug Fixes</b> (Thanks to everybody in the forum for contributing and reporting bugs!)</dt>
|
||||||
|
<li>"Create Table" popup now creates tables with the correct number of cols and rows (thanks to Corey)
|
||||||
|
<li>Clicking on images no longer causes error when you have "CSS style pulldown" enabled (thanks to Virrdo)
|
||||||
|
<li>Fixed bug that prevented external stylesheets from working properly (thanks to slowhand)
|
||||||
|
<li>fixed javascript errors in Mozilla 1.0 (thanks to slowhand)
|
||||||
|
<li>moved browser detection code to editor page to prevent javascript errors from older browsers and prevent the editor from being loaded unless it's needed.
|
||||||
|
<li>submitting empty htmlarea now submits nothing "" instead of "<p>&nbsp;</p>"
|
||||||
|
<li>Popup "fullscreen" editor no longer generates error on "<>" html mode change
|
||||||
|
|
||||||
|
</ul></p>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
<p><dt><b>Version 2.00 (beta2)</b> (Released: October 16, 2002)</dt><ul>
|
<p><dt><b>Version 2.00 (beta2)</b> (Released: October 16, 2002)</dt><ul>
|
||||||
|
|
||||||
|
|
@ -564,10 +673,10 @@ no workaround for this. We hope to resolve it in a future release.</dd></p>
|
||||||
<p><dt><b>Bug Fixes / Optimizations</b></dt>
|
<p><dt><b>Bug Fixes / Optimizations</b></dt>
|
||||||
<li>organized associated files into directories
|
<li>organized associated files into directories
|
||||||
<li>fixed bug that caused htmlarea to sometimes not display last entered content when user pressed back in their browser.
|
<li>fixed bug that caused htmlarea to sometimes not display last entered content when user pressed back in their browser.
|
||||||
<li>moved about window into a seperate file to reduce size of editor
|
<li>moved about window into a separate file to reduce size of editor
|
||||||
</ul></p>
|
|
||||||
|
|
||||||
</ul></p>
|
</ul></p>
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
<p><dt><b>Version 2.00 (beta1)</b> (Released: August 19, 2002)</dt><ul>
|
<p><dt><b>Version 2.00 (beta1)</b> (Released: August 19, 2002)</dt><ul>
|
||||||
|
|
||||||
|
|
@ -580,7 +689,7 @@ no workaround for this. We hope to resolve it in a future release.</dd></p>
|
||||||
<li>added version number to about page.
|
<li>added version number to about page.
|
||||||
|
|
||||||
<p><dt><b>code changes</b></dt>
|
<p><dt><b>code changes</b></dt>
|
||||||
<li>added "defer" to script tag to prevent editor from being created untill page loads
|
<li>added "defer" to script tag to prevent editor from being created until page loads
|
||||||
<li>simplified header that needs to be added to pages that contain editor
|
<li>simplified header that needs to be added to pages that contain editor
|
||||||
<li>generated script include tag using _editor_url so users don't have to enter URL twice
|
<li>generated script include tag using _editor_url so users don't have to enter URL twice
|
||||||
<li>moved CSS for editor toolbar buttons into editor.js
|
<li>moved CSS for editor toolbar buttons into editor.js
|
||||||
|
|
@ -595,7 +704,7 @@ no workaround for this. We hope to resolve it in a future release.</dd></p>
|
||||||
<li>ability to specify the order of toolbar elements
|
<li>ability to specify the order of toolbar elements
|
||||||
<li>ability to specify fonts, sizes, and CSS styles for pulldowns
|
<li>ability to specify fonts, sizes, and CSS styles for pulldowns
|
||||||
<li>ability to set default font and style used in editor window
|
<li>ability to set default font and style used in editor window
|
||||||
<li>debug flag that lets the see the source of the wysiwyg field at all times
|
<li>debug flag that lets you see the source of the WYSIWYG field at all times
|
||||||
<li>add more sample code and comments showing how to add custom buttons
|
<li>add more sample code and comments showing how to add custom buttons
|
||||||
|
|
||||||
<p><dt><b>bug fixes</b></dt>
|
<p><dt><b>bug fixes</b></dt>
|
||||||
|
|
@ -604,35 +713,47 @@ no workaround for this. We hope to resolve it in a future release.</dd></p>
|
||||||
</ul></p>
|
</ul></p>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
<p><dt><b>Version 1.05</b> (Released: August 28, 2002)</dt><ul>
|
<p><dt><b>Version 1.05</b> (Released: August 28, 2002)</dt><ul>
|
||||||
<li>- Added support for textareas with underscores ("_") in their names.</li>
|
<li>- Added support for textareas with underscores ("_") in their names.</li>
|
||||||
</ul></p>
|
</ul></p>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
<p><dt><b>Version 1.04</b> (Released: August 27, 2002)</dt><ul>
|
<p><dt><b>Version 1.04</b> (Released: August 27, 2002)</dt><ul>
|
||||||
<li>Even more speed improvements (wysiwyg editor is now much faster on older computers).</li>
|
<li>Even more speed improvements (WYSIWYG editor is now much faster on older computers).</li>
|
||||||
<li>General code improvements and optimizations.</li>
|
<li>General code improvements and optimizations.</li>
|
||||||
</ul></p>
|
</ul></p>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
<p><dt><b>Version 1.03</b> (Released: August 26, 2002)</dt><ul>
|
<p><dt><b>Version 1.03</b> (Released: August 26, 2002)</dt><ul>
|
||||||
<li>Beta release only</li>
|
<li>Beta release only</li>
|
||||||
</ul></p>
|
</ul></p>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
<p><dt><b>Version 1.02</b> (Released: August 21, 2002)</dt><ul>
|
<p><dt><b>Version 1.02</b> (Released: August 21, 2002)</dt><ul>
|
||||||
<li>added editor_insertHTML() function. Developers can now easily add buttons that insert HTML or surround selected text with HTML.</li>
|
<li>added editor_insertHTML() function. Developers can now easily add buttons that insert HTML or surround selected text with HTML.</li>
|
||||||
<li>removed unneeded debug code and comments to reduce editor.js filesize (and load time). </li>
|
<li>removed unneeded debug code and comments to reduce editor.js file size (and load time). </li>
|
||||||
</ul></p>
|
</ul></p>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
<p><dt><b>Version 1.01</b> (Released: August 20, 2002)</dt><ul>
|
<p><dt><b>Version 1.01</b> (Released: August 20, 2002)</dt><ul>
|
||||||
<li>optimized code to improve speed (wysiwyg editor is now much faster)</li>
|
<li>optimized code to improve speed (WYSIWYG editor is now much faster)</li>
|
||||||
<li>added addition event handlers to update UI on mouse events.</li>
|
<li>added addition event handlers to update UI on mouse events.</li>
|
||||||
</ul></p>
|
</ul></p>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
<p><dt><b>Version 1.00</b> (Released: August 19, 2002)</dt><ul>
|
<p><dt><b>Version 1.00</b> (Released: August 19, 2002)</dt><ul>
|
||||||
<li>Initial Release</li>
|
<li>Initial Release</li>
|
||||||
</ul></p>
|
</ul></p>
|
||||||
|
|
||||||
|
<!-- ---------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
<br><br><br>
|
<br><br><br>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue