| 1 |  | <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
 | 
  | 2 |  | <html> <head>
 | 
  | 3 |  | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 | 
  | 4 |  | <title>HTMLArea-3.0 Reference</title>
 | 
  | 5 |  | 
 | 
  | 6 |  | <style type="text/css">
 | 
  | 7 |  |   @import url(htmlarea.css);
 | 
  | 8 |  |   body { font: 14px verdana,sans-serif; background: #fff; color: #000; }
 | 
  | 9 |  |   h1, h2 { font-family:tahoma,sans-serif; }
 | 
  | 10 |  |   h1 { border-bottom: 2px solid #000; }
 | 
  | 11 |  |   h2 { border-bottom: 1px solid #aaa; }
 | 
  | 12 |  |   h3, h4 { margin-bottom: 0px; font-family: Georgia,serif; font-style: italic; }
 | 
  | 13 |  |   h4 { font-size: 90%; margin-left: 1em; }
 | 
  | 14 |  |   acronym { border-bottom: 1px dotted #063; color: #063; }
 | 
  | 15 |  |   p { margin-left: 2em; margin-top: 0.3em; }
 | 
  | 16 |  |   li p { margin-left: 0px; }
 | 
  | 17 |  |   .abstract { padding: 5px; margin: 0px 10em; font-size: 90%; border: 1px dashed #aaa; background: #eee;}
 | 
  | 18 |  |   li { margin-left: 2em; }
 | 
  | 19 |  |   em { color: #042; }
 | 
  | 20 |  |   a { color: #00f; }
 | 
  | 21 |  |   a:hover { color: #f00; }
 | 
  | 22 |  |   a:active { color: #f80; }
 | 
  | 23 |  |   span.browser { font-weight: bold; color: #864; }
 | 
  | 24 |  |   .fixme { font-size: 20px; font-weight: bold; color: red; background: #fab;
 | 
  | 25 |  | padding: 5px; text-align: center; }
 | 
  | 26 |  |   .code {
 | 
  | 27 |  |    background: #e4efff; padding: 5px; border: 1px dashed #abc; margin-left: 2em; margin-right: 2em;
 | 
  | 28 |  |    font-family: fixed,"lucidux mono","andale mono","courier new",monospace;
 | 
  | 29 |  |   }
 | 
  | 30 |  |   .note, .warning { font-weight: bold; color: #0a0; font-variant: small-caps; }
 | 
  | 31 |  |   .warning { color: #a00; }
 | 
  | 32 |  | 
 | 
  | 33 |  | .string {
 | 
  | 34 |  |   color: #06c;
 | 
  | 35 |  | } /* font-lock-string-face */
 | 
  | 36 |  | .comment {
 | 
  | 37 |  |   color: #840;
 | 
  | 38 |  | } /* font-lock-comment-face */
 | 
  | 39 |  | .variable-name {
 | 
  | 40 |  |   color: #000;
 | 
  | 41 |  | } /* font-lock-variable-name-face */
 | 
  | 42 |  | .type {
 | 
  | 43 |  |   color: #008;
 | 
  | 44 |  |   font-weight: bold;
 | 
  | 45 |  | } /* font-lock-type-face */
 | 
  | 46 |  | .reference {
 | 
  | 47 |  |   color: #048;
 | 
  | 48 |  | } /* font-lock-reference-face */
 | 
  | 49 |  | .preprocessor {
 | 
  | 50 |  |   color: #808;
 | 
  | 51 |  | } /* font-lock-preprocessor-face */
 | 
  | 52 |  | .keyword {
 | 
  | 53 |  |   color: #00f;
 | 
  | 54 |  |   font-weight: bold;
 | 
  | 55 |  | } /* font-lock-keyword-face */
 | 
  | 56 |  | .function-name {
 | 
  | 57 |  |   color: #044;
 | 
  | 58 |  | } /* font-lock-function-name-face */
 | 
  | 59 |  | .html-tag {
 | 
  | 60 |  |   font-weight: bold;
 | 
  | 61 |  | } /* html-tag-face */
 | 
  | 62 |  | .html-helper-italic {
 | 
  | 63 |  |   font-style: italic;
 | 
  | 64 |  | } /* html-helper-italic-face */
 | 
  | 65 |  | .html-helper-bold {
 | 
  | 66 |  |   font-weight: bold;
 | 
  | 67 |  | } /* html-helper-bold-face */
 | 
  | 68 |  | 
 | 
  | 69 |  | </style>
 | 
  | 70 |  | 
 | 
  | 71 |  | <script type="text/javascript">
 | 
  | 72 |  |   _editor_url = './';
 | 
  | 73 |  |   _editor_lang = 'en';
 | 
  | 74 |  | </script>
 | 
  | 75 |  | <script type="text/javascript" src="htmlarea.js"></script>
 | 
  | 76 |  | <script type="text/javascript" src="dialog.js"></script>
 | 
  | 77 |  | <script tyle="text/javascript" src="lang/en.js"></script>
 | 
  | 78 |  | 
 | 
  | 79 |  | </head>
 | 
  | 80 |  | 
 | 
  | 81 |  | <body onload="HTMLArea.replace('TA')">
 | 
  | 82 |  | 
 | 
  | 83 |  | 
 | 
  | 84 |  | <h1>HTMLArea-3.0 Documentation</h1>
 | 
  | 85 |  | 
 | 
  | 86 |  | <div class="abstract" style="color: red; font-weight: bold">
 | 
  | 87 |  | 
 | 
  | 88 |  |       This documentation contains valid information, but is outdated in the
 | 
  | 89 |  |       terms that it does not covers all the features of HTMLArea.  A new
 | 
  | 90 |  |       documentation project will be started, based on LaTeX.
 | 
  | 91 |  | 
 | 
  | 92 |  | </div>
 | 
  | 93 |  | 
 | 
  | 94 |  | 
 | 
  | 95 |  | <h2>Introduction</h2>
 | 
  | 96 |  | 
 | 
  | 97 |  | <h3>What is HTMLArea?</h3>
 | 
  | 98 |  | 
 | 
  | 99 |  | <p>HTMLArea is a free <acronym title="What You See Is What You Get"
 | 
  | 100 |  | >WYSIWYG</acronym> editor replacement for <code><textarea></code>
 | 
  | 101 |  | fields.  By adding a few simple lines of JavaScript code to your web page
 | 
  | 102 |  | you can replace a regular textarea with a rich text editor that lets your
 | 
  | 103 |  | users do the following:</p>
 | 
  | 104 |  | 
 | 
  | 105 |  | <ul>
 | 
  | 106 |  |   <li>Format text to be bold, italicized, or underlined.</li>
 | 
  | 107 |  |   <li>Change the face, size, style and color.</li>
 | 
  | 108 |  |   <li>Left, center, or right-justify paragraphs.</li>
 | 
  | 109 |  |   <li>Make bulleted or numbered lists.</li>
 | 
  | 110 |  |   <li>Indent or un-indent paragraphs.</li>
 | 
  | 111 |  |   <li>Insert a horizontal line.</li>
 | 
  | 112 |  |   <li>Insert hyperlinks and images.</li>
 | 
  | 113 |  |   <li>View the raw HTML source of what they're editing.</li>
 | 
  | 114 |  |   <li>and much more...</li>
 | 
  | 115 |  | </ul>
 | 
  | 116 |  | 
 | 
  | 117 |  | <p>Some of the interesting features of HTMLArea that set's it apart from
 | 
  | 118 |  | other web based WYSIWYG editors are as follows:</p>
 | 
  | 119 |  | 
 | 
  | 120 |  | <ul>
 | 
  | 121 |  |   <li>It's lightweight, fast loading and can transform a regular textarea
 | 
  | 122 |  |   into a rich-text editor with a single line of JavaScript.</li>
 | 
  | 123 |  |   <li>Generates clean, valid HTML.</li>
 | 
  | 124 |  |   <li>It degrades gracefully to older or non-supported browsers
 | 
  | 125 |  |   (they get the original textarea field).</li>
 | 
  | 126 |  |   <li>It's free and can be incorporated into any free or commercial
 | 
  | 127 |  |   program.</li>
 | 
  | 128 |  |   <li>It works with any server-side languages (ASP, PHP, Perl, Java,
 | 
  | 129 |  |   etc).</li>
 | 
  | 130 |  |   <li>It's written in JavaScript and can be easily viewed, modified or
 | 
  | 131 |  |   extended.</li>
 | 
  | 132 |  |   <li>It remembers entered content when a user navigates away and then hits
 | 
  | 133 |  |   "back" in their browser.</li>
 | 
  | 134 |  |   <li>Since it replaces existing textareas it doesn't require a lot of code
 | 
  | 135 |  |   to add it to your pages (just one line).</li>
 | 
  | 136 |  |   <li>Did we mention it was free? ;-)</li>
 | 
  | 137 |  | </ul>
 | 
  | 138 |  | 
 | 
  | 139 |  | <h3>Is it really free?  What's the catch?</h3>
 | 
  | 140 |  | 
 | 
  | 141 |  | <p>Yes! It's really free. You can use it, modify it, distribute it with your
 | 
  | 142 |  | software, or do just about anything you like with it.</p>
 | 
  | 143 |  | 
 | 
  | 144 |  | <h3>What are the browser requirements?</h3>
 | 
  | 145 |  | 
 | 
  | 146 |  | <p>HTMLArea requires <span class="browser"><a
 | 
  | 147 |  | href="http://www.microsoft.com/ie">Internet Explorer</a> >= 5.5</span>
 | 
  | 148 |  | (Windows only), or <span class="browser"><a
 | 
  | 149 |  | href="http://mozilla.org">Mozilla</a> >= 1.3-Beta</span> on any platform.
 | 
  | 150 |  | Any browser based on <a href="http://mozilla.org/newlayout">Gecko</a> will
 | 
  | 151 |  | also work, provided that Gecko version is at least the one included in
 | 
  | 152 |  | Mozilla-1.3-Beta (for example, <a
 | 
  | 153 |  | href="http://galeon.sf.net">Galeon-1.2.8</a>).  However, it degrades
 | 
  | 154 |  | gracefully to other browsers. They will get a regular textarea field
 | 
  | 155 |  | instead of a WYSIWYG editor.</p>
 | 
  | 156 |  | 
 | 
  | 157 |  | <h3>Can I see an example of what it looks like?</h3>
 | 
  | 158 |  | 
 | 
  | 159 |  | <p>Just make sure you're using one of the browsers mentioned above and see
 | 
  | 160 |  | below.</p>
 | 
  | 161 |  | 
 | 
  | 162 |  | <form onsubmit="return false;">
 | 
  | 163 |  | <textarea id="TA" style="width: 100%; height: 15em;">
 | 
  | 164 |  | <p>Here is some sample text in textarea that's been transformed with <font
 | 
  | 165 |  | color="#0000CC"><b>HTMLArea</b></font>.<br />
 | 
  | 166 |  | You can make things <b>bold</b>, <i>italic</i>, <u>underline</u>.  You can change the
 | 
  | 167 |  | <font size="3">size</font> and <b><font color="#0000CC">c</font><font color="#00CC00">o</font><font color="#00CCCC">l</font><font color="#CC0000">o</font><font color="#CC00CC">r</font><font color="#CCCC00">s</font><font color="#CCCCCC">!</font></b>
 | 
  | 168 |  | And lots more...</p>
 | 
  | 169 |  | 
 | 
  | 170 |  | <p align="center"><font size="4" color="#ff0000"><b><u>Try HTMLArea
 | 
  | 171 |  | today!</u></b></font><br /></p>
 | 
  | 172 |  | </textarea>
 | 
  | 173 |  | </form>
 | 
  | 174 |  | 
 | 
  | 175 |  | <h3>Where can I find out more info, download the latest version and talk to
 | 
  | 176 |  | other HTMLArea users?</h3>
 | 
  | 177 |  | 
 | 
  | 178 |  | <p>You can find out more about HTMLArea and download the latest version on
 | 
  | 179 |  | the <a href="http://dynarch.com/htmlarea/">HTMLArea
 | 
  | 180 |  | homepage</a> and you can talk to other HTMLArea users and post any comments
 | 
  | 181 |  | or suggestions you have in the <a
 | 
  | 182 |  | href="http://www.interactivetools.com/iforum/Open_Source_C3/htmlArea_v3.0_-_Alpha_Release_F14/"
 | 
  | 183 |  | >HTMLArea forum</a>.</p>
 | 
  | 184 |  | 
 | 
  | 185 |  | <h2>Keyboard shortcuts</h2>
 | 
  | 186 |  | 
 | 
  | 187 |  | <p>The editor provides the following key combinations:</p>
 | 
  | 188 |  | 
 | 
  | 189 |  | <ul>
 | 
  | 190 |  |   <li>CTRL-A -- select all</li>
 | 
  | 191 |  |   <li>CTRL-B -- bold</li>
 | 
  | 192 |  |   <li>CTRL-I -- italic</li>
 | 
  | 193 |  |   <li>CTRL-U -- underline</li>
 | 
  | 194 |  |   <li>CTRL-S -- strikethrough</li>
 | 
  | 195 |  |   <li>CTRL-L -- justify left</li>
 | 
  | 196 |  |   <li>CTRL-E -- justify center</li>
 | 
  | 197 |  |   <li>CTRL-R -- justify right</li>
 | 
  | 198 |  |   <li>CTRL-J -- justify full</li>
 | 
  | 199 |  |   <li>CTRL-1 .. CTRL-6 -- headings (<h1> .. <h6>)</li>
 | 
  | 200 |  |   <li>CTRL-0 (zero) -- clean content pasted from Word</li>
 | 
  | 201 |  | </ul>
 | 
  | 202 |  | 
 | 
  | 203 |  | <h2>Installation</h2>
 | 
  | 204 |  | 
 | 
  | 205 |  | <h3>How do I add HTMLArea to my web page?</h3>
 | 
  | 206 |  | 
 | 
  | 207 |  | <p>It's easy.  First you need to upload HTMLArea files to your website.
 | 
  | 208 |  | Just follow these steps.</p>
 | 
  | 209 |  | 
 | 
  | 210 |  | <ol>
 | 
  | 211 |  |   <li>Download the latest version from the <a
 | 
  | 212 |  |   href="http://www.interactivetools.com/products/htmlarea/">htmlArea
 | 
  | 213 |  |   homepage</a>.</li>
 | 
  | 214 |  |   <li>Unzip the files onto your local computer (making sure to maintain the
 | 
  | 215 |  |   directory structure contained in the zip).</li>
 | 
  | 216 |  |   <li>Create a new folder on your website called /htmlarea/ (make sure it's
 | 
  | 217 |  |   NOT inside the cgi-bin).</li>
 | 
  | 218 |  |   <li>Transfer all the HTMLArea files from your local computer into the
 | 
  | 219 |  |   /htmlarea/ folder on your website.</li>
 | 
  | 220 |  |   <li>Open the example page /htmlarea/examples/core.html with your browser to make
 | 
  | 221 |  |   sure everything works.</li>
 | 
  | 222 |  | </ol>
 | 
  | 223 |  | 
 | 
  | 224 |  | <p>Once htmlArea is on your website all you need to do is add some
 | 
  | 225 |  | JavaScript to any pages that you want to add WYSIWYG editors to.  Here's how
 | 
  | 226 |  | to do that.</p>
 | 
  | 227 |  | 
 | 
  | 228 |  | <ol>
 | 
  | 229 |  | 
 | 
  | 230 |  |   <li>Define some global variables.  "_editor_url" has to be the absolute
 | 
  | 231 |  |   URL where HTMLArea resides within your
 | 
  | 232 |  |   website; as we discussed, this would be “/htmlarea/”.  "_editor_lang" must
 | 
  | 233 |  |   be the language code in which you want HTMLArea to appear.  This defaults
 | 
  | 234 |  |   to "en" (English); for a list of supported languages, please look into
 | 
  | 235 |  |   the "lang" subdirectory in the distribution.
 | 
  | 236 |  |   <pre class="code"
 | 
  | 237 |  |   ><span class="function-name"><</span><span class="html-tag">script</span> <span class="variable-name">type=</span><span class="string">"text/javascript"</span><span class="function-name">></span>
 | 
  | 238 |  |    _editor_url = <span class="string">"/htmlarea/"</span>;
 | 
  | 239 |  |    _editor_lang = <span class="string">"en"</span>;
 | 
  | 240 |  | <span class="function-name"><</span><span class="html-tag">/script</span><span class="function-name">></span></pre>
 | 
  | 241 |  | 
 | 
  | 242 |  |   <li>Include the "htmlarea.js" script:
 | 
  | 243 |  |   <pre class="code"
 | 
  | 244 |  |   ><span class="function-name"><</span><span class="html-tag">script</span> <span class="variable-name">type=</span><span class="string">"text/javascript"</span> <span class="variable-name">src=</span><span class="string">"/htmlarea/htmlarea.js"</span><span class="function-name">></span><span class="paren-face-match"><</span><span class="html-tag">/script</span><span class="paren-face-match">></span></pre>
 | 
  | 245 |  |   </li>
 | 
  | 246 |  | 
 | 
  | 247 |  |   <li><p>If you want to change all your <textarea>-s into
 | 
  | 248 |  |   HTMLArea-s then you can use the simplest way to create HTMLArea:</p>
 | 
  | 249 |  |   <pre class="code"
 | 
  | 250 |  |   ><span class="function-name"><</span><span class="html-tag">script</span> <span class="variable-name">type=</span><span class="string">"text/javascript"</span> <span class="variable-name">defer=</span><span class="string">"1"</span><span class="function-name">></span>
 | 
  | 251 |  |     HTMLArea.replaceAll<span class="function-name">()</span>;
 | 
  | 252 |  | <span class="paren-face-match"><</span><span class="html-tag">/script</span><span class="paren-face-match">></span></pre>
 | 
  | 253 |  |   <p><span class="note">Note:</span> you can also add the
 | 
  | 254 |  |   <code>HTMLArea.replaceAll()</code> code to the <code>onload</code>
 | 
  | 255 |  |   event handler for the <code>body</code> element, if you find it more appropriate.</p>
 | 
  | 256 |  | 
 | 
  | 257 |  |   <p>A different approach, if you have more than one textarea and only want
 | 
  | 258 |  |   to change one of them, is to use <code>HTMLArea.replace("id")</code> --
 | 
  | 259 |  |   pass the <code>id</code> of your textarea.  Do not use the
 | 
  | 260 |  |   <code>name</code> attribute anymore, it's not a standard solution!</p>
 | 
  | 261 |  | 
 | 
  | 262 |  | </ol>
 | 
  | 263 |  | 
 | 
  | 264 |  | <p>This section applies to HTMLArea-3.0 release candidate 1 or later; prior
 | 
  | 265 |  | to this version, one needed to include more files; however, now HTMLArea is
 | 
  | 266 |  | able to include other files too (such as stylesheet, language definition
 | 
  | 267 |  | file, etc.) so you only need to define the editor path and load
 | 
  | 268 |  | "htmlarea.js".  Nice, eh? ;-)</p>
 | 
  | 269 |  | 
 | 
  | 270 |  | <h3>I want to change the editor settings, how do I do that?</h3>
 | 
  | 271 |  | 
 | 
  | 272 |  | <p>While it's true that all you need is one line of JavaScript to create an
 | 
  | 273 |  | htmlArea WYSIWYG editor, you can also specify more config settings in the
 | 
  | 274 |  | code to control how the editor works and looks.  Here's an example of some of
 | 
  | 275 |  | the available settings:</p>
 | 
  | 276 |  | 
 | 
  | 277 |  | <pre class="code"
 | 
  | 278 |  | ><span class="keyword">var</span> <span class="variable-name">config</span> = <span class="keyword">new</span> HTMLArea.Config(); <span class="comment">// create a new configuration object
 | 
  | 279 |  | </span>                                    <span class="comment">// having all the default values
 | 
  | 280 |  | </span>config.width = '<span class="string">90%</span>';
 | 
  | 281 |  | config.height = '<span class="string">200px</span>';
 | 
  | 282 |  | 
 | 
  | 283 |  | <span class="comment">// the following sets a style for the page body (black text on yellow page)
 | 
  | 284 |  | // and makes all paragraphs be bold by default
 | 
  | 285 |  | </span>config.pageStyle =
 | 
  | 286 |  |   '<span class="string">body { background-color: yellow; color: black; font-family: verdana,sans-serif } </span>' +
 | 
  | 287 |  |   '<span class="string">p { font-width: bold; } </span>';
 | 
  | 288 |  | 
 | 
  | 289 |  | <span class="comment">// the following replaces the textarea with the given id with a new
 | 
  | 290 |  | // HTMLArea object having the specified configuration
 | 
  | 291 |  | </span>HTMLArea.replace('<span class="string">id</span>', config);</pre>
 | 
  | 292 |  | 
 | 
  | 293 |  | <p><span class="warning">Important:</span> It's recommended that you add
 | 
  | 294 |  | custom features and configuration to a separate file.  This will ensure you
 | 
  | 295 |  | that when we release a new official version of HTMLArea you'll have less
 | 
  | 296 |  | trouble upgrading it.</p>
 | 
  | 297 |  | 
 | 
  | 298 |  | <h3>How do I customize the toolbar?</h3>
 | 
  | 299 |  | 
 | 
  | 300 |  | <p>Using the configuration object introduced above allows you to completely
 | 
  | 301 |  | control what the toolbar contains.  Following is an example of a one-line,
 | 
  | 302 |  | customized toolbar, much simpler than the default one:</p>
 | 
  | 303 |  | 
 | 
  | 304 |  | <pre class="code"
 | 
  | 305 |  | ><span class="keyword">var</span> <span class="variable-name">config</span> = <span class="keyword">new</span> HTMLArea.Config();
 | 
  | 306 |  | config.toolbar = [
 | 
  | 307 |  |   ['<span class="string">fontname</span>', '<span class="string">space</span>',
 | 
  | 308 |  |    '<span class="string">fontsize</span>', '<span class="string">space</span>',
 | 
  | 309 |  |    '<span class="string">formatblock</span>', '<span class="string">space</span>',
 | 
  | 310 |  |    '<span class="string">bold</span>', '<span class="string">italic</span>', '<span class="string">underline</span>']
 | 
  | 311 |  | ];
 | 
  | 312 |  | HTMLArea.replace('<span class="string">id</span>', config);</pre>
 | 
  | 313 |  | 
 | 
  | 314 |  | <p>The toolbar is an Array of Array objects.  Each array in the toolbar
 | 
  | 315 |  | defines a new line.  The default toolbar looks like this:</p>
 | 
  | 316 |  | 
 | 
  | 317 |  | <pre class="code"
 | 
  | 318 |  | >config.toolbar = [
 | 
  | 319 |  | [ "<span class="string">fontname</span>", "<span class="string">space</span>",
 | 
  | 320 |  |   "<span class="string">fontsize</span>", "<span class="string">space</span>",
 | 
  | 321 |  |   "<span class="string">formatblock</span>", "<span class="string">space</span>",
 | 
  | 322 |  |   "<span class="string">bold</span>", "<span class="string">italic</span>", "<span class="string">underline</span>", "<span class="string">separator</span>",
 | 
  | 323 |  |   "<span class="string">strikethrough</span>", "<span class="string">subscript</span>", "<span class="string">superscript</span>", "<span class="string">separator</span>",
 | 
  | 324 |  |   "<span class="string">copy</span>", "<span class="string">cut</span>", "<span class="string">paste</span>", "<span class="string">space</span>", "<span class="string">undo</span>", "<span class="string">redo</span>" ],
 | 
  | 325 |  | 		
 | 
  | 326 |  | [ "<span class="string">justifyleft</span>", "<span class="string">justifycenter</span>", "<span class="string">justifyright</span>", "<span class="string">justifyfull</span>", "<span class="string">separator</span>",
 | 
  | 327 |  |   "<span class="string">insertorderedlist</span>", "<span class="string">insertunorderedlist</span>", "<span class="string">outdent</span>", "<span class="string">indent</span>", "<span class="string">separator</span>",
 | 
  | 328 |  |   "<span class="string">forecolor</span>", "<span class="string">hilitecolor</span>", "<span class="string">textindicator</span>", "<span class="string">separator</span>",
 | 
  | 329 |  |   "<span class="string">inserthorizontalrule</span>", "<span class="string">createlink</span>", "<span class="string">insertimage</span>", "<span class="string">inserttable</span>", "<span class="string">htmlmode</span>", "<span class="string">separator</span>",
 | 
  | 330 |  |   "<span class="string">popupeditor</span>", "<span class="string">separator</span>", "<span class="string">showhelp</span>", "<span class="string">about</span>" ]
 | 
  | 331 |  | ];</pre>
 | 
  | 332 |  | 
 | 
  | 333 |  | <p>Except three strings, all others in the examples above need to be defined
 | 
  | 334 |  | in the <code>config.btnList</code> object (detailed a bit later in this
 | 
  | 335 |  | document).  The three exceptions are: 'space', 'separator' and 'linebreak'.
 | 
  | 336 |  | These three have the following meaning, and need not be present in
 | 
  | 337 |  | <code>btnList</code>:</p>
 | 
  | 338 |  | 
 | 
  | 339 |  | <ul>
 | 
  | 340 |  |   <li>'space' -- Inserts a space of 5 pixels (the width is configurable by external
 | 
  | 341 |  |   <acronym title="Cascading Style Sheets">CSS</acronym>) at the current
 | 
  | 342 |  |   position in the toolbar.</li>
 | 
  | 343 |  |   <li>'separator' -- Inserts a small vertical separator, for visually grouping related
 | 
  | 344 |  |   buttons.</li>
 | 
  | 345 |  |   <li>'linebreak' -- Starts a new line in the toolbar.  Subsequent controls will be
 | 
  | 346 |  |   inserted on the new line.</li>
 | 
  | 347 |  | </ul>
 | 
  | 348 |  | 
 | 
  | 349 |  | <p><span class="warning">Important:</span> It's recommended that you add
 | 
  | 350 |  | custom features and configuration to a separate file.  This will ensure you
 | 
  | 351 |  | that when we release a new official version of HTMLArea you'll have less
 | 
  | 352 |  | trouble upgrading it.</p>
 | 
  | 353 |  | 
 | 
  | 354 |  | <h3>How do I create custom buttons?</h3>
 | 
  | 355 |  | 
 | 
  | 356 |  | <p>By design, the toolbar is easily extensible.  For adding a custom button
 | 
  | 357 |  | one needs to follow two steps.</p>
 | 
  | 358 |  | 
 | 
  | 359 |  | <h4 id="regbtn">1. Register the button in <code>config.btnList</code>.</h4>
 | 
  | 360 |  | 
 | 
  | 361 |  | <p>For each button in the toolbar, HTMLArea needs to know the following
 | 
  | 362 |  | information:</p>
 | 
  | 363 |  | <ul>
 | 
  | 364 |  |   <li>a name for it (we call it the ID of the button);</li>
 | 
  | 365 |  |   <li>the path to an image to be displayed in the toolbar;</li>
 | 
  | 366 |  |   <li>a tooltip for it;</li>
 | 
  | 367 |  |   <li>whether the button is enabled or not in text mode;</li>
 | 
  | 368 |  |   <li>what to do when the button is clicked;</li>
 | 
  | 369 |  | </ul>
 | 
  | 370 |  | <p>You need to provide all this information for registering a new button
 | 
  | 371 |  | too.  The button ID can be any string identifier and it's used when
 | 
  | 372 |  | defining the toolbar, as you saw above.  We recommend starting
 | 
  | 373 |  | it with "my-" so that it won't clash with the standard ID-s (those from
 | 
  | 374 |  | the default toolbar).</p>
 | 
  | 375 |  | 
 | 
  | 376 |  | <p class="note">Register button example #1</p>
 | 
  | 377 |  | 
 | 
  | 378 |  | <pre class="code"
 | 
  | 379 |  | ><span class="comment">// get a default configuration
 | 
  | 380 |  | </span><span class="keyword">var</span> <span class="variable-name">config</span> = <span class="keyword">new</span> HTMLArea.Config();
 | 
  | 381 |  | <span class="comment">// register the new button using Config.registerButton.
 | 
  | 382 |  | // parameters:        button ID,   tooltip,          image,           textMode,
 | 
  | 383 |  | </span>config.registerButton("<span class="string">my-hilite</span>", "<span class="string">Highlight text</span>", "<span class="string">my-hilite.gif</span>", <span class="keyword">false</span>,
 | 
  | 384 |  | <span class="comment">// function that gets called when the button is clicked
 | 
  | 385 |  | </span>  <span class="keyword">function</span>(editor, id) {
 | 
  | 386 |  |     editor.surroundHTML('<span class="string"><span class="hilite"></span>', '<span class="string"></span></span>');
 | 
  | 387 |  |   }
 | 
  | 388 |  | );</pre>
 | 
  | 389 |  | 
 | 
  | 390 |  | <p>An alternate way of calling registerButton is exemplified above.  Though
 | 
  | 391 |  | the code might be a little bit larger, using this form makes your code more
 | 
  | 392 |  | maintainable.  It doesn't even needs comments as it's pretty clear.</p>
 | 
  | 393 |  | 
 | 
  | 394 |  | <p class="note">Register button example #2</p>
 | 
  | 395 |  | 
 | 
  | 396 |  | <pre class="code"
 | 
  | 397 |  | ><span class="keyword">var</span> <span class="variable-name">config</span> = <span class="keyword">new</span> HTMLArea.Config();
 | 
  | 398 |  | config.registerButton({
 | 
  | 399 |  |   id        : "<span class="string">my-hilite</span>",
 | 
  | 400 |  |   tooltip   : "<span class="string">Highlight text</span>",
 | 
  | 401 |  |   image     : "<span class="string">my-hilite.gif</span>",
 | 
  | 402 |  |   textMode  : <span class="keyword">false</span>,
 | 
  | 403 |  |   action    : <span class="keyword">function</span>(editor, id) {
 | 
  | 404 |  |                 editor.surroundHTML('<span class="string"><span class="hilite"></span>', '<span class="string"></span></span>');
 | 
  | 405 |  |               }
 | 
  | 406 |  | });</pre>
 | 
  | 407 |  | 
 | 
  | 408 |  | <p>You might notice that the "action" function receives two parameters:
 | 
  | 409 |  | <b>editor</b> and <b>id</b>.  In the examples above we only used the
 | 
  | 410 |  | <b>editor</b> parameter.  But it could be helpful for you to understand
 | 
  | 411 |  | both:</p>
 | 
  | 412 |  | 
 | 
  | 413 |  | <ul>
 | 
  | 414 |  |   <li><b>editor</b> is a reference to the HTMLArea object.  Since our entire
 | 
  | 415 |  |   code now has an <acronym title="Object Oriented Programming">OOP</acronym>-like
 | 
  | 416 |  |   design, you need to have a reference to
 | 
  | 417 |  |   the editor object in order to do things with it.  In previous versions of
 | 
  | 418 |  |   HTMLArea, in order to identify the object an ID was used -- the ID of the
 | 
  | 419 |  |   HTML element.  In this version ID-s are no longer necessary.</li>
 | 
  | 420 |  | 
 | 
  | 421 |  |   <li><b>id</b> is the button ID.  Wondering why is this useful?  Well, you
 | 
  | 422 |  |   could use the same handler function (presuming that it's not an anonymous
 | 
  | 423 |  |   function like in the examples above) for more buttons.  You can <a
 | 
  | 424 |  |   href="#btnex">see an example</a> a bit later in this document.</li>
 | 
  | 425 |  | </ul>
 | 
  | 426 |  | 
 | 
  | 427 |  | <h4>2. Inserting it into the toolbar</h4>
 | 
  | 428 |  | 
 | 
  | 429 |  | <p>At this step you need to specify where in the toolbar to insert the
 | 
  | 430 |  | button, or just create the whole toolbar again as you saw in the previous
 | 
  | 431 |  | section.  You use the button ID, as shown in the examples of customizing the
 | 
  | 432 |  | toolbar in the previous section.</p>
 | 
  | 433 |  | 
 | 
  | 434 |  | <p>For the sake of completion, following there are another examples.</p>
 | 
  | 435 |  | 
 | 
  | 436 |  | <p class="note">Append your button to the default toolbar</p>
 | 
  | 437 |  | 
 | 
  | 438 |  | <pre class="code"
 | 
  | 439 |  | >config.toolbar.push([ "<span class="string">my-hilite</span>" ]);</pre>
 | 
  | 440 |  | 
 | 
  | 441 |  | <p class="note">Customized toolbar</p>
 | 
  | 442 |  | 
 | 
  | 443 |  | <pre class="code"
 | 
  | 444 |  | >config.toolbar = [
 | 
  | 445 |  |   ['<span class="string">fontname</span>', '<span class="string">space</span>',
 | 
  | 446 |  |    '<span class="string">fontsize</span>', '<span class="string">space</span>',
 | 
  | 447 |  |    '<span class="string">formatblock</span>', '<span class="string">space</span>',
 | 
  | 448 |  |    '<span class="string">separator</span>', '<span class="string">my-hilite</span>', '<span class="string">separator</span>', '<span class="string">space</span>', <span class="comment">// here's your button
 | 
  | 449 |  | </span>   '<span class="string">bold</span>', '<span class="string">italic</span>', '<span class="string">underline</span>', '<span class="string">space</span>']
 | 
  | 450 |  | ];</pre>
 | 
  | 451 |  | 
 | 
  | 452 |  | <p><span class="note">Note:</span> in the example above our new button is
 | 
  | 453 |  | between two vertical separators.  But this is by no means required.  You can
 | 
  | 454 |  | put it wherever you like.  Once registered in the btnList (<a
 | 
  | 455 |  | href="#regbtn">step 1</a>) your custom button behaves just like a default
 | 
  | 456 |  | button.</p>
 | 
  | 457 |  | 
 | 
  | 458 |  | <p><span class="warning">Important:</span> It's recommended that you add
 | 
  | 459 |  | custom features and configuration to a separate file.  This will ensure you
 | 
  | 460 |  | that when we release a new official version of HTMLArea you'll have less
 | 
  | 461 |  | trouble upgrading it.</p>
 | 
  | 462 |  | 
 | 
  | 463 |  | <h4 id="btnex">A complete example</h4>
 | 
  | 464 |  | 
 | 
  | 465 |  | <p>Please note that it is by no means necessary to include the following
 | 
  | 466 |  | code into the htmlarea.js file.  On the contrary, it might not work there.
 | 
  | 467 |  | The configuration system is designed such that you can always customize the
 | 
  | 468 |  | editor <em>from outside files</em>, thus keeping the htmlarea.js file
 | 
  | 469 |  | intact.  This will make it easy for you to upgrade your HTMLArea when we
 | 
  | 470 |  | release a new official version.  OK, I promise it's the last time I said
 | 
  | 471 |  | this. ;)</p>
 | 
  | 472 |  | 
 | 
  | 473 |  | <pre class="code"
 | 
  | 474 |  | ><span class="comment">// All our custom buttons will call this function when clicked.
 | 
  | 475 |  | // We use the <b>buttonId</b> parameter to determine what button
 | 
  | 476 |  | // triggered the call.
 | 
  | 477 |  | </span><span class="keyword">function</span> <span class="function-name">clickHandler</span>(editor, buttonId) {
 | 
  | 478 |  |   <span class="keyword">switch</span> (buttonId) {
 | 
  | 479 |  |     <span class="keyword">case</span> "<span class="string">my-toc</span>":
 | 
  | 480 |  |       editor.insertHTML("<span class="string"><h1>Table Of Contents</h1></span>");
 | 
  | 481 |  |       <span class="keyword">break</span>;
 | 
  | 482 |  |     <span class="keyword">case</span> "<span class="string">my-date</span>":
 | 
  | 483 |  |       editor.insertHTML((<span class="keyword">new</span> Date()).toString());
 | 
  | 484 |  |       <span class="keyword">break</span>;
 | 
  | 485 |  |     <span class="keyword">case</span> "<span class="string">my-bold</span>":
 | 
  | 486 |  |       editor.execCommand("<span class="string">bold</span>");
 | 
  | 487 |  |       editor.execCommand("<span class="string">italic</span>");
 | 
  | 488 |  |       <span class="keyword">break</span>;
 | 
  | 489 |  |     <span class="keyword">case</span> "<span class="string">my-hilite</span>":
 | 
  | 490 |  |       editor.surroundHTML("<span class="string"><span class=\"hilite\"></span>", "<span class="string"></span></span>");
 | 
  | 491 |  |       <span class="keyword">break</span>;
 | 
  | 492 |  |   }
 | 
  | 493 |  | };
 | 
  | 494 |  | 
 | 
  | 495 |  | <span class="comment">// Create a new configuration object
 | 
  | 496 |  | </span><span class="keyword">var</span> <span class="variable-name">config</span> = <span class="keyword">new</span> HTMLArea.Config();
 | 
  | 497 |  | 
 | 
  | 498 |  | <span class="comment">// Register our custom buttons
 | 
  | 499 |  | </span>config.registerButton("<span class="string">my-toc</span>",  "<span class="string">Insert TOC</span>", "<span class="string">my-toc.gif</span>", <span class="keyword">false</span>, clickHandler);
 | 
  | 500 |  | config.registerButton("<span class="string">my-date</span>", "<span class="string">Insert date/time</span>", "<span class="string">my-date.gif</span>", <span class="keyword">false</span>, clickHandler);
 | 
  | 501 |  | config.registerButton("<span class="string">my-bold</span>", "<span class="string">Toggle bold/italic</span>", "<span class="string">my-bold.gif</span>", <span class="keyword">false</span>, clickHandler);
 | 
  | 502 |  | config.registerButton("<span class="string">my-hilite</span>", "<span class="string">Hilite selection</span>", "<span class="string">my-hilite.gif</span>", <span class="keyword">false</span>, clickHandler);
 | 
  | 503 |  | 
 | 
  | 504 |  | <span class="comment">// Append the buttons to the default toolbar
 | 
  | 505 |  | </span>config.toolbar.push(["<span class="string">linebreak</span>", "<span class="string">my-toc</span>", "<span class="string">my-date</span>", "<span class="string">my-bold</span>", "<span class="string">my-hilite</span>"]);
 | 
  | 506 |  | 
 | 
  | 507 |  | <span class="comment">// Replace an existing textarea with an HTMLArea object having the above config.
 | 
  | 508 |  | </span>HTMLArea.replace("<span class="string">textAreaID</span>", config);</pre>
 | 
  | 509 |  | 
 | 
  | 510 |  | 
 | 
  | 511 |  | <hr />
 | 
  | 512 |  | <address>© <a href="http://interactivetools.com" title="Visit our website"
 | 
  | 513 |  | >InteractiveTools.com</a> 2002-2004.
 | 
  | 514 |  | <br />
 | 
  | 515 |  | © <a href="http://dynarch.com">dynarch.com</a> 2003-2004<br />
 | 
  | 516 |  | HTMLArea v3.0 developed by <a
 | 
  | 517 |  | href="http://dynarch.com/mishoo/">Mihai Bazon</a>.
 | 
  | 518 |  | <br />
 | 
  | 519 |  | Documentation written by Mihai Bazon.
 | 
  | 520 |  | </address>
 | 
  | 521 |  | <!-- hhmts start --> Last modified: Wed Jan 28 12:18:23 EET 2004 <!-- hhmts end -->
 | 
  | 522 |  | <!-- doc-lang: English -->
 | 
  | 523 |  | </body> </html>
 | 
 
""