[pLog-svn] r949 - in plog/trunk/js/htmlarea: . docs images lang
plugins plugins/CSS plugins/CSS/lang plugins/CharacterMap
plugins/CharacterMap/img plugins/CharacterMap/lang
plugins/CharacterMap/popups plugins/ContextMenu
plugins/ContextMenu/lang plugins/DynamicCSS
plugins/DynamicCSS/lang plugins/EnterParagraphs
plugins/EnterParagraphs/lang plugins/FullPage
plugins/FullPage/lang plugins/FullPage/popups
plugins/HtmlTidy plugins/HtmlTidy/img plugins/HtmlTidy/lang
plugins/ListType plugins/ListType/lang plugins/SpellChecker
plugins/SpellChecker/img plugins/SpellChecker/lang
plugins/TableOperations plugins/TableOperations/lang popups
mark at devel.plogworld.net
mark at devel.plogworld.net
Sat Feb 5 15:29:38 GMT 2005
Author: mark
Date: 2005-02-05 15:29:38 +0000 (Sat, 05 Feb 2005)
New Revision: 949
Added:
plog/trunk/js/htmlarea/docs/
plog/trunk/js/htmlarea/docs/index.html
plog/trunk/js/htmlarea/docs/license.txt
plog/trunk/js/htmlarea/docs/reference.html
plog/trunk/js/htmlarea/docs/release-notes.html
plog/trunk/js/htmlarea/images/ed_killword.gif
plog/trunk/js/htmlarea/images/ed_print.gif
plog/trunk/js/htmlarea/images/ed_rmformat.gif
plog/trunk/js/htmlarea/lang/ch.js
plog/trunk/js/htmlarea/plugins/CharacterMap/
plog/trunk/js/htmlarea/plugins/CharacterMap/character-map.js
plog/trunk/js/htmlarea/plugins/CharacterMap/img/
plog/trunk/js/htmlarea/plugins/CharacterMap/img/ed_charmap.gif
plog/trunk/js/htmlarea/plugins/CharacterMap/lang/
plog/trunk/js/htmlarea/plugins/CharacterMap/lang/de.js
plog/trunk/js/htmlarea/plugins/CharacterMap/lang/en.js
plog/trunk/js/htmlarea/plugins/CharacterMap/popups/
plog/trunk/js/htmlarea/plugins/CharacterMap/popups/select_character.html
plog/trunk/js/htmlarea/plugins/ContextMenu/lang/fr.js
plog/trunk/js/htmlarea/plugins/ContextMenu/lang/he.js
plog/trunk/js/htmlarea/plugins/DynamicCSS/
plog/trunk/js/htmlarea/plugins/DynamicCSS/dynamiccss.js
plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/
plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/de.js
plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/en.js
plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/fr.js
plog/trunk/js/htmlarea/plugins/EnterParagraphs/
plog/trunk/js/htmlarea/plugins/EnterParagraphs/enter-paragraphs.js
plog/trunk/js/htmlarea/plugins/EnterParagraphs/lang/
plog/trunk/js/htmlarea/plugins/EnterParagraphs/lang/en.js
plog/trunk/js/htmlarea/plugins/FullPage/lang/de.js
plog/trunk/js/htmlarea/plugins/FullPage/lang/fr.js
plog/trunk/js/htmlarea/plugins/FullPage/lang/he.js
plog/trunk/js/htmlarea/plugins/HtmlTidy/
plog/trunk/js/htmlarea/plugins/HtmlTidy/README
plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy-config.cfg
plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy-logic.php
plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy.js
plog/trunk/js/htmlarea/plugins/HtmlTidy/img/
plog/trunk/js/htmlarea/plugins/HtmlTidy/img/html-tidy.gif
plog/trunk/js/htmlarea/plugins/HtmlTidy/lang/
plog/trunk/js/htmlarea/plugins/HtmlTidy/lang/en.js
plog/trunk/js/htmlarea/plugins/ListType/
plog/trunk/js/htmlarea/plugins/ListType/lang/
plog/trunk/js/htmlarea/plugins/ListType/lang/de.js
plog/trunk/js/htmlarea/plugins/ListType/lang/en.js
plog/trunk/js/htmlarea/plugins/ListType/list-type.js
plog/trunk/js/htmlarea/plugins/SpellChecker/img/he-spell-check.gif
plog/trunk/js/htmlarea/plugins/SpellChecker/lang/he.js
plog/trunk/js/htmlarea/plugins/SpellChecker/lang/nl.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/fr.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/he.js
Removed:
plog/trunk/js/htmlarea/htmlarea-lang-en.js
plog/trunk/js/htmlarea/license.txt
Modified:
plog/trunk/js/htmlarea/dialog.js
plog/trunk/js/htmlarea/htmlarea-plog.js
plog/trunk/js/htmlarea/htmlarea.css
plog/trunk/js/htmlarea/htmlarea.js
plog/trunk/js/htmlarea/images/ed_delete.gif
plog/trunk/js/htmlarea/images/ed_link.gif
plog/trunk/js/htmlarea/images/insert_table.gif
plog/trunk/js/htmlarea/lang/b5.js
plog/trunk/js/htmlarea/lang/cz.js
plog/trunk/js/htmlarea/lang/da.js
plog/trunk/js/htmlarea/lang/de.js
plog/trunk/js/htmlarea/lang/ee.js
plog/trunk/js/htmlarea/lang/el.js
plog/trunk/js/htmlarea/lang/en.js
plog/trunk/js/htmlarea/lang/es.js
plog/trunk/js/htmlarea/lang/fi.js
plog/trunk/js/htmlarea/lang/fr.js
plog/trunk/js/htmlarea/lang/gb.js
plog/trunk/js/htmlarea/lang/he.js
plog/trunk/js/htmlarea/lang/hu.js
plog/trunk/js/htmlarea/lang/it.js
plog/trunk/js/htmlarea/lang/ja-euc.js
plog/trunk/js/htmlarea/lang/ja-jis.js
plog/trunk/js/htmlarea/lang/ja-sjis.js
plog/trunk/js/htmlarea/lang/ja-utf8.js
plog/trunk/js/htmlarea/lang/lt.js
plog/trunk/js/htmlarea/lang/lv.js
plog/trunk/js/htmlarea/lang/nb.js
plog/trunk/js/htmlarea/lang/nl.js
plog/trunk/js/htmlarea/lang/no.js
plog/trunk/js/htmlarea/lang/pl.js
plog/trunk/js/htmlarea/lang/pt_br.js
plog/trunk/js/htmlarea/lang/ro.js
plog/trunk/js/htmlarea/lang/ru.js
plog/trunk/js/htmlarea/lang/se.js
plog/trunk/js/htmlarea/lang/si.js
plog/trunk/js/htmlarea/lang/vn.js
plog/trunk/js/htmlarea/plugins/CSS/css.js
plog/trunk/js/htmlarea/plugins/CSS/lang/en.js
plog/trunk/js/htmlarea/plugins/ContextMenu/context-menu.js
plog/trunk/js/htmlarea/plugins/ContextMenu/lang/de.js
plog/trunk/js/htmlarea/plugins/ContextMenu/lang/el.js
plog/trunk/js/htmlarea/plugins/ContextMenu/lang/en.js
plog/trunk/js/htmlarea/plugins/ContextMenu/lang/nl.js
plog/trunk/js/htmlarea/plugins/ContextMenu/menu.css
plog/trunk/js/htmlarea/plugins/FullPage/full-page.js
plog/trunk/js/htmlarea/plugins/FullPage/lang/en.js
plog/trunk/js/htmlarea/plugins/FullPage/lang/ro.js
plog/trunk/js/htmlarea/plugins/FullPage/popups/docprop.html
plog/trunk/js/htmlarea/plugins/FullPage/test.html
plog/trunk/js/htmlarea/plugins/SpellChecker/lang/cz.js
plog/trunk/js/htmlarea/plugins/SpellChecker/lang/da.js
plog/trunk/js/htmlarea/plugins/SpellChecker/lang/de.js
plog/trunk/js/htmlarea/plugins/SpellChecker/lang/en.js
plog/trunk/js/htmlarea/plugins/SpellChecker/lang/hu.js
plog/trunk/js/htmlarea/plugins/SpellChecker/lang/it.js
plog/trunk/js/htmlarea/plugins/SpellChecker/lang/ro.js
plog/trunk/js/htmlarea/plugins/SpellChecker/readme-tech.html
plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-logic.cgi
plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-style.css
plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-ui.html
plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-ui.js
plog/trunk/js/htmlarea/plugins/SpellChecker/spell-checker.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/cz.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/da.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/de.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/el.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/en.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/fi.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/hu.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/it.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/nl.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/no.js
plog/trunk/js/htmlarea/plugins/TableOperations/lang/ro.js
plog/trunk/js/htmlarea/plugins/TableOperations/table-operations.js
plog/trunk/js/htmlarea/popupdiv.js
plog/trunk/js/htmlarea/popups/about.html
plog/trunk/js/htmlarea/popups/blank.html
plog/trunk/js/htmlarea/popups/custom2.html
plog/trunk/js/htmlarea/popups/editor_help.html
plog/trunk/js/htmlarea/popups/fullscreen.html
plog/trunk/js/htmlarea/popups/insert_image.html
plog/trunk/js/htmlarea/popups/insert_table.html
plog/trunk/js/htmlarea/popups/link.html
plog/trunk/js/htmlarea/popups/old-fullscreen.html
plog/trunk/js/htmlarea/popups/old_insert_image.html
plog/trunk/js/htmlarea/popups/popup.js
plog/trunk/js/htmlarea/popups/select_color.html
plog/trunk/js/htmlarea/popupwin.js
Log:
Upgrade to HTMLArea RC3. With the following tweak and plugins:
1. Convert ASCII(160) to ASCII(32)
2. EnterParagraphs Plugins for <p> and <br> in Mozilla and IE
3. Tweak for Source Code Formation
Mark
Modified: plog/trunk/js/htmlarea/dialog.js
===================================================================
--- plog/trunk/js/htmlarea/dialog.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/dialog.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,63 +1,74 @@
-// Though "Dialog" looks like an object, it isn't really an object. Instead
-// it's just namespace for protecting global symbols.
-
-function Dialog(url, action, init, scrollbar ) {
- if (typeof init == "undefined") {
- init = window; // pass this window object by default
- }
- Dialog._geckoOpenModal(url, action, init, scrollbar );
-};
-
-Dialog._parentEvent = function(ev) {
- if (Dialog._modal && !Dialog._modal.closed) {
- Dialog._modal.focus();
- //setTimeout(function(){Dialog._modal.focus();}, 1);
- HTMLArea._stopEvent(ev);
- }
-};
-
-// should be a function, the return handler of the currently opened dialog.
-Dialog._return = null;
-
-// constant, the currently opened dialog
-Dialog._modal = null;
-
-// the dialog will read it's args from this variable
-Dialog._arguments = null;
-
-Dialog._geckoOpenModal = function(url, action, init, scrollbar) {
- if( scrollbar )
- wndParams = "toolbar=no,menubar=no,personalbar=no,width=10,height=10,scrollbars=yes,resizable=yes";
- else
- wndParams = "toolbar=no,menubar=no,personalbar=no,width=10,height=10,scrollbars=no,resizable=yes";
-
- var dlg = window.open(url, "hadialog", wndParams );
- Dialog._modal = dlg;
- Dialog._arguments = init;
-
- // capture some window's events
- function capwin(w) {
- HTMLArea._addEvent(w, "click", Dialog._parentEvent);
- HTMLArea._addEvent(w, "mousedown", Dialog._parentEvent);
- HTMLArea._addEvent(w, "focus", Dialog._parentEvent);
- };
- // release the captured events
- function relwin(w) {
- HTMLArea._removeEvent(w, "click", Dialog._parentEvent);
- HTMLArea._removeEvent(w, "mousedown", Dialog._parentEvent);
- HTMLArea._removeEvent(w, "focus", Dialog._parentEvent);
- };
- capwin(window);
- // capture other frames
- for (var i = 0; i < window.frames.length; capwin(window.frames[i++]));
- // make up a function to be called when the Dialog ends.
- Dialog._return = function (val) {
- if (val && action) {
- action(val);
- }
- relwin(window);
- // capture other frames
- for (var i = 0; i < window.frames.length; relwin(window.frames[i++]));
- Dialog._modal = null;
- };
-};
\ No newline at end of file
+// htmlArea v3.0 - Copyright (c) 2003-2005 dynarch.com
+// 2002-2003 interactivetools.com, inc.
+// This copyright notice MUST stay intact for use (see license.txt).
+//
+// Portions (c) dynarch.com, 2003-2004
+//
+// A free WYSIWYG editor replacement for <textarea> fields.
+// For full source code and docs, visit http://www.interactivetools.com/
+//
+// Version 3.0 developed by Mihai Bazon.
+// http://dynarch.com/mishoo
+//
+// $Id: dialog.js,v 1.7 2005/01/20 17:49:04 mishoo Exp $
+
+// Though "Dialog" looks like an object, it isn't really an object. Instead
+// it's just namespace for protecting global symbols.
+
+function Dialog(url, action, init) {
+ if (typeof init == "undefined") {
+ init = window; // pass this window object by default
+ }
+ Dialog._geckoOpenModal(url, action, init);
+};
+
+Dialog._parentEvent = function(ev) {
+ setTimeout( function() { if (Dialog._modal && !Dialog._modal.closed) { Dialog._modal.focus() } }, 50);
+ if (Dialog._modal && !Dialog._modal.closed) {
+ HTMLArea._stopEvent(ev);
+ }
+};
+
+
+// should be a function, the return handler of the currently opened dialog.
+Dialog._return = null;
+
+// constant, the currently opened dialog
+Dialog._modal = null;
+
+// the dialog will read it's args from this variable
+Dialog._arguments = null;
+
+Dialog._geckoOpenModal = function(url, action, init) {
+ var dlg = window.open(url, "hadialog",
+ "toolbar=no,menubar=no,personalbar=no,width=10,height=10," +
+ "scrollbars=no,resizable=yes,modal=yes,dependable=yes");
+ Dialog._modal = dlg;
+ Dialog._arguments = init;
+
+ // capture some window's events
+ function capwin(w) {
+ HTMLArea._addEvent(w, "click", Dialog._parentEvent);
+ HTMLArea._addEvent(w, "mousedown", Dialog._parentEvent);
+ HTMLArea._addEvent(w, "focus", Dialog._parentEvent);
+ };
+ // release the captured events
+ function relwin(w) {
+ HTMLArea._removeEvent(w, "click", Dialog._parentEvent);
+ HTMLArea._removeEvent(w, "mousedown", Dialog._parentEvent);
+ HTMLArea._removeEvent(w, "focus", Dialog._parentEvent);
+ };
+ capwin(window);
+ // capture other frames
+ for (var i = 0; i < window.frames.length; capwin(window.frames[i++]));
+ // make up a function to be called when the Dialog ends.
+ Dialog._return = function (val) {
+ if (val && action) {
+ action(val);
+ }
+ relwin(window);
+ // capture other frames
+ for (var i = 0; i < window.frames.length; relwin(window.frames[i++]));
+ Dialog._modal = null;
+ };
+};
Added: plog/trunk/js/htmlarea/docs/index.html
===================================================================
--- plog/trunk/js/htmlarea/docs/index.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/docs/index.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
+<html>
+ <head>
+ <title>HTMLArea -- the free, customizable online editor</title>
+
+ <style type="text/css">
+ html, body { font-family: georgia,"times new roman",serif; background-color: #fff; color: #000; }
+ .label { text-align: right; padding-right: 0.3em; }
+ .bline { border-bottom: 1px solid #aaa; }
+ </style>
+ </head>
+
+ <body>
+ <div style="float: right; border: 1px solid #aaa; background-color: #eee; padding: 3px; margin-left: 10px; margin-bottom: 10px;">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td class="label">Version:</td><td>3.0</td>
+ </tr>
+ <tr>
+ <td class="label">Release:</td><td>RC3 (<a href="release-notes.html">release notes</a>)</td>
+ </tr>
+ <tr>
+ <td class="label bline">Compiled at:</td><td class="bline">Jan , 2005 [23:43] GMT</td>
+ </tr>
+ <tr>
+ <td class="label">SourceForge page:</td><td><a href="http://sf.net/projects/itools-htmlarea/">http://sf.net/projects/itools-htmlarea/</a></td>
+ </table>
+ </div>
+ <h1>HTMLArea -- the free<br/>customizable online editor</h1>
+
+ <p>
+ HTMLArea is a free, customizable online editor. It works inside your
+ browser. It uses a non-standard feature implemented in Internet
+ Explorer 5.5 or better for Windows and Mozilla 1.3 or better (any
+ platform), therefore it will only work in one of these browsers.
+ </p>
+
+ <p>
+ HTMLArea is copyright <a
+ href="http://interactivetools.com">InteractiveTools.com</a> and <a
+ href="http://dynarch.com">Dynarch.com</a> and it is
+ released under a BSD-style license. HTMLArea is created and developed
+ upto version 2.03 by InteractiveTools.com. Version 3.0 developed by
+ <a href="http://dynarch.com/mishoo/">Mihai Bazon</a> for
+ InteractiveTools. It contains code sponsored by third-party companies as well.
+ Please see our About Box for details about who sponsored what plugins.
+ </p>
+
+ <h2><a href="examples/">Online demos</a></h2>
+
+ <ul>
+
+ <li><a href="examples/core.html">HTMLArea standard</a> -- contains the core
+ editor.</li>
+
+ <li><a href="examples/table-operations.html">HTMLArea + tables</a> --
+ loads the <tt>TableOperations</tt> plugin which provides some extra
+ editing features for tables.</li>
+
+ <li><a href="examples/spell-checker.html">HTMLArea + spell checher</a>
+ -- loads the <tt>SpellChecker</tt> plugin which provides what its
+ name says: a spell checker. This one requires additional support on
+ the server-side.</li>
+
+ <li><a href="examples/full-page.html">HTMLArea Full HTML Editor</a> --
+ loads the <tt>FullPage</tt> plugin which allows you to edit a full
+ HTML page, including <title>, <!DOCTYPE...> and some
+ other options.</li>
+
+ <li><a href="examples/context-menu.html">HTMLArea with Context
+ Menu</a> -- this plugin provides a nice and useful context menu.</li>
+
+ <li><a href="examples/fully-loaded.html">HTMLArea fully loaded</a> --
+ all of the above. ;-)</li>
+
+ </ul>
+
+ <h2>Installation</h2>
+
+ <p>
+ Installation is (or should be) easy. You need to unpack the ZIP file
+ in a directory accessible through your webserver. Supposing you
+ unpack in your <tt>DocumentRoot</tt> and your <tt>DocumentRoot</tt> is
+ <tt>/var/www/html</tt> as in a standard RedHat installation, you need
+ to acomplish the following steps: (the example is for a Unix-like
+ operating system)
+ </p>
+
+ <pre style="margin-left: 2em"
+>
+cd /var/www/html
+unzip /path/to/archive/HTMLArea-3.0-RC3.zip
+mv HTMLArea-3.0-RC3 htmlarea
+find htmlarea/ -type f -exec chmod 644 {} \;
+find htmlarea/ -type d -exec chmod 755 {} \;
+find htmlarea/ -name "*.cgi" -exec chmod 755 {} \;</pre>
+
+ <p>
+ <strong>Notes.</strong> You may chose to symlink "htmlarea" to "HTMLArea-3.0-RC3", in which case your server needs to be configured to
+ "<tt>FollowSymLinks</tt>". You need to make sure that *.cgi files are
+ interpreted as CGI scripts. If you want to use the SpellChecker
+ plugin you need to have a recent version of Perl installed (I
+ recommend 5.8.0) on the server, and the module Text::Aspell, available
+ from CPAN. More info in "<a
+ href="plugins/SpellChecker/readme-tech.html">plugins/SpellChecker/readme-tech.html</a>".
+ </p>
+
+ <p>About how to setup your pages to use the editor, please read the
+ [outdated yet generally valid] <a
+ href="reference.html">documentation</a>.</p>
+
+ <h2>Status and links</h2>
+
+ <p>HTMLArea has reached version 3.0. As of this version, it
+ supports:</p>
+
+ <ul>
+
+ <li>Customizable toolbar</li>
+
+ <li>Easy internationalization</li>
+
+ <li>Plugin-based infrastructure</li>
+
+ <li>Delivers W3-compliant HTML (with few exceptions)</li>
+
+ <li>Has a subset of Microsoft Word's keyboard shortcuts</li>
+
+ <li>Full-screen editor</li>
+
+ <li>Advanced table operations (by external plugin
+ "TableOperations")</li>
+
+ <li>Spell checker (by external plugin "SpellChecker")</li>
+
+ <li>probably more... ;-)</li>
+
+ </ul>
+
+ <p>We have a <a
+ href="http://sourceforge.net/projects/itools-htmlarea/">project page</a>
+ at <a href="http://sourceforge.net">SourceForge.net</a>. There you can
+ also find out <a href="http://sourceforge.net/cvs/?group_id=69750">how
+ to retrieve the code from CVS</a>, or you can <a
+ href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/itools-htmlarea">browse
+ the CVS online</a>. We also have a <a
+ href="http://sourceforge.net/tracker/?atid=525656&group_id=69750&func=browse">bug
+ system</a>, a <a
+ href="http://sourceforge.net/tracker/?atid=525658&group_id=69750&func=browse">patch
+ tracking system</a> and a <a
+ href="http://sourceforge.net/tracker/?atid=525659&group_id=69750&func=browse">feature
+ request page</a>.</p>
+
+ <p>We invite you to say everything you want about HTMLArea <a
+ href="http://www.htmlarea.com/forum/">on the
+ forums</a> at InteractiveTools.com. There you should also find the
+ latest news.</p>
+
+ <h2>"It doesn't work, what's wrong?"</h2>
+
+ <p>If it doesn't work, you have several options:</p>
+
+ <ul>
+
+ <li>Post a message to the forum. Describe your problem in as much
+ detail as possible. Include errors you might find in the JavaScript
+ console (if you are a Mozilla user), or errors displayed by IE (though
+ they're most of the times useless).</li>
+
+ <li>If you're positive that you discovered a bug in HTMLArea then feel
+ free to fill a bug report in our bug system. If you have the time you
+ should check to see if a similar bug was reported or not; it might be
+ fixed already in the CVS ;-) If you're positive that a similar bug was
+ not yet reported, do fill a bug report and please include as much
+ detail as possible, such as your browser, OS, errors from JavaScript
+ console, etc.</li>
+
+ <li>If you want a new feature to be implemented, post it on the
+ features request and someone will hopefully take care of it.</li>
+
+ </ul>
+
+ <hr />
+<!-- Created: Sun Aug 3 14:11:26 EEST 2003 -->
+<!-- hhmts start --> Last modified: Wed Jul 14 13:20:53 CEST 2004 <!-- hhmts end -->
+<!-- doc-lang: English -->
+ </body>
+</html>
+
+
Added: plog/trunk/js/htmlarea/docs/license.txt
===================================================================
--- plog/trunk/js/htmlarea/docs/license.txt 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/docs/license.txt 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,30 @@
+htmlArea License (based on BSD license)
+Copyright (c) 2002-2004, interactivetools.com, inc.
+Copyright (c) 2003-2005 dynarch.com
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1) Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+2) Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3) Neither the name of interactivetools.com, inc. nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
Added: plog/trunk/js/htmlarea/docs/reference.html
===================================================================
--- plog/trunk/js/htmlarea/docs/reference.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/docs/reference.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,523 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
+<html> <head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>HTMLArea-3.0 Reference</title>
+
+<style type="text/css">
+ @import url(htmlarea.css);
+ body { font: 14px verdana,sans-serif; background: #fff; color: #000; }
+ h1, h2 { font-family:tahoma,sans-serif; }
+ h1 { border-bottom: 2px solid #000; }
+ h2 { border-bottom: 1px solid #aaa; }
+ h3, h4 { margin-bottom: 0px; font-family: Georgia,serif; font-style: italic; }
+ h4 { font-size: 90%; margin-left: 1em; }
+ acronym { border-bottom: 1px dotted #063; color: #063; }
+ p { margin-left: 2em; margin-top: 0.3em; }
+ li p { margin-left: 0px; }
+ .abstract { padding: 5px; margin: 0px 10em; font-size: 90%; border: 1px dashed #aaa; background: #eee;}
+ li { margin-left: 2em; }
+ em { color: #042; }
+ a { color: #00f; }
+ a:hover { color: #f00; }
+ a:active { color: #f80; }
+ span.browser { font-weight: bold; color: #864; }
+ .fixme { font-size: 20px; font-weight: bold; color: red; background: #fab;
+padding: 5px; text-align: center; }
+ .code {
+ background: #e4efff; padding: 5px; border: 1px dashed #abc; margin-left: 2em; margin-right: 2em;
+ font-family: fixed,"lucidux mono","andale mono","courier new",monospace;
+ }
+ .note, .warning { font-weight: bold; color: #0a0; font-variant: small-caps; }
+ .warning { color: #a00; }
+
+.string {
+ color: #06c;
+} /* font-lock-string-face */
+.comment {
+ color: #840;
+} /* font-lock-comment-face */
+.variable-name {
+ color: #000;
+} /* font-lock-variable-name-face */
+.type {
+ color: #008;
+ font-weight: bold;
+} /* font-lock-type-face */
+.reference {
+ color: #048;
+} /* font-lock-reference-face */
+.preprocessor {
+ color: #808;
+} /* font-lock-preprocessor-face */
+.keyword {
+ color: #00f;
+ font-weight: bold;
+} /* font-lock-keyword-face */
+.function-name {
+ color: #044;
+} /* font-lock-function-name-face */
+.html-tag {
+ font-weight: bold;
+} /* html-tag-face */
+.html-helper-italic {
+ font-style: italic;
+} /* html-helper-italic-face */
+.html-helper-bold {
+ font-weight: bold;
+} /* html-helper-bold-face */
+
+</style>
+
+<script type="text/javascript">
+ _editor_url = './';
+ _editor_lang = 'en';
+</script>
+<script type="text/javascript" src="htmlarea.js"></script>
+<script type="text/javascript" src="dialog.js"></script>
+<script tyle="text/javascript" src="lang/en.js"></script>
+
+</head>
+
+<body onload="HTMLArea.replace('TA')">
+
+
+<h1>HTMLArea-3.0 Documentation</h1>
+
+<div class="abstract" style="color: red; font-weight: bold">
+
+ This documentation contains valid information, but is outdated in the
+ terms that it does not covers all the features of HTMLArea. A new
+ documentation project will be started, based on LaTeX.
+
+</div>
+
+
+<h2>Introduction</h2>
+
+<h3>What is HTMLArea?</h3>
+
+<p>HTMLArea is a free <acronym title="What You See Is What You Get"
+>WYSIWYG</acronym> editor replacement for <code><textarea></code>
+fields. By adding a few simple lines of JavaScript code to your web page
+you can replace a regular textarea with a rich text editor that lets your
+users do the following:</p>
+
+<ul>
+ <li>Format text to be bold, italicized, or underlined.</li>
+ <li>Change the face, size, style and color.</li>
+ <li>Left, center, or right-justify paragraphs.</li>
+ <li>Make bulleted or numbered lists.</li>
+ <li>Indent or un-indent paragraphs.</li>
+ <li>Insert a horizontal line.</li>
+ <li>Insert hyperlinks and images.</li>
+ <li>View the raw HTML source of what they're editing.</li>
+ <li>and much more...</li>
+</ul>
+
+<p>Some of the interesting features of HTMLArea that set's it apart from
+other web based WYSIWYG editors are as follows:</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>Generates clean, valid HTML.</li>
+ <li>It degrades gracefully to older or non-supported browsers
+ (they get the original textarea field).</li>
+ <li>It's free and can be incorporated into any free or commercial
+ program.</li>
+ <li>It works with any server-side languages (ASP, PHP, Perl, Java,
+ etc).</li>
+ <li>It's written in 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>Since it replaces existing textareas it doesn't require a lot of code
+ to add it to your pages (just one line).</li>
+ <li>Did we mention it was free? ;-)</li>
+</ul>
+
+<h3>Is it really free? What's the catch?</h3>
+
+<p>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.</p>
+
+<h3>What are the browser requirements?</h3>
+
+<p>HTMLArea requires <span class="browser"><a
+href="http://www.microsoft.com/ie">Internet Explorer</a> >= 5.5</span>
+(Windows only), or <span class="browser"><a
+href="http://mozilla.org">Mozilla</a> >= 1.3-Beta</span> on any platform.
+Any browser based on <a href="http://mozilla.org/newlayout">Gecko</a> will
+also work, provided that Gecko version is at least the one included in
+Mozilla-1.3-Beta (for example, <a
+href="http://galeon.sf.net">Galeon-1.2.8</a>). However, it degrades
+gracefully to other browsers. They will get a regular textarea field
+instead of a WYSIWYG editor.</p>
+
+<h3>Can I see an example of what it looks like?</h3>
+
+<p>Just make sure you're using one of the browsers mentioned above and see
+below.</p>
+
+<form onsubmit="return false;">
+<textarea id="TA" style="width: 100%; height: 15em;">
+<p>Here is some sample text in textarea that's been transformed with <font
+color="#0000CC"><b>HTMLArea</b></font>.<br />
+You can make things <b>bold</b>, <i>italic</i>, <u>underline</u>. You can change the
+<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>
+And lots more...</p>
+
+<p align="center"><font size="4" color="#ff0000"><b><u>Try HTMLArea
+today!</u></b></font><br /></p>
+</textarea>
+</form>
+
+<h3>Where can I find out more info, download the latest version and talk to
+other HTMLArea users?</h3>
+
+<p>You can find out more about HTMLArea and download the latest version on
+the <a href="http://www.htmlarea.com/">HTMLArea
+homepage</a> and you can talk to other HTMLArea users and post any comments
+or suggestions you have in the <a
+href="http://www.htmlarea.com/forum/"
+>HTMLArea forum</a>.</p>
+
+<h2>Keyboard shortcuts</h2>
+
+<p>The editor provides the following key combinations:</p>
+
+<ul>
+ <li>CTRL-A -- select all</li>
+ <li>CTRL-B -- bold</li>
+ <li>CTRL-I -- italic</li>
+ <li>CTRL-U -- underline</li>
+ <li>CTRL-S -- strikethrough</li>
+ <li>CTRL-L -- justify left</li>
+ <li>CTRL-E -- justify center</li>
+ <li>CTRL-R -- justify right</li>
+ <li>CTRL-J -- justify full</li>
+ <li>CTRL-1 .. CTRL-6 -- headings (<h1> .. <h6>)</li>
+ <li>CTRL-0 (zero) -- clean content pasted from Word</li>
+</ul>
+
+<h2>Installation</h2>
+
+<h3>How do I add HTMLArea to my web page?</h3>
+
+<p>It's easy. First you need to upload HTMLArea files to your website.
+Just follow these steps.</p>
+
+<ol>
+ <li>Download the latest version from the <a
+ href="http://www.htmlarea.com/">htmlArea
+ homepage</a>.</li>
+ <li>Unzip the files onto your local computer (making sure to maintain the
+ directory structure contained in the zip).</li>
+ <li>Create a new folder on your website called /htmlarea/ (make sure it's
+ NOT inside the cgi-bin).</li>
+ <li>Transfer all the HTMLArea files from your local computer into the
+ /htmlarea/ folder on your website.</li>
+ <li>Open the example page /htmlarea/examples/core.html with your browser to make
+ sure everything works.</li>
+</ol>
+
+<p>Once htmlArea is on your website all you need to do is add some
+JavaScript to any pages that you want to add WYSIWYG editors to. Here's how
+to do that.</p>
+
+<ol>
+
+ <li>Define some global variables. "_editor_url" has to be the absolute
+ URL where HTMLArea resides within your
+ website; as we discussed, this would be â/htmlarea/â. "_editor_lang" must
+ be the language code in which you want HTMLArea to appear. This defaults
+ to "en" (English); for a list of supported languages, please look into
+ the "lang" subdirectory in the distribution.
+ <pre class="code"
+ ><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>
+ _editor_url = <span class="string">"/htmlarea/"</span>;
+ _editor_lang = <span class="string">"en"</span>;
+<span class="function-name"><</span><span class="html-tag">/script</span><span class="function-name">></span></pre>
+
+ <li>Include the "htmlarea.js" script:
+ <pre class="code"
+ ><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>
+ </li>
+
+ <li><p>If you want to change all your <textarea>-s into
+ HTMLArea-s then you can use the simplest way to create HTMLArea:</p>
+ <pre class="code"
+ ><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>
+ HTMLArea.replaceAll<span class="function-name">()</span>;
+<span class="paren-face-match"><</span><span class="html-tag">/script</span><span class="paren-face-match">></span></pre>
+ <p><span class="note">Note:</span> you can also add the
+ <code>HTMLArea.replaceAll()</code> code to the <code>onload</code>
+ event handler for the <code>body</code> element, if you find it more appropriate.</p>
+
+ <p>A different approach, if you have more than one textarea and only want
+ to change one of them, is to use <code>HTMLArea.replace("id")</code> --
+ pass the <code>id</code> of your textarea. Do not use the
+ <code>name</code> attribute anymore, it's not a standard solution!</p>
+
+</ol>
+
+<p>This section applies to HTMLArea-3.0 release candidate 1 or later; prior
+to this version, one needed to include more files; however, now HTMLArea is
+able to include other files too (such as stylesheet, language definition
+file, etc.) so you only need to define the editor path and load
+"htmlarea.js". Nice, eh? ;-)</p>
+
+<h3>I want to change the editor settings, how do I do that?</h3>
+
+<p>While it's true that all you need is one line of JavaScript to create an
+htmlArea WYSIWYG editor, you can also specify more config settings in the
+code to control how the editor works and looks. Here's an example of some of
+the available settings:</p>
+
+<pre class="code"
+><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
+</span> <span class="comment">// having all the default values
+</span>config.width = '<span class="string">90%</span>';
+config.height = '<span class="string">200px</span>';
+
+<span class="comment">// the following sets a style for the page body (black text on yellow page)
+// and makes all paragraphs be bold by default
+</span>config.pageStyle =
+ '<span class="string">body { background-color: yellow; color: black; font-family: verdana,sans-serif } </span>' +
+ '<span class="string">p { font-width: bold; } </span>';
+
+<span class="comment">// the following replaces the textarea with the given id with a new
+// HTMLArea object having the specified configuration
+</span>HTMLArea.replace('<span class="string">id</span>', config);</pre>
+
+<p><span class="warning">Important:</span> It's recommended that you add
+custom features and configuration to a separate file. This will ensure you
+that when we release a new official version of HTMLArea you'll have less
+trouble upgrading it.</p>
+
+<h3>How do I customize the toolbar?</h3>
+
+<p>Using the configuration object introduced above allows you to completely
+control what the toolbar contains. Following is an example of a one-line,
+customized toolbar, much simpler than the default one:</p>
+
+<pre class="code"
+><span class="keyword">var</span> <span class="variable-name">config</span> = <span class="keyword">new</span> HTMLArea.Config();
+config.toolbar = [
+ ['<span class="string">fontname</span>', '<span class="string">space</span>',
+ '<span class="string">fontsize</span>', '<span class="string">space</span>',
+ '<span class="string">formatblock</span>', '<span class="string">space</span>',
+ '<span class="string">bold</span>', '<span class="string">italic</span>', '<span class="string">underline</span>']
+];
+HTMLArea.replace('<span class="string">id</span>', config);</pre>
+
+<p>The toolbar is an Array of Array objects. Each array in the toolbar
+defines a new line. The default toolbar looks like this:</p>
+
+<pre class="code"
+>config.toolbar = [
+[ "<span class="string">fontname</span>", "<span class="string">space</span>",
+ "<span class="string">fontsize</span>", "<span class="string">space</span>",
+ "<span class="string">formatblock</span>", "<span class="string">space</span>",
+ "<span class="string">bold</span>", "<span class="string">italic</span>", "<span class="string">underline</span>", "<span class="string">separator</span>",
+ "<span class="string">strikethrough</span>", "<span class="string">subscript</span>", "<span class="string">superscript</span>", "<span class="string">separator</span>",
+ "<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>" ],
+
+[ "<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>",
+ "<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>",
+ "<span class="string">forecolor</span>", "<span class="string">hilitecolor</span>", "<span class="string">textindicator</span>", "<span class="string">separator</span>",
+ "<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>",
+ "<span class="string">popupeditor</span>", "<span class="string">separator</span>", "<span class="string">showhelp</span>", "<span class="string">about</span>" ]
+];</pre>
+
+<p>Except three strings, all others in the examples above need to be defined
+in the <code>config.btnList</code> object (detailed a bit later in this
+document). The three exceptions are: 'space', 'separator' and 'linebreak'.
+These three have the following meaning, and need not be present in
+<code>btnList</code>:</p>
+
+<ul>
+ <li>'space' -- Inserts a space of 5 pixels (the width is configurable by external
+ <acronym title="Cascading Style Sheets">CSS</acronym>) at the current
+ position in the toolbar.</li>
+ <li>'separator' -- Inserts a small vertical separator, for visually grouping related
+ buttons.</li>
+ <li>'linebreak' -- Starts a new line in the toolbar. Subsequent controls will be
+ inserted on the new line.</li>
+</ul>
+
+<p><span class="warning">Important:</span> It's recommended that you add
+custom features and configuration to a separate file. This will ensure you
+that when we release a new official version of HTMLArea you'll have less
+trouble upgrading it.</p>
+
+<h3>How do I create custom buttons?</h3>
+
+<p>By design, the toolbar is easily extensible. For adding a custom button
+one needs to follow two steps.</p>
+
+<h4 id="regbtn">1. Register the button in <code>config.btnList</code>.</h4>
+
+<p>For each button in the toolbar, HTMLArea needs to know the following
+information:</p>
+<ul>
+ <li>a name for it (we call it the ID of the button);</li>
+ <li>the path to an image to be displayed in the toolbar;</li>
+ <li>a tooltip for it;</li>
+ <li>whether the button is enabled or not in text mode;</li>
+ <li>what to do when the button is clicked;</li>
+</ul>
+<p>You need to provide all this information for registering a new button
+too. The button ID can be any string identifier and it's used when
+defining the toolbar, as you saw above. We recommend starting
+it with "my-" so that it won't clash with the standard ID-s (those from
+the default toolbar).</p>
+
+<p class="note">Register button example #1</p>
+
+<pre class="code"
+><span class="comment">// get a default configuration
+</span><span class="keyword">var</span> <span class="variable-name">config</span> = <span class="keyword">new</span> HTMLArea.Config();
+<span class="comment">// register the new button using Config.registerButton.
+// parameters: button ID, tooltip, image, textMode,
+</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>,
+<span class="comment">// function that gets called when the button is clicked
+</span> <span class="keyword">function</span>(editor, id) {
+ editor.surroundHTML('<span class="string"><span class="hilite"></span>', '<span class="string"></span></span>');
+ }
+);</pre>
+
+<p>An alternate way of calling registerButton is exemplified above. Though
+the code might be a little bit larger, using this form makes your code more
+maintainable. It doesn't even needs comments as it's pretty clear.</p>
+
+<p class="note">Register button example #2</p>
+
+<pre class="code"
+><span class="keyword">var</span> <span class="variable-name">config</span> = <span class="keyword">new</span> HTMLArea.Config();
+config.registerButton({
+ id : "<span class="string">my-hilite</span>",
+ tooltip : "<span class="string">Highlight text</span>",
+ image : "<span class="string">my-hilite.gif</span>",
+ textMode : <span class="keyword">false</span>,
+ action : <span class="keyword">function</span>(editor, id) {
+ editor.surroundHTML('<span class="string"><span class="hilite"></span>', '<span class="string"></span></span>');
+ }
+});</pre>
+
+<p>You might notice that the "action" function receives two parameters:
+<b>editor</b> and <b>id</b>. In the examples above we only used the
+<b>editor</b> parameter. But it could be helpful for you to understand
+both:</p>
+
+<ul>
+ <li><b>editor</b> is a reference to the HTMLArea object. Since our entire
+ code now has an <acronym title="Object Oriented Programming">OOP</acronym>-like
+ design, you need to have a reference to
+ the editor object in order to do things with it. In previous versions of
+ HTMLArea, in order to identify the object an ID was used -- the ID of the
+ HTML element. In this version ID-s are no longer necessary.</li>
+
+ <li><b>id</b> is the button ID. Wondering why is this useful? Well, you
+ could use the same handler function (presuming that it's not an anonymous
+ function like in the examples above) for more buttons. You can <a
+ href="#btnex">see an example</a> a bit later in this document.</li>
+</ul>
+
+<h4>2. Inserting it into the toolbar</h4>
+
+<p>At this step you need to specify where in the toolbar to insert the
+button, or just create the whole toolbar again as you saw in the previous
+section. You use the button ID, as shown in the examples of customizing the
+toolbar in the previous section.</p>
+
+<p>For the sake of completion, following there are another examples.</p>
+
+<p class="note">Append your button to the default toolbar</p>
+
+<pre class="code"
+>config.toolbar.push([ "<span class="string">my-hilite</span>" ]);</pre>
+
+<p class="note">Customized toolbar</p>
+
+<pre class="code"
+>config.toolbar = [
+ ['<span class="string">fontname</span>', '<span class="string">space</span>',
+ '<span class="string">fontsize</span>', '<span class="string">space</span>',
+ '<span class="string">formatblock</span>', '<span class="string">space</span>',
+ '<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
+</span> '<span class="string">bold</span>', '<span class="string">italic</span>', '<span class="string">underline</span>', '<span class="string">space</span>']
+];</pre>
+
+<p><span class="note">Note:</span> in the example above our new button is
+between two vertical separators. But this is by no means required. You can
+put it wherever you like. Once registered in the btnList (<a
+href="#regbtn">step 1</a>) your custom button behaves just like a default
+button.</p>
+
+<p><span class="warning">Important:</span> It's recommended that you add
+custom features and configuration to a separate file. This will ensure you
+that when we release a new official version of HTMLArea you'll have less
+trouble upgrading it.</p>
+
+<h4 id="btnex">A complete example</h4>
+
+<p>Please note that it is by no means necessary to include the following
+code into the htmlarea.js file. On the contrary, it might not work there.
+The configuration system is designed such that you can always customize the
+editor <em>from outside files</em>, thus keeping the htmlarea.js file
+intact. This will make it easy for you to upgrade your HTMLArea when we
+release a new official version. OK, I promise it's the last time I said
+this. ;)</p>
+
+<pre class="code"
+><span class="comment">// All our custom buttons will call this function when clicked.
+// We use the <b>buttonId</b> parameter to determine what button
+// triggered the call.
+</span><span class="keyword">function</span> <span class="function-name">clickHandler</span>(editor, buttonId) {
+ <span class="keyword">switch</span> (buttonId) {
+ <span class="keyword">case</span> "<span class="string">my-toc</span>":
+ editor.insertHTML("<span class="string"><h1>Table Of Contents</h1></span>");
+ <span class="keyword">break</span>;
+ <span class="keyword">case</span> "<span class="string">my-date</span>":
+ editor.insertHTML((<span class="keyword">new</span> Date()).toString());
+ <span class="keyword">break</span>;
+ <span class="keyword">case</span> "<span class="string">my-bold</span>":
+ editor.execCommand("<span class="string">bold</span>");
+ editor.execCommand("<span class="string">italic</span>");
+ <span class="keyword">break</span>;
+ <span class="keyword">case</span> "<span class="string">my-hilite</span>":
+ editor.surroundHTML("<span class="string"><span class=\"hilite\"></span>", "<span class="string"></span></span>");
+ <span class="keyword">break</span>;
+ }
+};
+
+<span class="comment">// Create a new configuration object
+</span><span class="keyword">var</span> <span class="variable-name">config</span> = <span class="keyword">new</span> HTMLArea.Config();
+
+<span class="comment">// Register our custom buttons
+</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);
+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);
+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);
+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);
+
+<span class="comment">// Append the buttons to the default toolbar
+</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>"]);
+
+<span class="comment">// Replace an existing textarea with an HTMLArea object having the above config.
+</span>HTMLArea.replace("<span class="string">textAreaID</span>", config);</pre>
+
+
+<hr />
+<address>© <a href="http://interactivetools.com" title="Visit our website"
+>InteractiveTools.com</a> 2002-2004.
+<br />
+© <a href="http://dynarch.com">dynarch.com</a> 2003-2004<br />
+HTMLArea v3.0 developed by <a
+href="http://dynarch.com/mishoo/">Mihai Bazon</a>.
+<br />
+Documentation written by Mihai Bazon.
+</address>
+<!-- hhmts start --> Last modified: Wed Jan 28 12:18:23 EET 2004 <!-- hhmts end -->
+<!-- doc-lang: English -->
+</body> </html>
Added: plog/trunk/js/htmlarea/docs/release-notes.html
===================================================================
--- plog/trunk/js/htmlarea/docs/release-notes.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/docs/release-notes.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>HTMLArea-3.0-RC3 release notes</title>
+ <style>
+ .fixme { color: red; }
+ </style>
+ </head>
+
+ <body>
+
+ <h1>HTMLArea-3.0-RC3 release notes</h1>
+
+ <p>This release was compiled on Jan , 2005 [23:43] GMT.</p>
+
+ <p>Changes since 3.0-RC2b:</p>
+
+ <ul>
+ <li>Restored broken images and re-committed ALL images back to CVS in binary mode.
+ <li>Added error with instructions for when HTMLArea.init() isn't called first.
+ <li>Fixed examples to call HTMLArea.init() first:
+ <ul>
+ <li>2-areas.html
+ <li>character_map.html
+ <li>css.html
+ <li>dynamic_css.html
+ <li>list-type.html
+ <li>remove-font-tags.html
+ </ul>
+ <li>
+ </ul>
+
+
+ <p>Changes since 3.0-Beta:</p>
+
+ <ul>
+ <li>
+ <b>New plugins</b>
+ <ul>
+ <li>
+ ContextMenu plugin (provides a nice context menu with common
+ operations, including table ops, link ops, etc.)
+ </li>
+ <li>
+ CSS plugin (provides an easy way to insert/change CSS classes)
+ </li>
+ <li>
+ FullPage plugin (allows HTMLArea to edit a whole HTML file,
+ not only the content within <body>.)
+ </li>
+ </ul>
+ </li>
+ <li>
+ <b>Changes in the SpellChecker plugin</b>
+ <ul>
+ <li>
+ Many bugfixes: now it works ;-) Fully Unicode-safe.
+ </li>
+ <li>
+ Speed and bandwidth optimization: reports the list of
+ suggestions only once for each mispelled word; this helps
+ in cases where you have, for instance, the word âHTMLAreaâ
+ in 10 places all over the document; the list of
+ suggestions for it--which is kind of huge--will only be
+ included <em>once</em>.
+ </li>
+ <li>
+ User interface improvements: the highlighted word will
+ remain in view; in cases where it's normally outside, the
+ window will be scrolled to it.
+ </li>
+ <li>
+ Added a "Revert" button for those that change their minds ;-)
+ </li>
+ <li>
+ Added a "Info" button which reports information about the
+ document, retrieved by the server-side spell checker:
+ total number of words, total number of mispelled words,
+ number of suggestions made, spell check time, etc. More
+ can be easily added. <span class="fixme">FIXME: this part
+ is not yet internationalized.</span>
+ </li>
+ <li>
+ The server-side spell checker now uses XML::DOM instead of
+ HTML::Parser, which means that it will be unable to parse
+ âtag-soupâ HTML. It needs valid code. Usually HTMLArea
+ generates valid code, but on rare occasions it might fail
+ and the spell checker will report a gross error message.
+ This gonna have to be fixed, but instead of making the
+ spell checker accept invalid HTML I prefer to make
+ HTMLArea generate valid code, so changes are to be done in
+ other places ;-)
+ </li>
+ </ul>
+ </li>
+ <li>
+ <b>Changes in the core editor</b>
+ <ul>
+ <li>
+ Easier to setup: you only need to load
+ <tt>htmlarea.js</tt>; other scripts will be loaded
+ automatically. <a href="reference.html">Documentation</a>
+ and <a href="examples/">examples</a> updated.
+ </li>
+ <li>
+ Better plugin support (they register information about
+ themselves with the editor; can register event handlers for
+ the editor, etc.)
+ </li>
+ <li>
+ New about box; check it out, it's cool ;-)
+ </li>
+ <li>
+ Word cleaner (can be enabled to automatically kill Word crap
+ on paste (see Config.killWordOnPaste); otherwise accessible by
+ pressing CTRL-0 in the editor; a toolbar button will come up
+ soon)
+ </li>
+ <li>
+ Image preview in "insert image" dialog. Also allows
+ modification of current image, if selected.
+ </li>
+ <li>
+ New "insert link" dialog, allows target and title
+ specification, allows editing links.
+ </li>
+ <li>
+ Implemented support for text direction (left-to-right or
+ right-to-left).
+ </li>
+ <li>
+ Lots of bug fixes! ... and more, I guess ;-) an
+ automatically generated <a href="ChangeLog">change log</a>
+ is now available.
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ <p>I don't have the power to go through the <a
+href="http://sourceforge.net/tracker/?atid=525656&group_id=69750&func=browse">bug
+system</a> at SourceForge
+ now. Some of the bugs reported there may be fixed; I'll update
+ their status, some other time. If you reported bugs there and now
+ find them to be fixed, please let me know.</p>
+
+ <h2>3.0-Beta</h2>
+
+ <p>Changes since 3.0-Alpha:</p>
+
+ <ul>
+
+ <li>Performance improvements.</li>
+
+ <li>Many bugs fixed.</li>
+
+ <li>Plugin infrastructure.</li>
+
+ <li>TableOperations plugin.</li>
+
+ <li>SpellChecker plugin.</li>
+
+ <li>Status bar.</li>
+
+ <li>API for registering custom buttons and drop-down boxes in the
+ toolbar.</li>
+
+ <li>Toolbar can contain text labels.</li>
+
+ <li>Cut, copy, paste, undo, redo buttons.</li>
+
+ </ul>
+ <hr />
+ <address><a href="http://dynarch.com/mishoo/">Mihai Bazon</a></address>
+<!-- Created: Sun Aug 3 16:55:08 EEST 2003 -->
+<!-- hhmts start --> Last modified: Wed Mar 31 19:18:26 EEST 2004 <!-- hhmts end -->
+<!-- doc-lang: English -->
+ </body>
+</html>
+
+
Deleted: plog/trunk/js/htmlarea/htmlarea-lang-en.js
===================================================================
--- plog/trunk/js/htmlarea/htmlarea-lang-en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/htmlarea-lang-en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,63 +0,0 @@
-// I18N constants
-
-// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
-// Author: Mihai Bazon, http://dynarch.com/mishoo
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "en",
-
- tooltips: {
- bold: "Bold",
- italic: "Italic",
- underline: "Underline",
- strikethrough: "Strikethrough",
- subscript: "Subscript",
- superscript: "Superscript",
- justifyleft: "Justify Left",
- justifycenter: "Justify Center",
- justifyright: "Justify Right",
- justifyfull: "Justify Full",
- orderedlist: "Ordered List",
- unorderedlist: "Bulleted List",
- outdent: "Decrease Indent",
- indent: "Increase Indent",
- forecolor: "Font Color",
- hilitecolor: "Background Color",
- horizontalrule: "Horizontal Rule",
- createlink: "Insert Web Link",
- insertimage: "Insert Image",
- inserttable: "Insert Table",
- htmlmode: "Toggle HTML Source",
- popupeditor: "Enlarge Editor",
- about: "About this editor",
- showhelp: "Help using editor",
- textindicator: "Current style",
- undo: "Undoes your last action",
- redo: "Redoes your last action",
- cut: "Cut selection",
- copy: "Copy selection",
- paste: "Paste from clipboard"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "Cancel"
- },
-
- msg: {
- "Path": "Path",
- "TEXT_MODE": "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG."
- }
-};
Modified: plog/trunk/js/htmlarea/htmlarea-plog.js
===================================================================
--- plog/trunk/js/htmlarea/htmlarea-plog.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/htmlarea-plog.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -4,24 +4,63 @@
* change needed, do NOT modify htmlarea.js in any way, it'll make things easier for us
* when a new version comes out!
*/
-
-
+
HTMLArea.prototype._plogPopupDialog = function(url, action, init) {
Dialog(url, action, init, true);
};
-var config = new HTMLArea.Config();
+// load the plugins that we will use
+HTMLArea.loadPlugin("EnterParagraphs");
-// Register the 'insert resource' button
-config.registerButton({
- id: "insertresource",
- tooltip: "Insert resource",
- image: "js/htmlarea/images/ed_resource.gif",
- textMode: false,
- action: insertResource});
+var postTextEditor = null;
+var postExtendedTextEditor = null;
-// the method that will insert a resource
-//HTMLArea.prototype._insertResource = function(editor, id) {
+// this function will get called at body.onload
+function initEditor() {
+
+ var config = new HTMLArea.Config();
+
+ // Register the 'insert resource' button
+ config.registerButton({
+ id: "insertresource",
+ tooltip: "Insert Resource",
+ image: "js/htmlarea/images/ed_resource.gif",
+ textMode: false,
+ action: insertResource});
+
+ // add our new icon in a place better suited for this task...
+ config.toolbar = [
+ [ "fontsize", "space","space",
+ "bold", "italic", "underline", "strikethrough", "separator",
+ "justifyleft", "justifycenter", "justifyright", "justifyfull", "separator",
+ "orderedlist", "unorderedlist", "separator",
+ "createlink", "insertimage", "insertresource", "htmlmode" ]
+ ];
+
+ // Create postText Editor
+ postTextEditor = new HTMLArea("postText", config);
+ postTextEditor.registerPlugin(EnterParagraphs);
+
+ // Generate postText Editor
+ setTimeout(function() {
+ postTextEditor.generate();
+ }, 500);
+
+ // Create postExtendedText Editor
+ postExtendedTextEditor = new HTMLArea("postExtendedText", config);
+ postExtendedTextEditor.registerPlugin(EnterParagraphs);
+
+ // Generate postExtendedText Editor
+ setTimeout(function() {
+ postExtendedTextEditor.generate();
+ }, 500);
+ //---------------------------------------------------------------------
+
+ return false;
+};
+
+// The method that will insert a resource
+// HTMLArea.prototype._insertResource = function(editor, id) {
function insertResource(editor, id) {
//var editor = this; // for nested functions
editor._plogPopupDialog("admin.php?op=resourceList&mode=1", function(param) {
@@ -34,12 +73,5 @@
}, null);
};
-// add our new icon in a place better suited for this task...
-config.toolbar = [
- [ "fontsize", "space",
- "space",
- "bold", "italic", "underline", "strikethrough",
- "justifyleft", "justifycenter", "justifyright", "justifyfull", "separator",
- "insertorderedlist", "insertunorderedlist", "separator",
- "createlink", "insertimage", "insertresource", "htmlmode", ]
-];
\ No newline at end of file
+HTMLArea.init();
+HTMLArea.onload = initEditor;
\ No newline at end of file
Modified: plog/trunk/js/htmlarea/htmlarea.css
===================================================================
--- plog/trunk/js/htmlarea/htmlarea.css 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/htmlarea.css 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,180 +1,180 @@
-.htmlarea { background: #fff; }
-
-.htmlarea .toolbar {
- cursor: default;
- background: ButtonFace;
- padding: 1px 1px 2px 1px;
- border: 1px solid;
- border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
-}
-.htmlarea .toolbar table { font-family: tahoma,verdana,sans-serif; font-size: 11px; }
-.htmlarea .toolbar img { border: none; }
-.htmlarea .toolbar .label { padding: 0px 3px; }
-
-.htmlarea .toolbar .button {
- background: ButtonFace;
- color: ButtonText;
- border: 1px solid ButtonFace;
- padding: 1px;
- margin: 0px;
- width: 18px;
- height: 18px;
-}
-.htmlarea .toolbar .buttonHover {
- border: 1px solid;
- border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
-}
-.htmlarea .toolbar .buttonActive, .htmlarea .toolbar .buttonPressed {
- padding: 2px 0px 0px 2px;
- border: 1px solid;
- border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
-}
-.htmlarea .toolbar .buttonPressed {
- background: ButtonHighlight;
-}
-.htmlarea .toolbar .indicator {
- padding: 0px 3px;
- overflow: hidden;
- width: 20px;
- text-align: center;
- cursor: default;
- border: 1px solid ButtonShadow;
-}
-
-.htmlarea .toolbar .buttonDisabled img {
- filter: alpha(opacity = 25);
- -moz-opacity: 0.25;
-}
-
-.htmlarea .toolbar .separator {
- position: relative;
- margin: 3px;
- border-left: 1px solid ButtonShadow;
- border-right: 1px solid ButtonHighlight;
- width: 0px;
- height: 16px;
- padding: 0px;
-}
-
-.htmlarea .toolbar .space { width: 5px; }
-
-.htmlarea .toolbar select { font: 11px Tahoma,Verdana,sans-serif; }
-
-.htmlarea .toolbar select,
-.htmlarea .toolbar select:hover,
-.htmlarea .toolbar select:active { background: FieldFace; color: ButtonText; }
-
-.htmlarea .statusBar {
- border: 1px solid;
- border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
- padding: 2px 4px;
- background-color: ButtonFace;
- color: ButtonText;
- font: 11px Tahoma,Verdana,sans-serif;
-}
-
-.htmlarea .statusBar .statusBarTree a {
- padding: 2px 5px;
- color: #00f;
-}
-
-.htmlarea .statusBar .statusBarTree a:visited { color: #00f; }
-.htmlarea .statusBar .statusBarTree a:hover {
- background-color: Highlight;
- color: HighlightText;
- padding: 1px 4px;
- border: 1px solid HighlightText;
-}
-
-
-/* Hidden DIV popup dialogs (PopupDiv) */
-
-.dialog {
- color: ButtonText;
- background: ButtonFace;
-}
-
-.dialog .content { padding: 2px; }
-
-.dialog, .dialog button, .dialog input, .dialog select, .dialog textarea, .dialog table {
- font: 11px Tahoma,Verdana,sans-serif;
-}
-
-.dialog table { border-collapse: collapse; }
-
-.dialog .title {
- background: #008;
- color: #ff8;
- border-bottom: 1px solid #000;
- padding: 1px 0px 2px 5px;
- font-size: 12px;
- font-weight: bold;
- cursor: default;
-}
-
-.dialog .title .button {
- float: right;
- border: 1px solid #66a;
- padding: 0px 1px 0px 2px;
- margin-right: 1px;
- color: #fff;
- text-align: center;
-}
-
-.dialog .title .button-hilite { border-color: #88f; background: #44c; }
-
-.dialog button {
- width: 5em;
- padding: 0px;
-}
-
-.dialog .buttonColor {
- padding: 1px;
- cursor: default;
- border: 1px solid;
- border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
-}
-
-.dialog .buttonColor-hilite {
- border-color: #000;
-}
-
-.dialog .buttonColor .chooser, .dialog .buttonColor .nocolor {
- height: 0.6em;
- border: 1px solid;
- padding: 0px 1em;
- border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
-}
-
-.dialog .buttonColor .nocolor { padding: 0px; }
-.dialog .buttonColor .nocolor-hilite { background-color: #fff; color: #f00; }
-
-.dialog .label { text-align: right; width: 6em; }
-.dialog .value input { width: 100%; }
-.dialog .buttons { text-align: right; padding: 2px 4px 0px 4px; }
-
-.dialog legend { font-weight: bold; }
-.dialog fieldset table { margin: 2px 0px; }
-
-.popupdiv {
- border: 2px solid;
- border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
-}
-
-.popupwin {
- padding: 0px;
- margin: 0px;
-}
-
-.popupwin .title {
- background: #fff;
- color: #000;
- font-weight: bold;
- font-size: 120%;
- padding: 3px 10px;
- margin-bottom: 10px;
- border-bottom: 1px solid black;
- letter-spacing: 2px;
-}
-
-form { margin: 0px; border: none; }
+.htmlarea { background: #fff; }
+
+.htmlarea .toolbar {
+ cursor: default;
+ background: ButtonFace;
+ padding: 3px;
+ border: 1px solid;
+ border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+.htmlarea .toolbar table { font-family: tahoma,verdana,sans-serif; font-size: 11px; }
+.htmlarea .toolbar img { border: none; }
+.htmlarea .toolbar .label { padding: 0px 3px; }
+
+.htmlarea .toolbar .button {
+ background: ButtonFace;
+ color: ButtonText;
+ border: 1px solid ButtonFace;
+ padding: 1px;
+ margin: 0px;
+ width: 18px;
+ height: 18px;
+}
+.htmlarea .toolbar .buttonHover {
+ border: 1px solid;
+ border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+.htmlarea .toolbar .buttonActive, .htmlarea .toolbar .buttonPressed {
+ padding: 2px 0px 0px 2px;
+ border: 1px solid;
+ border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+}
+.htmlarea .toolbar .buttonPressed {
+ background: ButtonHighlight;
+}
+.htmlarea .toolbar .indicator {
+ padding: 0px 3px;
+ overflow: hidden;
+ width: 20px;
+ text-align: center;
+ cursor: default;
+ border: 1px solid ButtonShadow;
+}
+
+.htmlarea .toolbar .buttonDisabled img {
+ filter: gray() alpha(opacity = 25);
+ -moz-opacity: 0.25;
+}
+
+.htmlarea .toolbar .separator {
+ position: relative;
+ margin: 3px;
+ border-left: 1px solid ButtonShadow;
+ border-right: 1px solid ButtonHighlight;
+ width: 0px;
+ height: 16px;
+ padding: 0px;
+}
+
+.htmlarea .toolbar .space { width: 5px; }
+
+.htmlarea .toolbar select { font: 11px Tahoma,Verdana,sans-serif; }
+
+.htmlarea .toolbar select,
+.htmlarea .toolbar select:hover,
+.htmlarea .toolbar select:active { background: FieldFace; color: ButtonText; }
+
+.htmlarea .statusBar {
+ border: 1px solid;
+ border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+ padding: 2px 4px;
+ background-color: ButtonFace;
+ color: ButtonText;
+ font: 11px Tahoma,Verdana,sans-serif;
+}
+
+.htmlarea .statusBar .statusBarTree a {
+ padding: 2px 5px;
+ color: #00f;
+}
+
+.htmlarea .statusBar .statusBarTree a:visited { color: #00f; }
+.htmlarea .statusBar .statusBarTree a:hover {
+ background-color: Highlight;
+ color: HighlightText;
+ padding: 1px 4px;
+ border: 1px solid HighlightText;
+}
+
+
+/* Hidden DIV popup dialogs (PopupDiv) */
+
+.dialog {
+ color: ButtonText;
+ background: ButtonFace;
+}
+
+.dialog .content { padding: 2px; }
+
+.dialog, .dialog button, .dialog input, .dialog select, .dialog textarea, .dialog table {
+ font: 11px Tahoma,Verdana,sans-serif;
+}
+
+.dialog table { border-collapse: collapse; }
+
+.dialog .title {
+ background: #008;
+ color: #ff8;
+ border-bottom: 1px solid #000;
+ padding: 1px 0px 2px 5px;
+ font-size: 12px;
+ font-weight: bold;
+ cursor: default;
+}
+
+.dialog .title .button {
+ float: right;
+ border: 1px solid #66a;
+ padding: 0px 1px 0px 2px;
+ margin-right: 1px;
+ color: #fff;
+ text-align: center;
+}
+
+.dialog .title .button-hilite { border-color: #88f; background: #44c; }
+
+.dialog button {
+ width: 5em;
+ padding: 0px;
+}
+
+.dialog .buttonColor {
+ padding: 1px;
+ cursor: default;
+ border: 1px solid;
+ border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+
+.dialog .buttonColor-hilite {
+ border-color: #000;
+}
+
+.dialog .buttonColor .chooser, .dialog .buttonColor .nocolor {
+ height: 0.6em;
+ border: 1px solid;
+ padding: 0px 1em;
+ border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+}
+
+.dialog .buttonColor .nocolor { padding: 0px; }
+.dialog .buttonColor .nocolor-hilite { background-color: #fff; color: #f00; }
+
+.dialog .label { text-align: right; width: 6em; }
+.dialog .value input { width: 100%; }
+.dialog .buttons { text-align: right; padding: 2px 4px 0px 4px; }
+
+.dialog legend { font-weight: bold; }
+.dialog fieldset table { margin: 2px 0px; }
+
+.popupdiv {
+ border: 2px solid;
+ border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+
+.popupwin {
+ padding: 0px;
+ margin: 0px;
+}
+
+.popupwin .title {
+ background: #fff;
+ color: #000;
+ font-weight: bold;
+ font-size: 120%;
+ padding: 3px 10px;
+ margin-bottom: 10px;
+ border-bottom: 1px solid black;
+ letter-spacing: 2px;
+}
+
+form { margin: 0px; border: none; }
Modified: plog/trunk/js/htmlarea/htmlarea.js
===================================================================
--- plog/trunk/js/htmlarea/htmlarea.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/htmlarea.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,2182 +1,2653 @@
-// htmlArea v3.0 - Copyright (c) 2002-2004 interactivetools.com, inc.
-// This copyright notice MUST stay intact for use (see license.txt).
-//
-// Portions (c) dynarch.com, 2003-2004
-//
-// A free WYSIWYG editor replacement for <textarea> fields.
-// For full source code and docs, visit http://www.interactivetools.com/
-//
-// Version 3.0 developed by Mihai Bazon.
-// http://dynarch.com/mishoo
-//
-// $Id: htmlarea.js,v 1.59 2004/02/09 09:38:47 mishoo Exp $
-
-var _editor_url = "js/htmlarea";
-
-if (typeof _editor_url == "string") {
- // Leave exactly one backslash at the end of _editor_url
- _editor_url = _editor_url.replace(/\x2f*$/, '/');
-} else {
- alert("WARNING: _editor_url is not set! You should set this variable to the editor files path; it should preferably be an absolute path, like in '/htmlarea', but it can be relative if you prefer. Further we will try to load the editor files correctly but we'll probably fail.");
- _editor_url = '';
-}
-
-// make sure we have a language
-if (typeof _editor_lang == "string") {
- _editor_lang = _editor_lang.toLowerCase();
-} else {
- _editor_lang = "en";
-}
-
-// Creates a new HTMLArea object. Tries to replace the textarea with the given
-// ID with it.
-function HTMLArea(textarea, config) {
- if (HTMLArea.checkSupportedBrowser()) {
- if (typeof config == "undefined") {
- this.config = new HTMLArea.Config();
- } else {
- this.config = config;
- }
- this._htmlArea = null;
- this._textArea = textarea;
- this._editMode = "wysiwyg";
- this.plugins = {};
- this._timerToolbar = null;
- this._timerUndo = null;
- this._undoQueue = new Array(this.config.undoSteps);
- this._undoPos = -1;
- this._customUndo = false;
- this._mdoc = document; // cache the document, we need it in plugins
- this.doctype = '';
- }
-};
-
-// load some scripts
-(function() {
- var scripts = HTMLArea._scripts = [ _editor_url + "htmlarea.js",
- _editor_url + "dialog.js",
- _editor_url + "popupwin.js",
- _editor_url + "lang/" + _editor_lang + ".js" ];
- var head = document.getElementsByTagName("head")[0];
- // start from 1, htmlarea.js is already loaded
- for (var i = 1; i < scripts.length; ++i) {
- var script = document.createElement("script");
- script.src = scripts[i];
- head.appendChild(script);
- }
-})();
-
-// cache some regexps
-HTMLArea.RE_tagName = /(<\/|<)\s*([^ \t\n>]+)/ig;
-HTMLArea.RE_doctype = /(<!doctype((.|\n)*?)>)\n?/i;
-HTMLArea.RE_head = /<head>((.|\n)*?)<\/head>/i;
-HTMLArea.RE_body = /<body>((.|\n)*?)<\/body>/i;
-
-HTMLArea.Config = function () {
- this.version = "3.0";
-
- this.width = "auto";
- this.height = "auto";
-
- // enable creation of a status bar?
- this.statusBar = true;
-
- // maximum size of the undo queue
- this.undoSteps = 20;
-
- // the time interval at which undo samples are taken
- this.undoTimeout = 500; // 1/2 sec.
-
- // the next parameter specifies whether the toolbar should be included
- // in the size or not.
- this.sizeIncludesToolbar = true;
-
- // if true then HTMLArea will retrieve the full HTML, starting with the
- // <HTML> tag.
- this.fullPage = false;
-
- // style included in the iframe document
- this.pageStyle = "";
-
- // set to true if you want Word code to be cleaned upon Paste
- this.killWordOnPaste = false;
-
- // BaseURL included in the iframe document
- this.baseURL = document.baseURI || document.URL;
- if (this.baseURL && this.baseURL.match(/(.*)\/([^\/]+)/))
- this.baseURL = RegExp.$1 + "/";
-
- // URL-s
- this.imgURL = "images/";
- this.popupURL = "popups/";
-
- /** CUSTOMIZING THE TOOLBAR
- * -------------------------
- *
- * It is recommended that you customize the toolbar contents in an
- * external file (i.e. the one calling HTMLArea) and leave this one
- * unchanged. That's because when we (InteractiveTools.com) release a
- * new official version, it's less likely that you will have problems
- * upgrading HTMLArea.
- */
- this.toolbar = [
- [ "fontname", "space",
- "fontsize", "space",
- "formatblock", "space",
- "bold", "italic", "underline", "strikethrough", "separator",
- "subscript", "superscript", "separator",
- "copy", "cut", "paste", "space", "undo", "redo" ],
-
- [ "justifyleft", "justifycenter", "justifyright", "justifyfull", "separator",
- "lefttoright", "righttoleft", "separator",
- "insertorderedlist", "insertunorderedlist", "outdent", "indent", "separator",
- "forecolor", "hilitecolor", "separator",
- "inserthorizontalrule", "createlink", "insertimage", "inserttable", "htmlmode", "separator",
- "popupeditor", "separator", "showhelp", "about" ]
- ];
-
- this.fontname = {
- "Arial": 'arial,helvetica,sans-serif',
- "Courier New": 'courier new,courier,monospace',
- "Georgia": 'georgia,times new roman,times,serif',
- "Tahoma": 'tahoma,arial,helvetica,sans-serif',
- "Times New Roman": 'times new roman,times,serif',
- "Verdana": 'verdana,arial,helvetica,sans-serif',
- "impact": 'impact',
- "WingDings": 'wingdings'
- };
-
- this.fontsize = {
- "1 (8 pt)": "1",
- "2 (10 pt)": "2",
- "3 (12 pt)": "3",
- "4 (14 pt)": "4",
- "5 (18 pt)": "5",
- "6 (24 pt)": "6",
- "7 (36 pt)": "7"
- };
-
- this.formatblock = {
- "Heading 1": "h1",
- "Heading 2": "h2",
- "Heading 3": "h3",
- "Heading 4": "h4",
- "Heading 5": "h5",
- "Heading 6": "h6",
- "Normal": "p",
- "Address": "address",
- "Formatted": "pre"
- };
-
- this.customSelects = {};
-
- function cut_copy_paste(e, cmd, obj) {
- e.execCommand(cmd);
- };
-
- // ADDING CUSTOM BUTTONS: please read below!
- // format of the btnList elements is "ID: [ ToolTip, Icon, Enabled in text mode?, ACTION ]"
- // - ID: unique ID for the button. If the button calls document.execCommand
- // it's wise to give it the same name as the called command.
- // - ACTION: function that gets called when the button is clicked.
- // it has the following prototype:
- // function(editor, buttonName)
- // - editor is the HTMLArea object that triggered the call
- // - buttonName is the ID of the clicked button
- // These 2 parameters makes it possible for you to use the same
- // handler for more HTMLArea objects or for more different buttons.
- // - ToolTip: default tooltip, for cases when it is not defined in the -lang- file (HTMLArea.I18N)
- // - Icon: path to an icon image file for the button (TODO: use one image for all buttons!)
- // - Enabled in text mode: if false the button gets disabled for text-only mode; otherwise enabled all the time.
- this.btnList = {
- bold: [ "Bold", "ed_format_bold.gif", false, function(e) {e.execCommand("bold");} ],
- italic: [ "Italic", "ed_format_italic.gif", false, function(e) {e.execCommand("italic");} ],
- underline: [ "Underline", "ed_format_underline.gif", false, function(e) {e.execCommand("underline");} ],
- strikethrough: [ "Strikethrough", "ed_format_strike.gif", false, function(e) {e.execCommand("strikethrough");} ],
- subscript: [ "Subscript", "ed_format_sub.gif", false, function(e) {e.execCommand("subscript");} ],
- superscript: [ "Superscript", "ed_format_sup.gif", false, function(e) {e.execCommand("superscript");} ],
- justifyleft: [ "Justify Left", "ed_align_left.gif", false, function(e) {e.execCommand("justifyleft");} ],
- justifycenter: [ "Justify Center", "ed_align_center.gif", false, function(e) {e.execCommand("justifycenter");} ],
- justifyright: [ "Justify Right", "ed_align_right.gif", false, function(e) {e.execCommand("justifyright");} ],
- justifyfull: [ "Justify Full", "ed_align_justify.gif", false, function(e) {e.execCommand("justifyfull");} ],
- insertorderedlist: [ "Ordered List", "ed_list_num.gif", false, function(e) {e.execCommand("insertorderedlist");} ],
- insertunorderedlist: [ "Bulleted List", "ed_list_bullet.gif", false, function(e) {e.execCommand("insertunorderedlist");} ],
- outdent: [ "Decrease Indent", "ed_indent_less.gif", false, function(e) {e.execCommand("outdent");} ],
- indent: [ "Increase Indent", "ed_indent_more.gif", false, function(e) {e.execCommand("indent");} ],
- forecolor: [ "Font Color", "ed_color_fg.gif", false, function(e) {e.execCommand("forecolor");} ],
- hilitecolor: [ "Background Color", "ed_color_bg.gif", false, function(e) {e.execCommand("hilitecolor");} ],
- inserthorizontalrule: [ "Horizontal Rule", "ed_hr.gif", false, function(e) {e.execCommand("inserthorizontalrule");} ],
- createlink: [ "Insert Web Link", "ed_link.gif", false, function(e) {e.execCommand("createlink", true);} ],
- insertimage: [ "Insert/Modify Image", "ed_image.gif", false, function(e) {e.execCommand("insertimage");} ],
- inserttable: [ "Insert Table", "insert_table.gif", false, function(e) {e.execCommand("inserttable");} ],
- htmlmode: [ "Toggle HTML Source", "ed_html.gif", true, function(e) {e.execCommand("htmlmode");} ],
- popupeditor: [ "Enlarge Editor", "fullscreen_maximize.gif", true, function(e) {e.execCommand("popupeditor");} ],
- about: [ "About this editor", "ed_about.gif", true, function(e) {e.execCommand("about");} ],
- showhelp: [ "Help using editor", "ed_help.gif", true, function(e) {e.execCommand("showhelp");} ],
- undo: [ "Undoes your last action", "ed_undo.gif", false, function(e) {e.execCommand("undo");} ],
- redo: [ "Redoes your last action", "ed_redo.gif", false, function(e) {e.execCommand("redo");} ],
- cut: [ "Cut selection", "ed_cut.gif", false, cut_copy_paste ],
- copy: [ "Copy selection", "ed_copy.gif", false, cut_copy_paste ],
- paste: [ "Paste from clipboard", "ed_paste.gif", false, cut_copy_paste ],
- lefttoright: [ "Direction left to right", "ed_left_to_right.gif", false, function(e) {e.execCommand("lefttoright");} ],
- righttoleft: [ "Direction right to left", "ed_right_to_left.gif", false, function(e) {e.execCommand("righttoleft");} ]
- };
- /* ADDING CUSTOM BUTTONS
- * ---------------------
- *
- * It is recommended that you add the custom buttons in an external
- * file and leave this one unchanged. That's because when we
- * (InteractiveTools.com) release a new official version, it's less
- * likely that you will have problems upgrading HTMLArea.
- *
- * Example on how to add a custom button when you construct the HTMLArea:
- *
- * var editor = new HTMLArea("your_text_area_id");
- * var cfg = editor.config; // this is the default configuration
- * cfg.btnList["my-hilite"] =
- * [ function(editor) { editor.surroundHTML('<span style="background:yellow">', '</span>'); }, // action
- * "Highlight selection", // tooltip
- * "my_hilite.gif", // image
- * false // disabled in text mode
- * ];
- * cfg.toolbar.push(["linebreak", "my-hilite"]); // add the new button to the toolbar
- *
- * An alternate (also more convenient and recommended) way to
- * accomplish this is to use the registerButton function below.
- */
- // initialize tooltips from the I18N module and generate correct image path
- for (var i in this.btnList) {
- var btn = this.btnList[i];
- btn[1] = _editor_url + this.imgURL + btn[1];
- if (typeof HTMLArea.I18N.tooltips[i] != "undefined") {
- btn[0] = HTMLArea.I18N.tooltips[i];
- }
- }
-};
-
-/** Helper function: register a new button with the configuration. It can be
- * called with all 5 arguments, or with only one (first one). When called with
- * only one argument it must be an object with the following properties: id,
- * tooltip, image, textMode, action. Examples:
- *
- * 1. config.registerButton("my-hilite", "Hilite text", "my-hilite.gif", false, function(editor) {...});
- * 2. config.registerButton({
- * id : "my-hilite", // the ID of your button
- * tooltip : "Hilite text", // the tooltip
- * image : "my-hilite.gif", // image to be displayed in the toolbar
- * textMode : false, // disabled in text mode
- * action : function(editor) { // called when the button is clicked
- * editor.surroundHTML('<span class="hilite">', '</span>');
- * },
- * context : "p" // will be disabled if outside a <p> element
- * });
- */
-HTMLArea.Config.prototype.registerButton = function(id, tooltip, image, textMode, action, context) {
- var the_id;
- if (typeof id == "string") {
- the_id = id;
- } else if (typeof id == "object") {
- the_id = id.id;
- } else {
- alert("ERROR [HTMLArea.Config::registerButton]:\ninvalid arguments");
- return false;
- }
- // check for existing id
- if (typeof this.customSelects[the_id] != "undefined") {
- // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA dropdown with the same ID already exists.");
- }
- if (typeof this.btnList[the_id] != "undefined") {
- // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA button with the same ID already exists.");
- }
- switch (typeof id) {
- case "string": this.btnList[id] = [ tooltip, image, textMode, action, context ]; break;
- case "object": this.btnList[id.id] = [ id.tooltip, id.image, id.textMode, id.action, id.context ]; break;
- }
-};
-
-/** The following helper function registers a dropdown box with the editor
- * configuration. You still have to add it to the toolbar, same as with the
- * buttons. Call it like this:
- *
- * FIXME: add example
- */
-HTMLArea.Config.prototype.registerDropdown = function(object) {
- // check for existing id
- if (typeof this.customSelects[object.id] != "undefined") {
- // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA dropdown with the same ID already exists.");
- }
- if (typeof this.btnList[object.id] != "undefined") {
- // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA button with the same ID already exists.");
- }
- this.customSelects[object.id] = object;
-};
-
-/** Call this function to remove some buttons/drop-down boxes from the toolbar.
- * Pass as the only parameter a string containing button/drop-down names
- * delimited by spaces. Note that the string should also begin with a space
- * and end with a space. Example:
- *
- * config.hideSomeButtons(" fontname fontsize textindicator ");
- *
- * It's useful because it's easier to remove stuff from the defaul toolbar than
- * create a brand new toolbar ;-)
- */
-HTMLArea.Config.prototype.hideSomeButtons = function(remove) {
- var toolbar = this.toolbar;
- for (var i in toolbar) {
- var line = toolbar[i];
- for (var j = line.length; --j >= 0; ) {
- if (remove.indexOf(" " + line[j] + " ") >= 0) {
- var len = 1;
- if (/separator|space/.test(line[j + 1])) {
- len = 2;
- }
- line.splice(j, len);
- }
- }
- }
-};
-
-/** Helper function: replace all TEXTAREA-s in the document with HTMLArea-s. */
-HTMLArea.replaceAll = function(config) {
- var tas = document.getElementsByTagName("textarea");
- for (var i = tas.length; i > 0; (new HTMLArea(tas[--i], config)).generate());
-};
-
-/** Helper function: replaces the TEXTAREA with the given ID with HTMLArea. */
-HTMLArea.replace = function(id, config) {
- var ta = HTMLArea.getElementById("textarea", id);
- return ta ? (new HTMLArea(ta, config)).generate() : null;
-};
-
-// Creates the toolbar and appends it to the _htmlarea
-HTMLArea.prototype._createToolbar = function () {
- var editor = this; // to access this in nested functions
-
- var toolbar = document.createElement("div");
- this._toolbar = toolbar;
- toolbar.className = "toolbar";
- toolbar.unselectable = "1";
- var tb_row = null;
- var tb_objects = new Object();
- this._toolbarObjects = tb_objects;
-
- // creates a new line in the toolbar
- function newLine() {
- var table = document.createElement("table");
- table.border = "0px";
- table.cellSpacing = "0px";
- table.cellPadding = "0px";
- toolbar.appendChild(table);
- // TBODY is required for IE, otherwise you don't see anything
- // in the TABLE.
- var tb_body = document.createElement("tbody");
- table.appendChild(tb_body);
- tb_row = document.createElement("tr");
- tb_body.appendChild(tb_row);
- }; // END of function: newLine
- // init first line
- newLine();
-
- // updates the state of a toolbar element. This function is member of
- // a toolbar element object (unnamed objects created by createButton or
- // createSelect functions below).
- function setButtonStatus(id, newval) {
- var oldval = this[id];
- var el = this.element;
- if (oldval != newval) {
- switch (id) {
- case "enabled":
- if (newval) {
- HTMLArea._removeClass(el, "buttonDisabled");
- el.disabled = false;
- } else {
- HTMLArea._addClass(el, "buttonDisabled");
- el.disabled = true;
- }
- break;
- case "active":
- if (newval) {
- HTMLArea._addClass(el, "buttonPressed");
- } else {
- HTMLArea._removeClass(el, "buttonPressed");
- }
- break;
- }
- this[id] = newval;
- }
- }; // END of function: setButtonStatus
-
- // this function will handle creation of combo boxes. Receives as
- // parameter the name of a button as defined in the toolBar config.
- // This function is called from createButton, above, if the given "txt"
- // doesn't match a button.
- function createSelect(txt) {
- var options = null;
- var el = null;
- var cmd = null;
- var customSelects = editor.config.customSelects;
- var context = null;
- switch (txt) {
- case "fontsize":
- case "fontname":
- case "formatblock":
- // the following line retrieves the correct
- // configuration option because the variable name
- // inside the Config object is named the same as the
- // button/select in the toolbar. For instance, if txt
- // == "formatblock" we retrieve config.formatblock (or
- // a different way to write it in JS is
- // config["formatblock"].
- options = editor.config[txt];
- cmd = txt;
- break;
- default:
- // try to fetch it from the list of registered selects
- cmd = txt;
- var dropdown = customSelects[cmd];
- if (typeof dropdown != "undefined") {
- options = dropdown.options;
- context = dropdown.context;
- } else {
- alert("ERROR [createSelect]:\nCan't find the requested dropdown definition");
- }
- break;
- }
- if (options) {
- el = document.createElement("select");
- var obj = {
- name : txt, // field name
- element : el, // the UI element (SELECT)
- enabled : true, // is it enabled?
- text : false, // enabled in text mode?
- cmd : cmd, // command ID
- state : setButtonStatus, // for changing state
- context : context
- };
- tb_objects[txt] = obj;
- for (var i in options) {
- var op = document.createElement("option");
- op.appendChild(document.createTextNode(i));
- op.value = options[i];
- el.appendChild(op);
- }
- HTMLArea._addEvent(el, "change", function () {
- editor._comboSelected(el, txt);
- });
- }
- return el;
- }; // END of function: createSelect
-
- // appends a new button to toolbar
- function createButton(txt) {
- // the element that will be created
- var el = null;
- var btn = null;
- switch (txt) {
- case "separator":
- el = document.createElement("div");
- el.className = "separator";
- break;
- case "space":
- el = document.createElement("div");
- el.className = "space";
- break;
- case "linebreak":
- newLine();
- return false;
- case "textindicator":
- el = document.createElement("div");
- el.appendChild(document.createTextNode("A"));
- el.className = "indicator";
- el.title = HTMLArea.I18N.tooltips.textindicator;
- var obj = {
- name : txt, // the button name (i.e. 'bold')
- element : el, // the UI element (DIV)
- enabled : true, // is it enabled?
- active : false, // is it pressed?
- text : false, // enabled in text mode?
- cmd : "textindicator", // the command ID
- state : setButtonStatus // for changing state
- };
- tb_objects[txt] = obj;
- break;
- default:
- btn = editor.config.btnList[txt];
- }
- if (!el && btn) {
- el = document.createElement("div");
- el.title = btn[0];
- el.className = "button";
- // let's just pretend we have a button object, and
- // assign all the needed information to it.
- var obj = {
- name : txt, // the button name (i.e. 'bold')
- element : el, // the UI element (DIV)
- enabled : true, // is it enabled?
- active : false, // is it pressed?
- text : btn[2], // enabled in text mode?
- cmd : btn[3], // the command ID
- state : setButtonStatus, // for changing state
- context : btn[4] || null // enabled in a certain context?
- };
- tb_objects[txt] = obj;
- // handlers to emulate nice flat toolbar buttons
- HTMLArea._addEvent(el, "mouseover", function () {
- if (obj.enabled) {
- HTMLArea._addClass(el, "buttonHover");
- }
- });
- HTMLArea._addEvent(el, "mouseout", function () {
- if (obj.enabled) with (HTMLArea) {
- _removeClass(el, "buttonHover");
- _removeClass(el, "buttonActive");
- (obj.active) && _addClass(el, "buttonPressed");
- }
- });
- HTMLArea._addEvent(el, "mousedown", function (ev) {
- if (obj.enabled) with (HTMLArea) {
- _addClass(el, "buttonActive");
- _removeClass(el, "buttonPressed");
- _stopEvent(is_ie ? window.event : ev);
- }
- });
- // when clicked, do the following:
- HTMLArea._addEvent(el, "click", function (ev) {
- if (obj.enabled) with (HTMLArea) {
- _removeClass(el, "buttonActive");
- _removeClass(el, "buttonHover");
- obj.cmd(editor, obj.name, obj);
- _stopEvent(is_ie ? window.event : ev);
- }
- });
- var img = document.createElement("img");
- img.src = btn[1];
- img.style.width = "18px";
- img.style.height = "18px";
- el.appendChild(img);
- } else if (!el) {
- el = createSelect(txt);
- }
- if (el) {
- var tb_cell = document.createElement("td");
- tb_row.appendChild(tb_cell);
- tb_cell.appendChild(el);
- } else {
- alert("FIXME: Unknown toolbar item: " + txt);
- }
- return el;
- };
-
- var first = true;
- for (var i in this.config.toolbar) {
- if (!first) {
- createButton("linebreak");
- } else {
- first = false;
- }
- var group = this.config.toolbar[i];
- for (var j in group) {
- var code = group[j];
- if (/^([IT])\[(.*?)\]/.test(code)) {
- // special case, create text label
- var l7ed = RegExp.$1 == "I"; // localized?
- var label = RegExp.$2;
- if (l7ed) {
- label = HTMLArea.I18N.custom[label];
- }
- var tb_cell = document.createElement("td");
- tb_row.appendChild(tb_cell);
- tb_cell.className = "label";
- tb_cell.innerHTML = label;
- } else {
- createButton(code);
- }
- }
- }
-
- this._htmlArea.appendChild(toolbar);
-};
-
-HTMLArea.prototype._createStatusBar = function() {
- var statusbar = document.createElement("div");
- statusbar.className = "statusBar";
- this._htmlArea.appendChild(statusbar);
- this._statusBar = statusbar;
- // statusbar.appendChild(document.createTextNode(HTMLArea.I18N.msg["Path"] + ": "));
- // creates a holder for the path view
- div = document.createElement("span");
- div.className = "statusBarTree";
- div.innerHTML = HTMLArea.I18N.msg["Path"] + ": ";
- this._statusBarTree = div;
- this._statusBar.appendChild(div);
- if (!this.config.statusBar) {
- // disable it...
- statusbar.style.display = "none";
- }
-};
-
-// Creates the HTMLArea object and replaces the textarea with it.
-HTMLArea.prototype.generate = function () {
- var editor = this; // we'll need "this" in some nested functions
- // get the textarea
- var textarea = this._textArea;
- if (typeof textarea == "string") {
- // it's not element but ID
- this._textArea = textarea = HTMLArea.getElementById("textarea", textarea);
- }
- this._ta_size = {
- w: textarea.offsetWidth,
- h: textarea.offsetHeight
- };
- textarea.style.display = "none";
-
- // create the editor framework
- var htmlarea = document.createElement("div");
- htmlarea.className = "htmlarea";
- this._htmlArea = htmlarea;
-
- // insert the editor before the textarea.
- textarea.parentNode.insertBefore(htmlarea, textarea);
-
- if (textarea.form) {
- // we have a form, on submit get the HTMLArea content and
- // update original textarea.
- var f = textarea.form;
- if (typeof f.onsubmit == "function") {
- var funcref = f.onsubmit;
- if (typeof f.__msh_prevOnSubmit == "undefined") {
- f.__msh_prevOnSubmit = [];
- }
- f.__msh_prevOnSubmit.push(funcref);
- }
- f.onsubmit = function() {
- editor._textArea.value = editor.getHTML();
- var a = this.__msh_prevOnSubmit;
- // call previous submit methods if they were there.
- if (typeof a != "undefined") {
- for (var i in a) {
- a[i]();
- }
- }
- };
- }
-
- // add a handler for the "back/forward" case -- on body.unload we save
- // the HTML content into the original textarea.
- window.onunload = function() {
- editor._textArea.value = editor.getHTML();
- };
-
- // creates & appends the toolbar
- this._createToolbar();
-
- // create the IFRAME
- var iframe = document.createElement("iframe");
- htmlarea.appendChild(iframe);
-
- this._iframe = iframe;
-
- // creates & appends the status bar, if the case
- this._createStatusBar();
-
- // remove the default border as it keeps us from computing correctly
- // the sizes. (somebody tell me why doesn't this work in IE)
-
- if (!HTMLArea.is_ie) {
- iframe.style.borderWidth = "1px";
- // iframe.frameBorder = "1";
- // iframe.marginHeight = "0";
- // iframe.marginWidth = "0";
- }
-
- // size the IFRAME according to user's prefs or initial textarea
- var height = (this.config.height == "auto" ? (this._ta_size.h + "px") : this.config.height);
- height = parseInt(height);
- var width = (this.config.width == "auto" ? (this._ta_size.w + "px") : this.config.width);
- width = parseInt(width);
-
- if (!HTMLArea.is_ie) {
- height -= 2;
- width -= 2;
- }
-
- iframe.style.width = width + "px";
- if (this.config.sizeIncludesToolbar) {
- // substract toolbar height
- height -= this._toolbar.offsetHeight;
- height -= this._statusBar.offsetHeight;
- }
- if (height < 0) {
- height = 0;
- }
- iframe.style.height = height + "px";
-
- // the editor including the toolbar now have the same size as the
- // original textarea.. which means that we need to reduce that a bit.
- textarea.style.width = iframe.style.width;
- textarea.style.height = iframe.style.height;
-
- // IMPORTANT: we have to allow Mozilla a short time to recognize the
- // new frame. Otherwise we get a stupid exception.
- function initIframe() {
- var doc = editor._iframe.contentWindow.document;
- if (!doc) {
- // Try again..
- // FIXME: don't know what else to do here. Normally
- // we'll never reach this point.
- if (HTMLArea.is_gecko) {
- setTimeout(initIframe, 100);
- return false;
- } else {
- alert("ERROR: IFRAME can't be initialized.");
- }
- }
- if (HTMLArea.is_gecko) {
- // enable editable mode for Mozilla
- doc.designMode = "on";
- }
- editor._doc = doc;
- if (!editor.config.fullPage) {
- doc.open();
- var html = "<html>\n";
- html += "<head>\n";
- if (editor.config.baseURL)
- html += '<base href="' + editor.config.baseURL + '" />';
- html += "<style> html,body { border: 0px; } " +
- editor.config.pageStyle + "</style>\n";
- html += "</head>\n";
- html += "<body>\n";
- html += editor._textArea.value;
- html += "</body>\n";
- html += "</html>";
- doc.write(html);
- doc.close();
- } else {
- var html = editor._textArea.value;
- if (html.match(HTMLArea.RE_doctype)) {
- editor.setDoctype(RegExp.$1);
- html = html.replace(HTMLArea.RE_doctype, "");
- }
- doc.open();
- doc.write(html);
- doc.close();
- }
-
- if (HTMLArea.is_ie) {
- // enable editable mode for IE. For some reason this
- // doesn't work if done in the same place as for Gecko
- // (above).
- doc.body.contentEditable = true;
- }
-
- editor.focusEditor();
- // intercept some events; for updating the toolbar & keyboard handlers
- HTMLArea._addEvents
- (doc, ["keydown", "keypress", "mousedown", "mouseup", "drag"],
- function (event) {
- return editor._editorEvent(HTMLArea.is_ie ? editor._iframe.contentWindow.event : event);
- });
-
- // check if any plugins have registered refresh handlers
- for (var i in editor.plugins) {
- var plugin = editor.plugins[i].instance;
- if (typeof plugin.onGenerate == "function")
- plugin.onGenerate();
- }
-
- setTimeout(function() {
- editor.updateToolbar();
- }, 250);
-
- if (typeof editor.onGenerate == "function")
- editor.onGenerate();
- };
- setTimeout(initIframe, 100);
-};
-
-// Switches editor mode; parameter can be "textmode" or "wysiwyg". If no
-// parameter was passed this function toggles between modes.
-HTMLArea.prototype.setMode = function(mode) {
- if (typeof mode == "undefined") {
- mode = ((this._editMode == "textmode") ? "wysiwyg" : "textmode");
- }
- switch (mode) {
- case "textmode":
- this._textArea.value = this.getHTML();
- this._iframe.style.display = "none";
- this._textArea.style.display = "block";
- if (this.config.statusBar) {
- this._statusBar.innerHTML = HTMLArea.I18N.msg["TEXT_MODE"];
- }
- break;
- case "wysiwyg":
- if (HTMLArea.is_gecko) {
- // disable design mode before changing innerHTML
- try {
- this._doc.designMode = "off";
- } catch(e) {};
- }
- if (!this.config.fullPage)
- this._doc.body.innerHTML = this.getHTML();
- else
- this.setFullHTML(this.getHTML());
- this._iframe.style.display = "block";
- this._textArea.style.display = "none";
- if (HTMLArea.is_gecko) {
- // we need to refresh that info for Moz-1.3a
- try {
- this._doc.designMode = "on";
- } catch(e) {};
- }
- if (this.config.statusBar) {
- this._statusBar.innerHTML = '';
- this._statusBar.appendChild(document.createTextNode(HTMLArea.I18N.msg["Path"] + ": "));
- this._statusBar.appendChild(this._statusBarTree);
- }
- break;
- default:
- alert("Mode <" + mode + "> not defined!");
- return false;
- }
- this._editMode = mode;
- this.focusEditor();
-};
-
-HTMLArea.prototype.setFullHTML = function(html) {
- var save_multiline = RegExp.multiline;
- RegExp.multiline = true;
- if (html.match(HTMLArea.RE_doctype)) {
- this.setDoctype(RegExp.$1);
- html = html.replace(HTMLArea.RE_doctype, "");
- }
- RegExp.multiline = save_multiline;
- if (!HTMLArea.is_ie) {
- if (html.match(HTMLArea.RE_head))
- this._doc.getElementsByTagName("head")[0].innerHTML = RegExp.$1;
- if (html.match(HTMLArea.RE_body))
- this._doc.getElementsByTagName("body")[0].innerHTML = RegExp.$1;
- } else {
- var html_re = /<html>((.|\n)*?)<\/html>/i;
- html = html.replace(html_re, "$1");
- this._doc.open();
- this._doc.write(html);
- this._doc.close();
- this._doc.body.contentEditable = true;
- return true;
- }
-};
-
-/***************************************************
- * Category: PLUGINS
- ***************************************************/
-
-// this is the variant of the function above where the plugin arguments are
-// already packed in an array. Externally, it should be only used in the
-// full-screen editor code, in order to initialize plugins with the same
-// parameters as in the opener window.
-HTMLArea.prototype.registerPlugin2 = function(plugin, args) {
- if (typeof plugin == "string")
- plugin = eval(plugin);
- var obj = new plugin(this, args);
- if (obj) {
- var clone = {};
- var info = plugin._pluginInfo;
- for (var i in info)
- clone[i] = info[i];
- clone.instance = obj;
- clone.args = args;
- this.plugins[plugin._pluginInfo.name] = clone;
- } else
- alert("Can't register plugin " + plugin.toString() + ".");
-};
-
-// Create the specified plugin and register it with this HTMLArea
-HTMLArea.prototype.registerPlugin = function() {
- var plugin = arguments[0];
- var args = [];
- for (var i = 1; i < arguments.length; ++i)
- args.push(arguments[i]);
- this.registerPlugin2(plugin, args);
-};
-
-// static function that loads the required plugin and lang file, based on the
-// language loaded already for HTMLArea. You better make sure that the plugin
-// _has_ that language, otherwise shit might happen ;-)
-HTMLArea.loadPlugin = function(pluginName) {
- var dir = _editor_url + "plugins/" + pluginName;
- var plugin = pluginName.replace(/([a-z])([A-Z])([a-z])/g,
- function (str, l1, l2, l3) {
- return l1 + "-" + l2.toLowerCase() + l3;
- }).toLowerCase() + ".js";
- var plugin_file = dir + "/" + plugin;
- var plugin_lang = dir + "/lang/" + HTMLArea.I18N.lang + ".js";
- HTMLArea._scripts.push(plugin_file, plugin_lang);
- document.write("<script type='text/javascript' src='" + plugin_file + "'></script>");
- document.write("<script type='text/javascript' src='" + plugin_lang + "'></script>");
-};
-
-HTMLArea.loadStyle = function(style, plugin) {
- var url = _editor_url || '';
- if (typeof plugin != "undefined") {
- url += "plugins/" + plugin + "/";
- }
- url += style;
- document.write("<style type='text/css'>@import url(" + url + ");</style>");
-};
-HTMLArea.loadStyle("htmlarea.css");
-
-/***************************************************
- * Category: EDITOR UTILITIES
- ***************************************************/
-
-// The following function is a slight variation of the word cleaner code posted
-// by Weeezl (user @ InteractiveTools forums).
-HTMLArea.prototype._wordClean = function() {
- var D = this.getInnerHTML();
- if (D.indexOf('class=Mso') >= 0) {
-
- // make one line
- D = D.replace(/\r\n/g, ' ').
- replace(/\n/g, ' ').
- replace(/\r/g, ' ').
- replace(/\ \;/g,' ');
-
- // keep tags, strip attributes
- D = D.replace(/ class=[^\s|>]*/gi,'').
- //replace(/<p [^>]*TEXT-ALIGN: justify[^>]*>/gi,'<p align="justify">').
- replace(/ style=\"[^>]*\"/gi,'').
- replace(/ align=[^\s|>]*/gi,'');
-
- //clean up tags
- D = D.replace(/<b [^>]*>/gi,'<b>').
- replace(/<i [^>]*>/gi,'<i>').
- replace(/<li [^>]*>/gi,'<li>').
- replace(/<ul [^>]*>/gi,'<ul>');
-
- // replace outdated tags
- D = D.replace(/<b>/gi,'<strong>').
- replace(/<\/b>/gi,'</strong>');
-
- // mozilla doesn't like <em> tags
- D = D.replace(/<em>/gi,'<i>').
- replace(/<\/em>/gi,'</i>');
-
- // kill unwanted tags
- D = D.replace(/<\?xml:[^>]*>/g, ''). // Word xml
- replace(/<\/?st1:[^>]*>/g,''). // Word SmartTags
- replace(/<\/?[a-z]\:[^>]*>/g,''). // All other funny Word non-HTML stuff
- replace(/<\/?font[^>]*>/gi,''). // Disable if you want to keep font formatting
- replace(/<\/?span[^>]*>/gi,' ').
- replace(/<\/?div[^>]*>/gi,' ').
- replace(/<\/?pre[^>]*>/gi,' ').
- replace(/<\/?h[1-6][^>]*>/gi,' ');
-
- //remove empty tags
- //D = D.replace(/<strong><\/strong>/gi,'').
- //replace(/<i><\/i>/gi,'').
- //replace(/<P[^>]*><\/P>/gi,'');
-
- // nuke double tags
- oldlen = D.length + 1;
- while(oldlen > D.length) {
- oldlen = D.length;
- // join us now and free the tags, we'll be free hackers, we'll be free... ;-)
- D = D.replace(/<([a-z][a-z]*)> *<\/\1>/gi,' ').
- replace(/<([a-z][a-z]*)> *<([a-z][^>]*)> *<\/\1>/gi,'<$2>');
- }
- D = D.replace(/<([a-z][a-z]*)><\1>/gi,'<$1>').
- replace(/<\/([a-z][a-z]*)><\/\1>/gi,'<\/$1>');
-
- // nuke double spaces
- D = D.replace(/ */gi,' ');
-
- this.setHTML(D);
- this.updateToolbar();
- }
-};
-
-HTMLArea.prototype.forceRedraw = function() {
- this._doc.body.style.visibility = "hidden";
- this._doc.body.style.visibility = "visible";
- // this._doc.body.innerHTML = this.getInnerHTML();
-};
-
-// focuses the iframe window. returns a reference to the editor document.
-HTMLArea.prototype.focusEditor = function() {
- switch (this._editMode) {
- case "wysiwyg" : this._iframe.contentWindow.focus(); break;
- case "textmode": this._textArea.focus(); break;
- default : alert("ERROR: mode " + this._editMode + " is not defined");
- }
- return this._doc;
-};
-
-// takes a snapshot of the current text (for undo)
-HTMLArea.prototype._undoTakeSnapshot = function() {
- ++this._undoPos;
- if (this._undoPos >= this.config.undoSteps) {
- // remove the first element
- this._undoQueue.shift();
- --this._undoPos;
- }
- // use the fasted method (getInnerHTML);
- var take = true;
- var txt = this.getInnerHTML();
- if (this._undoPos > 0)
- take = (this._undoQueue[this._undoPos - 1] != txt);
- if (take) {
- this._undoQueue[this._undoPos] = txt;
- } else {
- this._undoPos--;
- }
-};
-
-HTMLArea.prototype.undo = function() {
- if (this._undoPos > 0) {
- var txt = this._undoQueue[--this._undoPos];
- if (txt) this.setHTML(txt);
- else ++this._undoPos;
- }
-};
-
-HTMLArea.prototype.redo = function() {
- if (this._undoPos < this._undoQueue.length - 1) {
- var txt = this._undoQueue[++this._undoPos];
- if (txt) this.setHTML(txt);
- else --this._undoPos;
- }
-};
-
-// updates enabled/disable/active state of the toolbar elements
-HTMLArea.prototype.updateToolbar = function(noStatus) {
- var doc = this._doc;
- var text = (this._editMode == "textmode");
- var ancestors = null;
- if (!text) {
- ancestors = this.getAllAncestors();
- if (this.config.statusBar && !noStatus) {
- this._statusBarTree.innerHTML = HTMLArea.I18N.msg["Path"] + ": "; // clear
- for (var i = ancestors.length; --i >= 0;) {
- var el = ancestors[i];
- if (!el) {
- // hell knows why we get here; this
- // could be a classic example of why
- // it's good to check for conditions
- // that are impossible to happen ;-)
- continue;
- }
- var a = document.createElement("a");
- a.href = "#";
- a.el = el;
- a.editor = this;
- a.onclick = function() {
- this.blur();
- this.editor.selectNodeContents(this.el);
- this.editor.updateToolbar(true);
- return false;
- };
- a.oncontextmenu = function() {
- // TODO: add context menu here
- this.blur();
- var info = "Inline style:\n\n";
- info += this.el.style.cssText.split(/;\s*/).join(";\n");
- alert(info);
- return false;
- };
- var txt = el.tagName.toLowerCase();
- a.title = el.style.cssText;
- if (el.id) {
- txt += "#" + el.id;
- }
- if (el.className) {
- txt += "." + el.className;
- }
- a.appendChild(document.createTextNode(txt));
- this._statusBarTree.appendChild(a);
- if (i != 0) {
- this._statusBarTree.appendChild(document.createTextNode(String.fromCharCode(0xbb)));
- }
- }
- }
- }
- for (var i in this._toolbarObjects) {
- var btn = this._toolbarObjects[i];
- var cmd = i;
- var inContext = true;
- if (btn.context && !text) {
- inContext = false;
- var context = btn.context;
- var attrs = [];
- if (/(.*)\[(.*?)\]/.test(context)) {
- context = RegExp.$1;
- attrs = RegExp.$2.split(",");
- }
- context = context.toLowerCase();
- var match = (context == "*");
- for (var k in ancestors) {
- if (!ancestors[k]) {
- // the impossible really happens.
- continue;
- }
- if (match || (ancestors[k].tagName.toLowerCase() == context)) {
- inContext = true;
- for (var ka in attrs) {
- if (!eval("ancestors[k]." + attrs[ka])) {
- inContext = false;
- break;
- }
- }
- if (inContext) {
- break;
- }
- }
- }
- }
- btn.state("enabled", (!text || btn.text) && inContext);
- if (typeof cmd == "function") {
- continue;
- }
- // look-it-up in the custom dropdown boxes
- var dropdown = this.config.customSelects[cmd];
- if ((!text || btn.text) && (typeof dropdown != "undefined")) {
- dropdown.refresh(this);
- continue;
- }
- switch (cmd) {
- case "fontname":
- case "fontsize":
- case "formatblock":
- if (!text) try {
- var value = ("" + doc.queryCommandValue(cmd)).toLowerCase();
- if (!value) {
- // FIXME: what do we do here?
- break;
- }
- // HACK -- retrieve the config option for this
- // combo box. We rely on the fact that the
- // variable in config has the same name as
- // button name in the toolbar.
- var options = this.config[cmd];
- var k = 0;
- // btn.element.selectedIndex = 0;
- for (var j in options) {
- // FIXME: the following line is scary.
- if ((j.toLowerCase() == value) ||
- (options[j].substr(0, value.length).toLowerCase() == value)) {
- btn.element.selectedIndex = k;
- break;
- }
- ++k;
- }
- } catch(e) {};
- break;
- case "textindicator":
- if (!text) {
- try {with (btn.element.style) {
- backgroundColor = HTMLArea._makeColor(
- doc.queryCommandValue(HTMLArea.is_ie ? "backcolor" : "hilitecolor"));
- if (/transparent/i.test(backgroundColor)) {
- // Mozilla
- backgroundColor = HTMLArea._makeColor(doc.queryCommandValue("backcolor"));
- }
- color = HTMLArea._makeColor(doc.queryCommandValue("forecolor"));
- fontFamily = doc.queryCommandValue("fontname");
- fontWeight = doc.queryCommandState("bold") ? "bold" : "normal";
- fontStyle = doc.queryCommandState("italic") ? "italic" : "normal";
- }} catch (e) {
- // alert(e + "\n\n" + cmd);
- }
- }
- break;
- case "htmlmode": btn.state("active", text); break;
- case "lefttoright":
- case "righttoleft":
- var el = this.getParentElement();
- while (el && !HTMLArea.isBlockElement(el))
- el = el.parentNode;
- if (el)
- btn.state("active", (el.style.direction == ((cmd == "righttoleft") ? "rtl" : "ltr")));
- break;
- default:
- try {
- btn.state("active", (!text && doc.queryCommandState(cmd)));
- } catch (e) {}
- }
- }
- // take undo snapshots
- if (this._customUndo && !this._timerUndo) {
- this._undoTakeSnapshot();
- var editor = this;
- this._timerUndo = setTimeout(function() {
- editor._timerUndo = null;
- }, this.config.undoTimeout);
- }
- // check if any plugins have registered refresh handlers
- for (var i in this.plugins) {
- var plugin = this.plugins[i].instance;
- if (typeof plugin.onUpdateToolbar == "function")
- plugin.onUpdateToolbar();
- }
-};
-
-/** Returns a node after which we can insert other nodes, in the current
- * selection. The selection is removed. It splits a text node, if needed.
- */
-HTMLArea.prototype.insertNodeAtSelection = function(toBeInserted) {
- if (!HTMLArea.is_ie) {
- var sel = this._getSelection();
- var range = this._createRange(sel);
- // remove the current selection
- sel.removeAllRanges();
- range.deleteContents();
- var node = range.startContainer;
- var pos = range.startOffset;
- switch (node.nodeType) {
- case 3: // Node.TEXT_NODE
- // we have to split it at the caret position.
- if (toBeInserted.nodeType == 3) {
- // do optimized insertion
- node.insertData(pos, toBeInserted.data);
- range = this._createRange();
- range.setEnd(node, pos + toBeInserted.length);
- range.setStart(node, pos + toBeInserted.length);
- sel.addRange(range);
- } else {
- node = node.splitText(pos);
- var selnode = toBeInserted;
- if (toBeInserted.nodeType == 11 /* Node.DOCUMENT_FRAGMENT_NODE */) {
- selnode = selnode.firstChild;
- }
- node.parentNode.insertBefore(toBeInserted, node);
- this.selectNodeContents(selnode);
- this.updateToolbar();
- }
- break;
- case 1: // Node.ELEMENT_NODE
- var selnode = toBeInserted;
- if (toBeInserted.nodeType == 11 /* Node.DOCUMENT_FRAGMENT_NODE */) {
- selnode = selnode.firstChild;
- }
- node.insertBefore(toBeInserted, node.childNodes[pos]);
- this.selectNodeContents(selnode);
- this.updateToolbar();
- break;
- }
- } else {
- return null; // this function not yet used for IE <FIXME>
- }
-};
-
-// Returns the deepest node that contains both endpoints of the selection.
-HTMLArea.prototype.getParentElement = function() {
- var sel = this._getSelection();
- var range = this._createRange(sel);
- if (HTMLArea.is_ie) {
- switch (sel.type) {
- case "Text":
- case "None":
- // It seems that even for selection of type "None",
- // there _is_ a parent element and it's value is not
- // only correct, but very important to us. MSIE is
- // certainly the buggiest browser in the world and I
- // wonder, God, how can Earth stand it?
- return range.parentElement();
- case "Control":
- return range.item(0);
- default:
- return this._doc.body;
- }
- } else try {
- var p = range.commonAncestorContainer;
- if (!range.collapsed && range.startContainer == range.endContainer &&
- range.startOffset - range.endOffset <= 1 && range.startContainer.hasChildNodes())
- p = range.startContainer.childNodes[range.startOffset];
- /*
- alert(range.startContainer + ":" + range.startOffset + "\n" +
- range.endContainer + ":" + range.endOffset);
- */
- while (p.nodeType == 3) {
- p = p.parentNode;
- }
- return p;
- } catch (e) {
- return null;
- }
-};
-
-// Returns an array with all the ancestor nodes of the selection.
-HTMLArea.prototype.getAllAncestors = function() {
- var p = this.getParentElement();
- var a = [];
- while (p && (p.nodeType == 1) && (p.tagName.toLowerCase() != 'body')) {
- a.push(p);
- p = p.parentNode;
- }
- a.push(this._doc.body);
- return a;
-};
-
-// Selects the contents inside the given node
-HTMLArea.prototype.selectNodeContents = function(node, pos) {
- this.focusEditor();
- this.forceRedraw();
- var range;
- var collapsed = (typeof pos != "undefined");
- if (HTMLArea.is_ie) {
- range = this._doc.body.createTextRange();
- range.moveToElementText(node);
- (collapsed) && range.collapse(pos);
- range.select();
- } else {
- var sel = this._getSelection();
- range = this._doc.createRange();
- range.selectNodeContents(node);
- (collapsed) && range.collapse(pos);
- sel.removeAllRanges();
- sel.addRange(range);
- }
-};
-
-/** Call this function to insert HTML code at the current position. It deletes
- * the selection, if any.
- */
-HTMLArea.prototype.insertHTML = function(html) {
- var sel = this._getSelection();
- var range = this._createRange(sel);
- if (HTMLArea.is_ie) {
- range.pasteHTML(html);
- } else {
- // construct a new document fragment with the given HTML
- var fragment = this._doc.createDocumentFragment();
- var div = this._doc.createElement("div");
- div.innerHTML = html;
- while (div.firstChild) {
- // the following call also removes the node from div
- fragment.appendChild(div.firstChild);
- }
- // this also removes the selection
- var node = this.insertNodeAtSelection(fragment);
- }
-};
-
-/**
- * Call this function to surround the existing HTML code in the selection with
- * your tags. FIXME: buggy! This function will be deprecated "soon".
- */
-HTMLArea.prototype.surroundHTML = function(startTag, endTag) {
- var html = this.getSelectedHTML();
- // the following also deletes the selection
- this.insertHTML(startTag + html + endTag);
-};
-
-/// Retrieve the selected block
-HTMLArea.prototype.getSelectedHTML = function() {
- var sel = this._getSelection();
- var range = this._createRange(sel);
- var existing = null;
- if (HTMLArea.is_ie) {
- existing = range.htmlText;
- } else {
- existing = HTMLArea.getHTML(range.cloneContents(), false, this);
- }
- return existing;
-};
-
-/// Return true if we have some selection
-HTMLArea.prototype.hasSelectedText = function() {
- // FIXME: come _on_ mishoo, you can do better than this ;-)
- return this.getSelectedHTML() != '';
-};
-
-HTMLArea.prototype._createLink = function(link) {
- var editor = this;
- var outparam = null;
- if (typeof link == "undefined") {
- link = this.getParentElement();
- if (link && !/^a$/i.test(link.tagName))
- link = null;
- }
- if (link) outparam = {
- f_href : HTMLArea.is_ie ? editor.stripBaseURL(link.href) : link.getAttribute("href"),
- f_title : link.title,
- f_target : link.target
- };
- this._popupDialog("link.html", function(param) {
- if (!param)
- return false;
- var a = link;
- if (!a) {
- editor._doc.execCommand("createlink", false, param.f_href);
- a = editor.getParentElement();
- var sel = editor._getSelection();
- var range = editor._createRange(sel);
- if (!HTMLArea.is_ie) {
- a = range.startContainer;
- if (!/^a$/i.test(a.tagName))
- a = a.nextSibling;
- }
- } else a.href = param.f_href.trim();
- if (!/^a$/i.test(a.tagName))
- return false;
- a.target = param.f_target.trim();
- a.title = param.f_title.trim();
- editor.selectNodeContents(a);
- editor.updateToolbar();
- }, outparam);
-};
-
-// Called when the user clicks on "InsertImage" button. If an image is already
-// there, it will just modify it's properties.
-HTMLArea.prototype._insertImage = function(image) {
- var editor = this; // for nested functions
- var outparam = null;
- if (typeof image == "undefined") {
- image = this.getParentElement();
- if (image && !/^img$/i.test(image.tagName))
- image = null;
- }
- if (image) outparam = {
- //OSCAR: we shouldn't convert images into relateive urls!!!
- f_url : HTMLArea.is_ie ? image.src : image.getAttribute("src"),
- f_alt : image.alt,
- f_border : image.border,
- f_align : image.align,
- f_vert : image.vspace,
- f_horiz : image.hspace
- };
- this._popupDialog("insert_image.html", function(param) {
- if (!param) { // user must have pressed Cancel
- return false;
- }
- var img = image;
- if (!img) {
- var sel = editor._getSelection();
- var range = editor._createRange(sel);
- editor._doc.execCommand("insertimage", false, param.f_url);
- if (HTMLArea.is_ie) {
- img = range.parentElement();
- // wonder if this works...
- if (img.tagName.toLowerCase() != "img") {
- img = img.previousSibling;
- }
- } else {
- img = range.startContainer.previousSibling;
- }
- } else {
- img.src = param.f_url;
- }
- for (field in param) {
- var value = param[field];
- switch (field) {
- case "f_alt" : img.alt = value; break;
- case "f_border" : img.border = parseInt(value || "0"); break;
- case "f_align" : img.align = value; break;
- case "f_vert" : img.vspace = parseInt(value || "0"); break;
- case "f_horiz" : img.hspace = parseInt(value || "0"); break;
- }
- }
- }, outparam);
-};
-
-// Called when the user clicks the Insert Table button
-HTMLArea.prototype._insertTable = function() {
- var sel = this._getSelection();
- var range = this._createRange(sel);
- var editor = this; // for nested functions
- this._popupDialog("insert_table.html", function(param) {
- if (!param) { // user must have pressed Cancel
- return false;
- }
- var doc = editor._doc;
- // create the table element
- var table = doc.createElement("table");
- // assign the given arguments
- for (var field in param) {
- var value = param[field];
- if (!value) {
- continue;
- }
- switch (field) {
- case "f_width" : table.style.width = value + param["f_unit"]; break;
- case "f_align" : table.align = value; break;
- case "f_border" : table.border = parseInt(value); break;
- case "f_spacing" : table.cellspacing = parseInt(value); break;
- case "f_padding" : table.cellpadding = parseInt(value); break;
- }
- }
- var tbody = doc.createElement("tbody");
- table.appendChild(tbody);
- for (var i = 0; i < param["f_rows"]; ++i) {
- var tr = doc.createElement("tr");
- tbody.appendChild(tr);
- for (var j = 0; j < param["f_cols"]; ++j) {
- var td = doc.createElement("td");
- tr.appendChild(td);
- // Mozilla likes to see something inside the cell.
- (HTMLArea.is_gecko) && td.appendChild(doc.createElement("br"));
- }
- }
- if (HTMLArea.is_ie) {
- range.pasteHTML(table.outerHTML);
- } else {
- // insert the table
- editor.insertNodeAtSelection(table);
- }
- return true;
- }, null);
-};
-
-/***************************************************
- * Category: EVENT HANDLERS
- ***************************************************/
-
-// el is reference to the SELECT object
-// txt is the name of the select field, as in config.toolbar
-HTMLArea.prototype._comboSelected = function(el, txt) {
- this.focusEditor();
- var value = el.options[el.selectedIndex].value;
- switch (txt) {
- case "fontname":
- case "fontsize": this.execCommand(txt, false, value); break;
- case "formatblock":
- (HTMLArea.is_ie) && (value = "<" + value + ">");
- this.execCommand(txt, false, value);
- break;
- default:
- // try to look it up in the registered dropdowns
- var dropdown = this.config.customSelects[txt];
- if (typeof dropdown != "undefined") {
- dropdown.action(this);
- } else {
- alert("FIXME: combo box " + txt + " not implemented");
- }
- }
-};
-
-// the execCommand function (intercepts some commands and replaces them with
-// our own implementation)
-HTMLArea.prototype.execCommand = function(cmdID, UI, param) {
- var editor = this; // for nested functions
- this.focusEditor();
- cmdID = cmdID.toLowerCase();
- switch (cmdID) {
- case "htmlmode" : this.setMode(); break;
- case "hilitecolor":
- (HTMLArea.is_ie) && (cmdID = "backcolor");
- case "forecolor":
- this._popupDialog("select_color.html", function(color) {
- if (color) { // selection not canceled
- editor._doc.execCommand(cmdID, false, "#" + color);
- }
- }, HTMLArea._colorToRgb(this._doc.queryCommandValue(cmdID)));
- break;
- case "createlink":
- this._createLink();
- break;
- case "popupeditor":
- // this object will be passed to the newly opened window
- HTMLArea._object = this;
- if (HTMLArea.is_ie) {
- //if (confirm(HTMLArea.I18N.msg["IE-sucks-full-screen"]))
- {
- window.open(this.popupURL("fullscreen.html"), "ha_fullscreen",
- "toolbar=no,location=no,directories=no,status=no,menubar=no," +
- "scrollbars=no,resizable=yes,width=640,height=480");
- }
- } else {
- window.open(this.popupURL("fullscreen.html"), "ha_fullscreen",
- "toolbar=no,menubar=no,personalbar=no,width=640,height=480," +
- "scrollbars=no,resizable=yes");
- }
- break;
- case "undo":
- case "redo":
- if (this._customUndo)
- this[cmdID]();
- else
- this._doc.execCommand(cmdID, UI, param);
- break;
- case "inserttable": this._insertTable(); break;
- case "insertimage": this._insertImage(); break;
- case "about" : this._popupDialog("about.html", null, this); break;
- case "showhelp" : window.open(_editor_url + "reference.html", "ha_help"); break;
-
- case "killword": this._wordClean(); break;
-
- case "cut":
- case "copy":
- case "paste":
- try {
- if (this.config.killWordOnPaste)
- this._wordClean();
- this._doc.execCommand(cmdID, UI, param);
- } catch (e) {
- if (HTMLArea.is_gecko) {
- if (confirm("Unprivileged scripts cannot access Cut/Copy/Paste programatically " +
- "for security reasons. Click OK to see a technical note at mozilla.org " +
- "which shows you how to allow a script to access the clipboard."))
- window.open("http://mozilla.org/editor/midasdemo/securityprefs.html");
- }
- }
- break;
- case "lefttoright":
- case "righttoleft":
- var dir = (cmdID == "righttoleft") ? "rtl" : "ltr";
- var el = this.getParentElement();
- while (el && !HTMLArea.isBlockElement(el))
- el = el.parentNode;
- if (el) {
- if (el.style.direction == dir)
- el.style.direction = "";
- else
- el.style.direction = dir;
- }
- break;
- default: this._doc.execCommand(cmdID, UI, param);
- }
- this.updateToolbar();
- return false;
-};
-
-/** A generic event handler for things that happen in the IFRAME's document.
- * This function also handles key bindings. */
-HTMLArea.prototype._editorEvent = function(ev) {
- var editor = this;
- var keyEvent = (HTMLArea.is_ie && ev.type == "keydown") || (ev.type == "keypress");
- if (keyEvent) {
- for (var i in editor.plugins) {
- var plugin = editor.plugins[i].instance;
- if (typeof plugin.onKeyPress == "function") plugin.onKeyPress(ev);
- }
- }
- if (keyEvent && ev.ctrlKey) {
- var sel = null;
- var range = null;
- var key = String.fromCharCode(HTMLArea.is_ie ? ev.keyCode : ev.charCode).toLowerCase();
- var cmd = null;
- var value = null;
- switch (key) {
- case 'a':
- if (!HTMLArea.is_ie) {
- // KEY select all
- sel = this._getSelection();
- sel.removeAllRanges();
- range = this._createRange();
- range.selectNodeContents(this._doc.body);
- sel.addRange(range);
- HTMLArea._stopEvent(ev);
- }
- break;
-
- // simple key commands follow
-
- case 'b': cmd = "bold"; break;
- case 'i': cmd = "italic"; break;
- case 'u': cmd = "underline"; break;
- case 's': cmd = "strikethrough"; break;
- case 'l': cmd = "justifyleft"; break;
- case 'e': cmd = "justifycenter"; break;
- case 'r': cmd = "justifyright"; break;
- case 'j': cmd = "justifyfull"; break;
- case 'z': cmd = "undo"; break;
- case 'y': cmd = "redo"; break;
- case 'v': cmd = "paste"; break;
-
- case '0': cmd = "killword"; break;
-
- // headings
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- cmd = "formatblock";
- value = "h" + key;
- if (HTMLArea.is_ie) {
- value = "<" + value + ">";
- }
- break;
- }
- if (cmd) {
- // execute simple command
- this.execCommand(cmd, false, value);
- HTMLArea._stopEvent(ev);
- }
- }
- /*
- else if (keyEvent) {
- // other keys here
- switch (ev.keyCode) {
- case 13: // KEY enter
- // if (HTMLArea.is_ie) {
- this.insertHTML("<br />");
- HTMLArea._stopEvent(ev);
- // }
- break;
- }
- }
- */
- // update the toolbar state after some time
- if (editor._timerToolbar) {
- clearTimeout(editor._timerToolbar);
- }
- editor._timerToolbar = setTimeout(function() {
- editor.updateToolbar();
- editor._timerToolbar = null;
- }, 50);
-};
-
-// retrieve the HTML
-HTMLArea.prototype.getHTML = function() {
- switch (this._editMode) {
- case "wysiwyg" :
- if (!this.config.fullPage) {
- return HTMLArea.getHTML(this._doc.body, false, this);
- } else
- return this.doctype + "\n" + HTMLArea.getHTML(this._doc.documentElement, true, this);
- case "textmode" : return this._textArea.value;
- default : alert("Mode <" + mode + "> not defined!");
- }
- return false;
-};
-
-// retrieve the HTML (fastest version, but uses innerHTML)
-HTMLArea.prototype.getInnerHTML = function() {
- switch (this._editMode) {
- case "wysiwyg" :
- if (!this.config.fullPage)
- return this._doc.body.innerHTML;
- else
- return this.doctype + "\n" + this._doc.documentElement.innerHTML;
- case "textmode" : return this._textArea.value;
- default : alert("Mode <" + mode + "> not defined!");
- }
- return false;
-};
-
-// completely change the HTML inside
-HTMLArea.prototype.setHTML = function(html) {
- switch (this._editMode) {
- case "wysiwyg" :
- if (!this.config.fullPage)
- this._doc.body.innerHTML = html;
- else
- // this._doc.documentElement.innerHTML = html;
- this._doc.body.innerHTML = html;
- break;
- case "textmode" : this._textArea.value = html; break;
- default : alert("Mode <" + mode + "> not defined!");
- }
- return false;
-};
-
-// sets the given doctype (useful when config.fullPage is true)
-HTMLArea.prototype.setDoctype = function(doctype) {
- this.doctype = doctype;
-};
-
-/***************************************************
- * Category: UTILITY FUNCTIONS
- ***************************************************/
-
-// browser identification
-
-HTMLArea.agt = navigator.userAgent.toLowerCase();
-HTMLArea.is_ie = ((HTMLArea.agt.indexOf("msie") != -1) && (HTMLArea.agt.indexOf("opera") == -1));
-HTMLArea.is_opera = (HTMLArea.agt.indexOf("opera") != -1);
-HTMLArea.is_mac = (HTMLArea.agt.indexOf("mac") != -1);
-HTMLArea.is_mac_ie = (HTMLArea.is_ie && HTMLArea.is_mac);
-HTMLArea.is_win_ie = (HTMLArea.is_ie && !HTMLArea.is_mac);
-HTMLArea.is_gecko = (navigator.product == "Gecko");
-
-// variable used to pass the object to the popup editor window.
-HTMLArea._object = null;
-
-// function that returns a clone of the given object
-HTMLArea.cloneObject = function(obj) {
- var newObj = new Object;
-
- // check for array objects
- if (obj.constructor.toString().indexOf("function Array(") == 1) {
- newObj = obj.constructor();
- }
-
- // check for function objects (as usual, IE is fucked up)
- if (obj.constructor.toString().indexOf("function Function(") == 1) {
- newObj = obj; // just copy reference to it
- } else for (var n in obj) {
- var node = obj[n];
- if (typeof node == 'object') { newObj[n] = HTMLArea.cloneObject(node); }
- else { newObj[n] = node; }
- }
-
- return newObj;
-};
-
-// FIXME!!! this should return false for IE < 5.5
-HTMLArea.checkSupportedBrowser = function() {
- if (HTMLArea.is_gecko) {
- if (navigator.productSub < 20021201) {
- alert("You need at least Mozilla-1.3 Alpha.\n" +
- "Sorry, your Gecko is not supported.");
- return false;
- }
- if (navigator.productSub < 20030210) {
- alert("Mozilla < 1.3 Beta is not supported!\n" +
- "I'll try, though, but it might not work.");
- }
- }
- return HTMLArea.is_gecko || HTMLArea.is_ie;
-};
-
-// selection & ranges
-
-// returns the current selection object
-HTMLArea.prototype._getSelection = function() {
- if (HTMLArea.is_ie) {
- return this._doc.selection;
- } else {
- return this._iframe.contentWindow.getSelection();
- }
-};
-
-// returns a range for the current selection
-HTMLArea.prototype._createRange = function(sel) {
- if (HTMLArea.is_ie) {
- return sel.createRange();
- } else {
- this.focusEditor();
- if (typeof sel != "undefined") {
- try {
- return sel.getRangeAt(0);
- } catch(e) {
- return this._doc.createRange();
- }
- } else {
- return this._doc.createRange();
- }
- }
-};
-
-// event handling
-
-HTMLArea._addEvent = function(el, evname, func) {
- if (HTMLArea.is_ie) {
- el.attachEvent("on" + evname, func);
- } else {
- el.addEventListener(evname, func, true);
- }
-};
-
-HTMLArea._addEvents = function(el, evs, func) {
- for (var i in evs) {
- HTMLArea._addEvent(el, evs[i], func);
- }
-};
-
-HTMLArea._removeEvent = function(el, evname, func) {
- if (HTMLArea.is_ie) {
- el.detachEvent("on" + evname, func);
- } else {
- el.removeEventListener(evname, func, true);
- }
-};
-
-HTMLArea._removeEvents = function(el, evs, func) {
- for (var i in evs) {
- HTMLArea._removeEvent(el, evs[i], func);
- }
-};
-
-HTMLArea._stopEvent = function(ev) {
- if (HTMLArea.is_ie) {
- ev.cancelBubble = true;
- ev.returnValue = false;
- } else {
- ev.preventDefault();
- ev.stopPropagation();
- }
-};
-
-HTMLArea._removeClass = function(el, className) {
- if (!(el && el.className)) {
- return;
- }
- var cls = el.className.split(" ");
- var ar = new Array();
- for (var i = cls.length; i > 0;) {
- if (cls[--i] != className) {
- ar[ar.length] = cls[i];
- }
- }
- el.className = ar.join(" ");
-};
-
-HTMLArea._addClass = function(el, className) {
- // remove the class first, if already there
- HTMLArea._removeClass(el, className);
- el.className += " " + className;
-};
-
-HTMLArea._hasClass = function(el, className) {
- if (!(el && el.className)) {
- return false;
- }
- var cls = el.className.split(" ");
- for (var i = cls.length; i > 0;) {
- if (cls[--i] == className) {
- return true;
- }
- }
- return false;
-};
-
-HTMLArea.isBlockElement = function(el) {
- var blockTags = " body form textarea fieldset ul ol dl li div " +
- "p h1 h2 h3 h4 h5 h6 quote pre table thead " +
- "tbody tfoot tr td iframe address ";
- return (blockTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
-};
-
-HTMLArea.needsClosingTag = function(el) {
- var closingTags = " head script style div span tr td tbody table em strong font a title ";
- return (closingTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
-};
-
-// performs HTML encoding of some given string
-HTMLArea.htmlEncode = function(str) {
- // we don't need regexp for that, but.. so be it for now.
- str = str.replace(/&/ig, "&");
- str = str.replace(/</ig, "<");
- str = str.replace(/>/ig, ">");
- // Fix the multi-spaces converted to 160 error. we need to convert them back to space again.
- str = str.replace(/\xA0/g, " ");
- str = str.replace(/\x22/ig, """);
- // \x22 means '"' -- we use hex reprezentation so that we don't disturb
- // JS compressors (well, at least mine fails.. ;)
- return str;
-};
-
-// Retrieves the HTML code from the given node. This is a replacement for
-// getting innerHTML, using standard DOM calls.
-HTMLArea.getHTML = function(root, outputRoot, editor) {
- var html = "";
- switch (root.nodeType) {
- case 1: // Node.ELEMENT_NODE
- case 11: // Node.DOCUMENT_FRAGMENT_NODE
- var closed;
- var i;
- var root_tag = (root.nodeType == 1) ? root.tagName.toLowerCase() : '';
- if (HTMLArea.is_ie && root_tag == "head") {
- if (outputRoot)
- html += "<head>";
- // lowercasize
- var save_multiline = RegExp.multiline;
- RegExp.multiline = true;
- var txt = root.innerHTML.replace(HTMLArea.RE_tagName, function(str, p1, p2) {
- return p1 + p2.toLowerCase();
- });
- RegExp.multiline = save_multiline;
- html += txt;
- if (outputRoot)
- html += "</head>";
- break;
- } else if (outputRoot) {
- closed = (!(root.hasChildNodes() || HTMLArea.needsClosingTag(root)));
- html = "<" + root.tagName.toLowerCase();
- var attrs = root.attributes;
- for (i = 0; i < attrs.length; ++i) {
- var a = attrs.item(i);
- if (!a.specified) {
- continue;
- }
- var name = a.nodeName.toLowerCase();
- if (/_moz|contenteditable|_msh/.test(name)) {
- // avoid certain attributes
- continue;
- }
- var value;
- if (name != "style") {
- // IE5.5 reports 25 when cellSpacing is
- // 1; other values might be doomed too.
- // For this reason we extract the
- // values directly from the root node.
- // I'm starting to HATE JavaScript
- // development. Browser differences
- // suck.
- //
- // Using Gecko the values of href and src are converted to absolute links
- // unless we get them using nodeValue()
- if (typeof root[a.nodeName] != "undefined" && name != "href" && name != "src") {
- value = root[a.nodeName];
- } else {
- value = a.nodeValue;
- // IE seems not willing to return the original values - it converts to absolute
- // links using a.nodeValue, a.value, a.stringValue, root.getAttribute("href")
- // So we have to strip the baseurl manually -/
- //if (HTMLArea.is_ie && (name == "href" || name == "src")) {
- //OSCAR: images shouldn't be turned into relative paths!!
- if (HTMLArea.is_ie && (name == "href")) {
- value = editor.stripBaseURL(value);
- }
- }
- } else { // IE fails to put style in attributes list
- // FIXME: cssText reported by IE is UPPERCASE
- value = root.style.cssText;
- }
- if (/(_moz|^$)/.test(value)) {
- // Mozilla reports some special tags
- // here; we don't need them.
- continue;
- }
- html += " " + name + '="' + value + '"';
- }
- html += closed ? " />" : ">";
- }
- for (i = root.firstChild; i; i = i.nextSibling) {
- html += HTMLArea.getHTML(i, true, editor);
- }
- if (outputRoot && !closed) {
- html += "</" + root.tagName.toLowerCase() + ">";
- }
- break;
- case 3: // Node.TEXT_NODE
- // If a text node is alone in an element and all spaces, replace it with an non breaking one
- // This partially undoes the damage done by moz, which translates ' 's into spaces in the data element
- if ( !root.previousSibling && !root.nextSibling && root.data.match(/^\s*$/i) ) html = ' ';
- else html = HTMLArea.htmlEncode(root.data);
- break;
- case 8: // Node.COMMENT_NODE
- html = "<!--" + root.data + "-->";
- break; // skip comments, for now.
- }
- return html;
-};
-
-HTMLArea.prototype.stripBaseURL = function(string) {
- var baseurl = this.config.baseURL;
-
- // strip to last directory in case baseurl points to a file
- baseurl = baseurl.replace(/[^\/]+$/, '');
- var basere = new RegExp(baseurl);
- string = string.replace(basere, "");
-
- // strip host-part of URL which is added by MSIE to links relative to server root
- baseurl = baseurl.replace(/^(https?:\/\/[^\/]+)(.*)$/, '$1');
- basere = new RegExp(baseurl);
- return string.replace(basere, "");
-};
-
-String.prototype.trim = function() {
- a = this.replace(/^\s+/, '');
- return a.replace(/\s+$/, '');
-};
-
-// creates a rgb-style color from a number
-HTMLArea._makeColor = function(v) {
- if (typeof v != "number") {
- // already in rgb (hopefully); IE doesn't get here.
- return v;
- }
- // IE sends number; convert to rgb.
- var r = v & 0xFF;
- var g = (v >> 8) & 0xFF;
- var b = (v >> 16) & 0xFF;
- return "rgb(" + r + "," + g + "," + b + ")";
-};
-
-// returns hexadecimal color representation from a number or a rgb-style color.
-HTMLArea._colorToRgb = function(v) {
- if (!v)
- return '';
-
- // returns the hex representation of one byte (2 digits)
- function hex(d) {
- return (d < 16) ? ("0" + d.toString(16)) : d.toString(16);
- };
-
- if (typeof v == "number") {
- // we're talking to IE here
- var r = v & 0xFF;
- var g = (v >> 8) & 0xFF;
- var b = (v >> 16) & 0xFF;
- return "#" + hex(r) + hex(g) + hex(b);
- }
-
- if (v.substr(0, 3) == "rgb") {
- // in rgb(...) form -- Mozilla
- var re = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/;
- if (v.match(re)) {
- var r = parseInt(RegExp.$1);
- var g = parseInt(RegExp.$2);
- var b = parseInt(RegExp.$3);
- return "#" + hex(r) + hex(g) + hex(b);
- }
- // doesn't match RE?! maybe uses percentages or float numbers
- // -- FIXME: not yet implemented.
- return null;
- }
-
- if (v.substr(0, 1) == "#") {
- // already hex rgb (hopefully :D )
- return v;
- }
-
- // if everything else fails ;)
- return null;
-};
-
-// modal dialogs for Mozilla (for IE we're using the showModalDialog() call).
-
-// receives an URL to the popup dialog and a function that receives one value;
-// this function will get called after the dialog is closed, with the return
-// value of the dialog.
-HTMLArea.prototype._popupDialog = function(url, action, init) {
- Dialog(this.popupURL(url), action, init);
-};
-
-// paths
-
-HTMLArea.prototype.imgURL = function(file, plugin) {
- if (typeof plugin == "undefined")
- return _editor_url + file;
- else
- return _editor_url + "plugins/" + plugin + "/img/" + file;
-};
-
-HTMLArea.prototype.popupURL = function(file) {
- var url = "";
- if (file.match(/^plugin:\/\/(.*?)\/(.*)/)) {
- var plugin = RegExp.$1;
- var popup = RegExp.$2;
- if (!/\.html$/.test(popup))
- popup += ".html";
- url = _editor_url + "plugins/" + plugin + "/popups/" + popup;
- } else
- url = _editor_url + this.config.popupURL + file;
- return url;
-};
-
-/**
- * FIX: Internet Explorer returns an item having the _name_ equal to the given
- * id, even if it's not having any id. This way it can return a different form
- * field even if it's not a textarea. This workarounds the problem by
- * specifically looking to search only elements having a certain tag name.
- */
-HTMLArea.getElementById = function(tag, id) {
- var el, i, objs = document.getElementsByTagName(tag);
- for (i = objs.length; --i >= 0 && (el = objs[i]);)
- if (el.id == id)
- return el;
- return null;
-};
-
-
-
-// EOF
-// Local variables: //
-// c-basic-offset:8 //
-// indent-tabs-mode:t //
-// End: //
+// htmlArea v3.0 - Copyright (c) 2003-2005 dynarch.com
+// 2002-2003 interactivetools.com, inc.
+// This copyright notice MUST stay intact for use (see license.txt).
+//
+// A free WYSIWYG editor replacement for <textarea> fields.
+// For full source code and docs, visit http://www.interactivetools.com/
+//
+// Version 3.0 developed by Mihai Bazon.
+// http://dynarch.com/mishoo/
+//
+// $Id: htmlarea.js,v 1.96 2005/01/20 17:49:04 mishoo Exp $
+
+// -------------------------------------------------------------
+// PLOG HTMLAREA TWEAK
+// Changed by: Mark Wu
+// Date: 2005/02/05
+// Purpose: Base URL and Language setting for pLog
+// -------------------------------------------------------------
+var _editor_url = "js/htmlarea";
+var _editor_lang = "en";
+// -------------------------------------------------------------
+
+if (typeof _editor_url == "string") {
+ // Leave exactly one backslash at the end of _editor_url
+ _editor_url = _editor_url.replace(/\x2f*$/, '/');
+} else {
+ alert("WARNING: _editor_url is not set! You should set this variable to the editor files path; it should preferably be an absolute path, like in '/htmlarea/', but it can be relative if you prefer. Further we will try to load the editor files correctly but we'll probably fail.");
+ _editor_url = '';
+}
+
+// make sure we have a language
+if (typeof _editor_lang == "string") {
+ _editor_lang = _editor_lang.toLowerCase();
+} else {
+ _editor_lang = "en";
+}
+
+// browser identification
+HTMLArea.agt = navigator.userAgent.toLowerCase();
+HTMLArea.is_ie = ((HTMLArea.agt.indexOf("msie") != -1) && (HTMLArea.agt.indexOf("opera") == -1));
+HTMLArea.is_opera = (HTMLArea.agt.indexOf("opera") != -1);
+HTMLArea.is_mac = (HTMLArea.agt.indexOf("mac") != -1);
+HTMLArea.is_mac_ie = (HTMLArea.is_ie && HTMLArea.is_mac);
+HTMLArea.is_win_ie = (HTMLArea.is_ie && !HTMLArea.is_mac);
+HTMLArea.is_gecko = (navigator.product == "Gecko");
+
+// Creates a new HTMLArea object. Tries to replace the textarea with the given
+// ID with it.
+function HTMLArea(textarea, config) {
+ if (!HTMLArea._init_called) {
+ alert("Error: You must called HTMLArea.init() first. Like this:\n\n" +
+ "HTMLArea.init();\n" +
+ "HTMLArea.onload = function() {\n" +
+ " var editor = new HTMLArea('editor');\n" +
+ " editor.generate();\n" +
+ "};\n");
+ return;
+ }
+
+ if (HTMLArea.checkSupportedBrowser()) {
+ if (typeof config == "undefined") {
+ this.config = new HTMLArea.Config();
+ } else {
+ this.config = config;
+ }
+ this._htmlArea = null;
+ this._textArea = textarea;
+ this._editMode = "wysiwyg";
+ this.plugins = {};
+ this._timerToolbar = null;
+ this._timerUndo = null;
+ this._undoQueue = new Array(this.config.undoSteps);
+ this._undoPos = -1;
+ this._customUndo = false;
+ this._mdoc = document; // cache the document, we need it in plugins
+ this.doctype = '';
+ }
+};
+
+HTMLArea.onload = function(){};
+HTMLArea._scripts = [];
+HTMLArea.loadScript = function(url, plugin) {
+ if (plugin)
+ url = HTMLArea.getPluginDir(plugin) + '/' + url;
+ this._scripts.push(url);
+};
+
+HTMLArea.init = function() {
+ var head = document.getElementsByTagName("head")[0];
+ var current = 0;
+ var savetitle = document.title;
+ var evt = HTMLArea.is_ie ? "onreadystatechange" : "onload";
+ function loadNextScript() {
+ if (current > 0 && HTMLArea.is_ie &&
+ !/loaded|complete/.test(window.event.srcElement.readyState))
+ return;
+ if (current < HTMLArea._scripts.length) {
+ var url = HTMLArea._scripts[current++];
+ document.title = "[HTMLArea: loading script " + current + "/" + HTMLArea._scripts.length + "]";
+ var script = document.createElement("script");
+ script.type = "text/javascript";
+ script.src = url;
+ script[evt] = loadNextScript;
+ head.appendChild(script);
+ } else {
+ document.title = savetitle;
+ HTMLArea._init_called = 1;
+ HTMLArea.onload();
+ }
+ };
+ loadNextScript();
+
+};
+
+HTMLArea.loadScript(_editor_url + "dialog.js");
+HTMLArea.loadScript(_editor_url + "popupwin.js");
+HTMLArea.loadScript(_editor_url + "lang/" + _editor_lang + ".js");
+
+// cache some regexps
+HTMLArea.RE_tagName = /(<\/|<)\s*([^ \t\n>]+)/ig;
+HTMLArea.RE_doctype = /(<!doctype((.|\n)*?)>)\n?/i;
+HTMLArea.RE_head = /<head>((.|\n)*?)<\/head>/i;
+HTMLArea.RE_body = /<body>((.|\n)*?)<\/body>/i;
+
+HTMLArea.Config = function () {
+ this.version = "3.0";
+
+ this.width = "auto";
+ this.height = "auto";
+
+ // enable creation of a status bar?
+ this.statusBar = true;
+
+ // intercept ^V and use the HTMLArea paste command
+ // If false, then passes ^V through to browser editor widget
+ this.htmlareaPaste = false;
+
+ // maximum size of the undo queue
+ this.undoSteps = 20;
+
+ // the time interval at which undo samples are taken
+ this.undoTimeout = 500; // 1/2 sec.
+
+ // the next parameter specifies whether the toolbar should be included
+ // in the size or not.
+ this.sizeIncludesToolbar = true;
+
+ // if true then HTMLArea will retrieve the full HTML, starting with the
+ // <HTML> tag.
+ this.fullPage = false;
+
+ // style included in the iframe document
+ this.pageStyle = "";
+
+ // set to true if you want Word code to be cleaned upon Paste
+ this.killWordOnPaste = true;
+
+ // enable the 'Target' field in the Make Link dialog
+ this.makeLinkShowsTarget = true;
+
+ // BaseURL included in the iframe document
+ this.baseURL = document.baseURI || document.URL;
+ if (this.baseURL && this.baseURL.match(/(.*)\/([^\/]+)/))
+ this.baseURL = RegExp.$1 + "/";
+
+ // URL-s
+ this.imgURL = "images/";
+ this.popupURL = "popups/";
+
+ // remove tags (these have to be a regexp, or null if this functionality is not desired)
+ this.htmlRemoveTags = null;
+
+ /** CUSTOMIZING THE TOOLBAR
+ * -------------------------
+ *
+ * It is recommended that you customize the toolbar contents in an
+ * external file (i.e. the one calling HTMLArea) and leave this one
+ * unchanged. That's because when we (InteractiveTools.com) release a
+ * new official version, it's less likely that you will have problems
+ * upgrading HTMLArea.
+ */
+ this.toolbar = [
+ [ "fontname", "space",
+ "fontsize", "space",
+ "formatblock", "space",
+ "bold", "italic", "underline", "strikethrough", "separator",
+ "subscript", "superscript", "separator",
+ "copy", "cut", "paste", "space", "undo", "redo", "space", "removeformat", "killword" ],
+
+ [ "justifyleft", "justifycenter", "justifyright", "justifyfull", "separator",
+ "lefttoright", "righttoleft", "separator",
+ "orderedlist", "unorderedlist", "outdent", "indent", "separator",
+ "forecolor", "hilitecolor", "separator",
+ "inserthorizontalrule", "createlink", "insertimage", "inserttable", "htmlmode", "separator",
+ "popupeditor", "separator", "showhelp", "about" ]
+ ];
+
+ this.fontname = {
+ "— font —": '',
+ "Arial": 'arial,helvetica,sans-serif',
+ "Courier New": 'courier new,courier,monospace',
+ "Georgia": 'georgia,times new roman,times,serif',
+ "Tahoma": 'tahoma,arial,helvetica,sans-serif',
+ "Times New Roman": 'times new roman,times,serif',
+ "Verdana": 'verdana,arial,helvetica,sans-serif',
+ "impact": 'impact',
+ "WingDings": 'wingdings'
+ };
+
+ this.fontsize = {
+ "— size —" : "",
+ "1 (8 pt)" : "1",
+ "2 (10 pt)": "2",
+ "3 (12 pt)": "3",
+ "4 (14 pt)": "4",
+ "5 (18 pt)": "5",
+ "6 (24 pt)": "6",
+ "7 (36 pt)": "7"
+ };
+
+ this.formatblock = {
+ "— format —" : "",
+ "Heading 1": "h1",
+ "Heading 2": "h2",
+ "Heading 3": "h3",
+ "Heading 4": "h4",
+ "Heading 5": "h5",
+ "Heading 6": "h6",
+ "Normal" : "p",
+ "Address" : "address",
+ "Formatted": "pre"
+ };
+
+ this.customSelects = {};
+
+ function cut_copy_paste(e, cmd, obj) {
+ e.execCommand(cmd);
+ };
+
+ this.debug = true;
+
+ // ADDING CUSTOM BUTTONS: please read below!
+ // format of the btnList elements is "ID: [ ToolTip, Icon, Enabled in text mode?, ACTION ]"
+ // - ID: unique ID for the button. If the button calls document.execCommand
+ // it's wise to give it the same name as the called command.
+ // - ACTION: function that gets called when the button is clicked.
+ // it has the following prototype:
+ // function(editor, buttonName)
+ // - editor is the HTMLArea object that triggered the call
+ // - buttonName is the ID of the clicked button
+ // These 2 parameters makes it possible for you to use the same
+ // handler for more HTMLArea objects or for more different buttons.
+ // - ToolTip: default tooltip, for cases when it is not defined in the -lang- file (HTMLArea.I18N)
+ // - Icon: path to an icon image file for the button (TODO: use one image for all buttons!)
+ // - Enabled in text mode: if false the button gets disabled for text-only mode; otherwise enabled all the time.
+ this.btnList = {
+ bold: [ "Bold", "ed_format_bold.gif", false, function(e) {e.execCommand("bold");} ],
+ italic: [ "Italic", "ed_format_italic.gif", false, function(e) {e.execCommand("italic");} ],
+ underline: [ "Underline", "ed_format_underline.gif", false, function(e) {e.execCommand("underline");} ],
+ strikethrough: [ "Strikethrough", "ed_format_strike.gif", false, function(e) {e.execCommand("strikethrough");} ],
+ subscript: [ "Subscript", "ed_format_sub.gif", false, function(e) {e.execCommand("subscript");} ],
+ superscript: [ "Superscript", "ed_format_sup.gif", false, function(e) {e.execCommand("superscript");} ],
+ justifyleft: [ "Justify Left", "ed_align_left.gif", false, function(e) {e.execCommand("justifyleft");} ],
+ justifycenter: [ "Justify Center", "ed_align_center.gif", false, function(e) {e.execCommand("justifycenter");} ],
+ justifyright: [ "Justify Right", "ed_align_right.gif", false, function(e) {e.execCommand("justifyright");} ],
+ justifyfull: [ "Justify Full", "ed_align_justify.gif", false, function(e) {e.execCommand("justifyfull");} ],
+ orderedlist: [ "Ordered List", "ed_list_num.gif", false, function(e) {e.execCommand("insertorderedlist");} ],
+ unorderedlist: [ "Bulleted List", "ed_list_bullet.gif", false, function(e) {e.execCommand("insertunorderedlist");} ],
+ outdent: [ "Decrease Indent", "ed_indent_less.gif", false, function(e) {e.execCommand("outdent");} ],
+ indent: [ "Increase Indent", "ed_indent_more.gif", false, function(e) {e.execCommand("indent");} ],
+ forecolor: [ "Font Color", "ed_color_fg.gif", false, function(e) {e.execCommand("forecolor");} ],
+ hilitecolor: [ "Background Color", "ed_color_bg.gif", false, function(e) {e.execCommand("hilitecolor");} ],
+ inserthorizontalrule: [ "Horizontal Rule", "ed_hr.gif", false, function(e) {e.execCommand("inserthorizontalrule");} ],
+ createlink: [ "Insert Web Link", "ed_link.gif", false, function(e) {e.execCommand("createlink", true);} ],
+ insertimage: [ "Insert/Modify Image", "ed_image.gif", false, function(e) {e.execCommand("insertimage");} ],
+ inserttable: [ "Insert Table", "insert_table.gif", false, function(e) {e.execCommand("inserttable");} ],
+ htmlmode: [ "Toggle HTML Source", "ed_html.gif", true, function(e) {e.execCommand("htmlmode");} ],
+ popupeditor: [ "Enlarge Editor", "fullscreen_maximize.gif", true, function(e) {e.execCommand("popupeditor");} ],
+ about: [ "About this editor", "ed_about.gif", true, function(e) {e.execCommand("about");} ],
+ showhelp: [ "Help using editor", "ed_help.gif", true, function(e) {e.execCommand("showhelp");} ],
+ undo: [ "Undoes your last action", "ed_undo.gif", false, function(e) {e.execCommand("undo");} ],
+ redo: [ "Redoes your last action", "ed_redo.gif", false, function(e) {e.execCommand("redo");} ],
+ cut: [ "Cut selection", "ed_cut.gif", false, cut_copy_paste ],
+ copy: [ "Copy selection", "ed_copy.gif", false, cut_copy_paste ],
+ paste: [ "Paste from clipboard", "ed_paste.gif", false, cut_copy_paste ],
+ lefttoright: [ "Direction left to right", "ed_left_to_right.gif", false, function(e) {e.execCommand("lefttoright");} ],
+ righttoleft: [ "Direction right to left", "ed_right_to_left.gif", false, function(e) {e.execCommand("righttoleft");} ],
+ removeformat: [ "Remove formatting", "ed_rmformat.gif", false, function(e) {e.execCommand("removeformat");} ],
+ print: [ "Print document", "ed_print.gif", false, function(e) {e._iframe.contentWindow.print();} ],
+ killword: [ "Clear MSOffice tags", "ed_killword.gif", false, function(e) {e.execCommand("killword");} ]
+ };
+ /* ADDING CUSTOM BUTTONS
+ * ---------------------
+ *
+ * It is recommended that you add the custom buttons in an external
+ * file and leave this one unchanged. That's because when we
+ * (InteractiveTools.com) release a new official version, it's less
+ * likely that you will have problems upgrading HTMLArea.
+ *
+ * Example on how to add a custom button when you construct the HTMLArea:
+ *
+ * var editor = new HTMLArea("your_text_area_id");
+ * var cfg = editor.config; // this is the default configuration
+ * cfg.btnList["my-hilite"] =
+ * [ function(editor) { editor.surroundHTML('<span style="background:yellow">', '</span>'); }, // action
+ * "Highlight selection", // tooltip
+ * "my_hilite.gif", // image
+ * false // disabled in text mode
+ * ];
+ * cfg.toolbar.push(["linebreak", "my-hilite"]); // add the new button to the toolbar
+ *
+ * An alternate (also more convenient and recommended) way to
+ * accomplish this is to use the registerButton function below.
+ */
+ // initialize tooltips from the I18N module and generate correct image path
+ for (var i in this.btnList) {
+ var btn = this.btnList[i];
+ btn[1] = _editor_url + this.imgURL + btn[1];
+ if (typeof HTMLArea.I18N.tooltips[i] != "undefined") {
+ btn[0] = HTMLArea.I18N.tooltips[i];
+ }
+ }
+};
+
+/** Helper function: register a new button with the configuration. It can be
+ * called with all 5 arguments, or with only one (first one). When called with
+ * only one argument it must be an object with the following properties: id,
+ * tooltip, image, textMode, action. Examples:
+ *
+ * 1. config.registerButton("my-hilite", "Hilite text", "my-hilite.gif", false, function(editor) {...});
+ * 2. config.registerButton({
+ * id : "my-hilite", // the ID of your button
+ * tooltip : "Hilite text", // the tooltip
+ * image : "my-hilite.gif", // image to be displayed in the toolbar
+ * textMode : false, // disabled in text mode
+ * action : function(editor) { // called when the button is clicked
+ * editor.surroundHTML('<span class="hilite">', '</span>');
+ * },
+ * context : "p" // will be disabled if outside a <p> element
+ * });
+ */
+HTMLArea.Config.prototype.registerButton = function(id, tooltip, image, textMode, action, context) {
+ var the_id;
+ if (typeof id == "string") {
+ the_id = id;
+ } else if (typeof id == "object") {
+ the_id = id.id;
+ } else {
+ alert("ERROR [HTMLArea.Config::registerButton]:\ninvalid arguments");
+ return false;
+ }
+ // check for existing id
+ if (typeof this.customSelects[the_id] != "undefined") {
+ // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA dropdown with the same ID already exists.");
+ }
+ if (typeof this.btnList[the_id] != "undefined") {
+ // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA button with the same ID already exists.");
+ }
+ switch (typeof id) {
+ case "string": this.btnList[id] = [ tooltip, image, textMode, action, context ]; break;
+ case "object": this.btnList[id.id] = [ id.tooltip, id.image, id.textMode, id.action, id.context ]; break;
+ }
+};
+
+/** The following helper function registers a dropdown box with the editor
+ * configuration. You still have to add it to the toolbar, same as with the
+ * buttons. Call it like this:
+ *
+ * FIXME: add example
+ */
+HTMLArea.Config.prototype.registerDropdown = function(object) {
+ // check for existing id
+ if (typeof this.customSelects[object.id] != "undefined") {
+ // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA dropdown with the same ID already exists.");
+ }
+ if (typeof this.btnList[object.id] != "undefined") {
+ // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA button with the same ID already exists.");
+ }
+ this.customSelects[object.id] = object;
+};
+
+/** Call this function to remove some buttons/drop-down boxes from the toolbar.
+ * Pass as the only parameter a string containing button/drop-down names
+ * delimited by spaces. Note that the string should also begin with a space
+ * and end with a space. Example:
+ *
+ * config.hideSomeButtons(" fontname fontsize textindicator ");
+ *
+ * It's useful because it's easier to remove stuff from the defaul toolbar than
+ * create a brand new toolbar ;-)
+ */
+HTMLArea.Config.prototype.hideSomeButtons = function(remove) {
+ var toolbar = this.toolbar;
+ for (var i = toolbar.length; --i >= 0;) {
+ var line = toolbar[i];
+ for (var j = line.length; --j >= 0; ) {
+ if (remove.indexOf(" " + line[j] + " ") >= 0) {
+ var len = 1;
+ if (/separator|space/.test(line[j + 1])) {
+ len = 2;
+ }
+ line.splice(j, len);
+ }
+ }
+ }
+};
+
+/** Helper function: replace all TEXTAREA-s in the document with HTMLArea-s. */
+HTMLArea.replaceAll = function(config) {
+ var tas = document.getElementsByTagName("textarea");
+ for (var i = tas.length; i > 0; (new HTMLArea(tas[--i], config)).generate());
+};
+
+/** Helper function: replaces the TEXTAREA with the given ID with HTMLArea. */
+HTMLArea.replace = function(id, config) {
+ var ta = HTMLArea.getElementById("textarea", id);
+ return ta ? (new HTMLArea(ta, config)).generate() : null;
+};
+
+// Creates the toolbar and appends it to the _htmlarea
+HTMLArea.prototype._createToolbar = function () {
+ var editor = this; // to access this in nested functions
+
+ var toolbar = document.createElement("div");
+ this._toolbar = toolbar;
+ toolbar.className = "toolbar";
+ toolbar.unselectable = "1";
+ var tb_row = null;
+ var tb_objects = new Object();
+ this._toolbarObjects = tb_objects;
+
+ // creates a new line in the toolbar
+ function newLine() {
+ var table = document.createElement("table");
+ table.border = "0px";
+ table.cellSpacing = "0px";
+ table.cellPadding = "0px";
+ toolbar.appendChild(table);
+ // TBODY is required for IE, otherwise you don't see anything
+ // in the TABLE.
+ var tb_body = document.createElement("tbody");
+ table.appendChild(tb_body);
+ tb_row = document.createElement("tr");
+ tb_body.appendChild(tb_row);
+ }; // END of function: newLine
+ // init first line
+ newLine();
+
+ // updates the state of a toolbar element. This function is member of
+ // a toolbar element object (unnamed objects created by createButton or
+ // createSelect functions below).
+ function setButtonStatus(id, newval) {
+ var oldval = this[id];
+ var el = this.element;
+ if (oldval != newval) {
+ switch (id) {
+ case "enabled":
+ if (newval) {
+ HTMLArea._removeClass(el, "buttonDisabled");
+ el.disabled = false;
+ } else {
+ HTMLArea._addClass(el, "buttonDisabled");
+ el.disabled = true;
+ }
+ break;
+ case "active":
+ if (newval) {
+ HTMLArea._addClass(el, "buttonPressed");
+ } else {
+ HTMLArea._removeClass(el, "buttonPressed");
+ }
+ break;
+ }
+ this[id] = newval;
+ }
+ }; // END of function: setButtonStatus
+
+ // this function will handle creation of combo boxes. Receives as
+ // parameter the name of a button as defined in the toolBar config.
+ // This function is called from createButton, above, if the given "txt"
+ // doesn't match a button.
+ function createSelect(txt) {
+ var options = null;
+ var el = null;
+ var cmd = null;
+ var customSelects = editor.config.customSelects;
+ var context = null;
+ var tooltip = "";
+ switch (txt) {
+ case "fontsize":
+ case "fontname":
+ case "formatblock":
+ // the following line retrieves the correct
+ // configuration option because the variable name
+ // inside the Config object is named the same as the
+ // button/select in the toolbar. For instance, if txt
+ // == "formatblock" we retrieve config.formatblock (or
+ // a different way to write it in JS is
+ // config["formatblock"].
+ options = editor.config[txt];
+ cmd = txt;
+ break;
+ default:
+ // try to fetch it from the list of registered selects
+ cmd = txt;
+ var dropdown = customSelects[cmd];
+ if (typeof dropdown != "undefined") {
+ options = dropdown.options;
+ context = dropdown.context;
+ if (typeof dropdown.tooltip != "undefined") {
+ tooltip = dropdown.tooltip;
+ }
+ } else {
+ alert("ERROR [createSelect]:\nCan't find the requested dropdown definition");
+ }
+ break;
+ }
+ if (options) {
+ el = document.createElement("select");
+ el.title = tooltip;
+ var obj = {
+ name : txt, // field name
+ element : el, // the UI element (SELECT)
+ enabled : true, // is it enabled?
+ text : false, // enabled in text mode?
+ cmd : cmd, // command ID
+ state : setButtonStatus, // for changing state
+ context : context
+ };
+ tb_objects[txt] = obj;
+ for (var i in options) {
+ var op = document.createElement("option");
+ op.innerHTML = i;
+ op.value = options[i];
+ el.appendChild(op);
+ }
+ HTMLArea._addEvent(el, "change", function () {
+ editor._comboSelected(el, txt);
+ });
+ }
+ return el;
+ }; // END of function: createSelect
+
+ // appends a new button to toolbar
+ function createButton(txt) {
+ // the element that will be created
+ var el = null;
+ var btn = null;
+ switch (txt) {
+ case "separator":
+ el = document.createElement("div");
+ el.className = "separator";
+ break;
+ case "space":
+ el = document.createElement("div");
+ el.className = "space";
+ break;
+ case "linebreak":
+ newLine();
+ return false;
+ case "textindicator":
+ el = document.createElement("div");
+ el.appendChild(document.createTextNode("A"));
+ el.className = "indicator";
+ el.title = HTMLArea.I18N.tooltips.textindicator;
+ var obj = {
+ name : txt, // the button name (i.e. 'bold')
+ element : el, // the UI element (DIV)
+ enabled : true, // is it enabled?
+ active : false, // is it pressed?
+ text : false, // enabled in text mode?
+ cmd : "textindicator", // the command ID
+ state : setButtonStatus // for changing state
+ };
+ tb_objects[txt] = obj;
+ break;
+ default:
+ btn = editor.config.btnList[txt];
+ }
+ if (!el && btn) {
+ el = document.createElement("div");
+ el.title = btn[0];
+ el.className = "button";
+ // let's just pretend we have a button object, and
+ // assign all the needed information to it.
+ var obj = {
+ name : txt, // the button name (i.e. 'bold')
+ element : el, // the UI element (DIV)
+ enabled : true, // is it enabled?
+ active : false, // is it pressed?
+ text : btn[2], // enabled in text mode?
+ cmd : btn[3], // the command ID
+ state : setButtonStatus, // for changing state
+ context : btn[4] || null // enabled in a certain context?
+ };
+ tb_objects[txt] = obj;
+ // handlers to emulate nice flat toolbar buttons
+ HTMLArea._addEvent(el, "mouseover", function () {
+ if (obj.enabled) {
+ HTMLArea._addClass(el, "buttonHover");
+ }
+ });
+ HTMLArea._addEvent(el, "mouseout", function () {
+ if (obj.enabled) with (HTMLArea) {
+ _removeClass(el, "buttonHover");
+ _removeClass(el, "buttonActive");
+ (obj.active) && _addClass(el, "buttonPressed");
+ }
+ });
+ HTMLArea._addEvent(el, "mousedown", function (ev) {
+ if (obj.enabled) with (HTMLArea) {
+ _addClass(el, "buttonActive");
+ _removeClass(el, "buttonPressed");
+ _stopEvent(is_ie ? window.event : ev);
+ }
+ });
+ // when clicked, do the following:
+ HTMLArea._addEvent(el, "click", function (ev) {
+ if (obj.enabled) with (HTMLArea) {
+ _removeClass(el, "buttonActive");
+ _removeClass(el, "buttonHover");
+ obj.cmd(editor, obj.name, obj);
+ _stopEvent(is_ie ? window.event : ev);
+ }
+ });
+ var img = document.createElement("img");
+ img.src = btn[1];
+ img.style.width = "18px";
+ img.style.height = "18px";
+ el.appendChild(img);
+ } else if (!el) {
+ el = createSelect(txt);
+ }
+ if (el) {
+ var tb_cell = document.createElement("td");
+ tb_row.appendChild(tb_cell);
+ tb_cell.appendChild(el);
+ } else {
+ alert("FIXME: Unknown toolbar item: " + txt);
+ }
+ return el;
+ };
+
+ var first = true;
+ for (var i = 0; i < this.config.toolbar.length; ++i) {
+ if (!first) {
+ createButton("linebreak");
+ } else {
+ first = false;
+ }
+ var group = this.config.toolbar[i];
+ for (var j = 0; j < group.length; ++j) {
+ var code = group[j];
+ if (/^([IT])\[(.*?)\]/.test(code)) {
+ // special case, create text label
+ var l7ed = RegExp.$1 == "I"; // localized?
+ var label = RegExp.$2;
+ if (l7ed) {
+ label = HTMLArea.I18N.custom[label];
+ }
+ var tb_cell = document.createElement("td");
+ tb_row.appendChild(tb_cell);
+ tb_cell.className = "label";
+ tb_cell.innerHTML = label;
+ } else {
+ createButton(code);
+ }
+ }
+ }
+
+ this._htmlArea.appendChild(toolbar);
+};
+
+HTMLArea.prototype._createStatusBar = function() {
+ var statusbar = document.createElement("div");
+ statusbar.className = "statusBar";
+ this._htmlArea.appendChild(statusbar);
+ this._statusBar = statusbar;
+ // statusbar.appendChild(document.createTextNode(HTMLArea.I18N.msg["Path"] + ": "));
+ // creates a holder for the path view
+ div = document.createElement("span");
+ div.className = "statusBarTree";
+ div.innerHTML = HTMLArea.I18N.msg["Path"] + ": ";
+ this._statusBarTree = div;
+ this._statusBar.appendChild(div);
+ if (!this.config.statusBar) {
+ // disable it...
+ statusbar.style.display = "none";
+ }
+};
+
+// Creates the HTMLArea object and replaces the textarea with it.
+HTMLArea.prototype.generate = function () {
+ var editor = this; // we'll need "this" in some nested functions
+ // get the textarea
+ var textarea = this._textArea;
+ if (typeof textarea == "string") {
+ // it's not element but ID
+ this._textArea = textarea = HTMLArea.getElementById("textarea", textarea);
+ }
+ this._ta_size = {
+ w: textarea.offsetWidth,
+ h: textarea.offsetHeight
+ };
+ textarea.style.display = "none";
+
+ // create the editor framework
+ var htmlarea = document.createElement("div");
+ htmlarea.className = "htmlarea";
+ this._htmlArea = htmlarea;
+
+ // insert the editor before the textarea.
+ textarea.parentNode.insertBefore(htmlarea, textarea);
+
+ if (textarea.form) {
+ // we have a form, on submit get the HTMLArea content and
+ // update original textarea.
+ var f = textarea.form;
+ if (typeof f.onsubmit == "function") {
+ var funcref = f.onsubmit;
+ if (typeof f.__msh_prevOnSubmit == "undefined") {
+ f.__msh_prevOnSubmit = [];
+ }
+ f.__msh_prevOnSubmit.push(funcref);
+ }
+ f.onsubmit = function() {
+ editor._textArea.value = editor.getHTML();
+ var a = this.__msh_prevOnSubmit;
+ // call previous submit methods if they were there.
+ if (typeof a != "undefined") {
+ for (var i = a.length; --i >= 0;) {
+ a[i]();
+ }
+ }
+ };
+ if (typeof f.onreset == "function") {
+ var funcref = f.onreset;
+ if (typeof f.__msh_prevOnReset == "undefined") {
+ f.__msh_prevOnReset = [];
+ }
+ f.__msh_prevOnReset.push(funcref);
+ }
+ f.onreset = function() {
+ editor.setHTML(editor._textArea.value);
+ editor.updateToolbar();
+ var a = this.__msh_prevOnReset;
+ // call previous reset methods if they were there.
+ if (typeof a != "undefined") {
+ for (var i = a.length; --i >= 0;) {
+ a[i]();
+ }
+ }
+ };
+ }
+
+ // add a handler for the "back/forward" case -- on body.unload we save
+ // the HTML content into the original textarea.
+ try {
+ window.onunload = function() {
+ editor._textArea.value = editor.getHTML();
+ };
+ } catch(e) {};
+
+ // creates & appends the toolbar
+ this._createToolbar();
+
+ // create the IFRAME
+ var iframe = document.createElement("iframe");
+
+ // workaround for the HTTPS problem
+ // iframe.setAttribute("src", "javascript:void(0);");
+ iframe.src = _editor_url + "popups/blank.html";
+
+ htmlarea.appendChild(iframe);
+
+ this._iframe = iframe;
+
+ // creates & appends the status bar, if the case
+ this._createStatusBar();
+
+ // remove the default border as it keeps us from computing correctly
+ // the sizes. (somebody tell me why doesn't this work in IE)
+
+ if (!HTMLArea.is_ie) {
+ iframe.style.borderWidth = "1px";
+ // iframe.frameBorder = "1";
+ // iframe.marginHeight = "0";
+ // iframe.marginWidth = "0";
+ }
+
+ // size the IFRAME according to user's prefs or initial textarea
+ var height = (this.config.height == "auto" ? (this._ta_size.h + "px") : this.config.height);
+ height = parseInt(height);
+ var width = (this.config.width == "auto" ? (this._ta_size.w + "px") : this.config.width);
+ width = parseInt(width);
+
+ if (!HTMLArea.is_ie) {
+ height -= 2;
+ width -= 2;
+ }
+
+ iframe.style.width = width + "px";
+ if (this.config.sizeIncludesToolbar) {
+ // substract toolbar height
+ height -= this._toolbar.offsetHeight;
+ height -= this._statusBar.offsetHeight;
+ }
+ if (height < 0) {
+ height = 0;
+ }
+ iframe.style.height = height + "px";
+
+ // the editor including the toolbar now have the same size as the
+ // original textarea.. which means that we need to reduce that a bit.
+ textarea.style.width = iframe.style.width;
+ textarea.style.height = iframe.style.height;
+
+ // IMPORTANT: we have to allow Mozilla a short time to recognize the
+ // new frame. Otherwise we get a stupid exception.
+ function initIframe() {
+ var doc = editor._iframe.contentWindow.document;
+ if (!doc) {
+ // Try again..
+ // FIXME: don't know what else to do here. Normally
+ // we'll never reach this point.
+ if (HTMLArea.is_gecko) {
+ setTimeout(initIframe, 100);
+ return false;
+ } else {
+ alert("ERROR: IFRAME can't be initialized.");
+ }
+ }
+ if (HTMLArea.is_gecko) {
+ // enable editable mode for Mozilla
+ doc.designMode = "on";
+ }
+ editor._doc = doc;
+ if (!editor.config.fullPage) {
+ doc.open();
+ var html = "<html>\n";
+ html += "<head>\n";
+ if (editor.config.baseURL)
+ html += '<base href="' + editor.config.baseURL + '" />';
+ html += "<style>" + editor.config.pageStyle +
+ " html,body { border: 0px; }</style>\n";
+ html += "</head>\n";
+ html += "<body>\n";
+ html += editor._textArea.value;
+ html += "</body>\n";
+ html += "</html>";
+ doc.write(html);
+ doc.close();
+ } else {
+ var html = editor._textArea.value;
+ if (html.match(HTMLArea.RE_doctype)) {
+ editor.setDoctype(RegExp.$1);
+ html = html.replace(HTMLArea.RE_doctype, "");
+ }
+ doc.open();
+ doc.write(html);
+ doc.close();
+ }
+
+ if (HTMLArea.is_ie) {
+ // enable editable mode for IE. For some reason this
+ // doesn't work if done in the same place as for Gecko
+ // (above).
+ doc.body.contentEditable = true;
+ }
+
+ editor.focusEditor();
+ // intercept some events; for updating the toolbar & keyboard handlers
+ HTMLArea._addEvents
+ (doc, ["keydown", "keypress", "mousedown", "mouseup", "drag"],
+ function (event) {
+ return editor._editorEvent(HTMLArea.is_ie ? editor._iframe.contentWindow.event : event);
+ });
+
+ // check if any plugins have registered refresh handlers
+ for (var i in editor.plugins) {
+ var plugin = editor.plugins[i].instance;
+ if (typeof plugin.onGenerate == "function")
+ plugin.onGenerate();
+ if (typeof plugin.onGenerateOnce == "function") {
+ plugin.onGenerateOnce();
+ plugin.onGenerateOnce = null;
+ }
+ }
+
+ setTimeout(function() {
+ editor.updateToolbar();
+ }, 250);
+
+ if (typeof editor.onGenerate == "function")
+ editor.onGenerate();
+ };
+ setTimeout(initIframe, 100);
+ return this;
+};
+
+// Switches editor mode; parameter can be "textmode" or "wysiwyg". If no
+// parameter was passed this function toggles between modes.
+HTMLArea.prototype.setMode = function(mode) {
+ if (typeof mode == "undefined") {
+ mode = ((this._editMode == "textmode") ? "wysiwyg" : "textmode");
+ }
+ switch (mode) {
+ case "textmode":
+
+ // -------------------------------------------------------------
+ // PLOG HTMLAREA TWEAK
+ // Changed by: Mark Wu
+ // Date: 2005/02/05
+ // Purpose: Change for preserve the HTML source code format
+ // -------------------------------------------------------------
+ this._textArea.value = insertCRLF(this.getHTML());
+ // this._textArea.value = this.getHTML();
+ // -------------------------------------------------------------
+
+ this._iframe.style.display = "none";
+ this._textArea.style.display = "block";
+ if (this.config.statusBar) {
+ this._statusBar.innerHTML = HTMLArea.I18N.msg["TEXT_MODE"];
+ }
+ break;
+ case "wysiwyg":
+ if (HTMLArea.is_gecko) {
+ // disable design mode before changing innerHTML
+ try {
+ this._doc.designMode = "off";
+ } catch(e) {};
+ }
+ if (!this.config.fullPage)
+ this._doc.body.innerHTML = this.getHTML();
+ else
+ this.setFullHTML(this.getHTML());
+ this._iframe.style.display = "block";
+ this._textArea.style.display = "none";
+ if (HTMLArea.is_gecko) {
+ // we need to refresh that info for Moz-1.3a
+ try {
+ this._doc.designMode = "on";
+ } catch(e) {};
+ }
+ if (this.config.statusBar) {
+ this._statusBar.innerHTML = '';
+ // this._statusBar.appendChild(document.createTextNode(HTMLArea.I18N.msg["Path"] + ": "));
+ this._statusBar.appendChild(this._statusBarTree);
+ }
+ break;
+ default:
+ alert("Mode <" + mode + "> not defined!");
+ return false;
+ }
+ this._editMode = mode;
+ this.focusEditor();
+
+ for (var i in this.plugins) {
+ var plugin = this.plugins[i].instance;
+ if (typeof plugin.onMode == "function") plugin.onMode(mode);
+ }
+};
+
+HTMLArea.prototype.setFullHTML = function(html) {
+ var save_multiline = RegExp.multiline;
+ RegExp.multiline = true;
+ if (html.match(HTMLArea.RE_doctype)) {
+ this.setDoctype(RegExp.$1);
+ html = html.replace(HTMLArea.RE_doctype, "");
+ }
+ RegExp.multiline = save_multiline;
+ if (!HTMLArea.is_ie) {
+ if (html.match(HTMLArea.RE_head))
+ this._doc.getElementsByTagName("head")[0].innerHTML = RegExp.$1;
+ if (html.match(HTMLArea.RE_body))
+ this._doc.getElementsByTagName("body")[0].innerHTML = RegExp.$1;
+ } else {
+ var html_re = /<html>((.|\n)*?)<\/html>/i;
+ html = html.replace(html_re, "$1");
+ this._doc.open();
+ this._doc.write(html);
+ this._doc.close();
+ this._doc.body.contentEditable = true;
+ return true;
+ }
+};
+
+/***************************************************
+ * Category: PLUGINS
+ ***************************************************/
+
+// Create the specified plugin and register it with this HTMLArea
+HTMLArea.prototype.registerPlugin = function() {
+ var plugin = arguments[0];
+ var args = [];
+ for (var i = 1; i < arguments.length; ++i)
+ args.push(arguments[i]);
+ this.registerPlugin2(plugin, args);
+};
+
+// this is the variant of the function above where the plugin arguments are
+// already packed in an array. Externally, it should be only used in the
+// full-screen editor code, in order to initialize plugins with the same
+// parameters as in the opener window.
+HTMLArea.prototype.registerPlugin2 = function(plugin, args) {
+ if (typeof plugin == "string")
+ plugin = eval(plugin);
+ if (typeof plugin == "undefined") {
+ /* FIXME: This should never happen. But why does it do? */
+ return false;
+ }
+ var obj = new plugin(this, args);
+ if (obj) {
+ var clone = {};
+ var info = plugin._pluginInfo;
+ for (var i in info)
+ clone[i] = info[i];
+ clone.instance = obj;
+ clone.args = args;
+ this.plugins[plugin._pluginInfo.name] = clone;
+ } else
+ alert("Can't register plugin " + plugin.toString() + ".");
+};
+
+// static function that loads the required plugin and lang file, based on the
+// language loaded already for HTMLArea. You better make sure that the plugin
+// _has_ that language, otherwise shit might happen ;-)
+HTMLArea.getPluginDir = function(pluginName) {
+ return _editor_url + "plugins/" + pluginName;
+};
+
+HTMLArea.loadPlugin = function(pluginName) {
+ var dir = this.getPluginDir(pluginName);
+ var plugin = pluginName.replace(/([a-z])([A-Z])([a-z])/g,
+ function (str, l1, l2, l3) {
+ return l1 + "-" + l2.toLowerCase() + l3;
+ }).toLowerCase() + ".js";
+ var plugin_file = dir + "/" + plugin;
+ var plugin_lang = dir + "/lang/" + _editor_lang + ".js";
+ //document.write("<script type='text/javascript' src='" + plugin_file + "'></script>");
+ //document.write("<script type='text/javascript' src='" + plugin_lang + "'></script>");
+ this.loadScript(plugin_file);
+ this.loadScript(plugin_lang);
+};
+
+HTMLArea.loadStyle = function(style, plugin) {
+ var url = _editor_url || '';
+ if (typeof plugin != "undefined") {
+ url += "plugins/" + plugin + "/";
+ }
+ url += style;
+ if (/^\//.test(style))
+ url = style;
+ var head = document.getElementsByTagName("head")[0];
+ var link = document.createElement("link");
+ link.rel = "stylesheet";
+ link.href = url;
+ head.appendChild(link);
+ //document.write("<style type='text/css'>@import url(" + url + ");</style>");
+};
+HTMLArea.loadStyle(typeof _editor_css == "string" ? _editor_css : "htmlarea.css");
+
+/***************************************************
+ * Category: EDITOR UTILITIES
+ ***************************************************/
+
+HTMLArea.prototype.debugTree = function() {
+ var ta = document.createElement("textarea");
+ ta.style.width = "100%";
+ ta.style.height = "20em";
+ ta.value = "";
+ function debug(indent, str) {
+ for (; --indent >= 0;)
+ ta.value += " ";
+ ta.value += str + "\n";
+ };
+ function _dt(root, level) {
+ var tag = root.tagName.toLowerCase(), i;
+ var ns = HTMLArea.is_ie ? root.scopeName : root.prefix;
+ debug(level, "- " + tag + " [" + ns + "]");
+ for (i = root.firstChild; i; i = i.nextSibling)
+ if (i.nodeType == 1)
+ _dt(i, level + 2);
+ };
+ _dt(this._doc.body, 0);
+ document.body.appendChild(ta);
+};
+
+HTMLArea.getInnerText = function(el) {
+ var txt = '', i;
+ for (i = el.firstChild; i; i = i.nextSibling) {
+ if (i.nodeType == 3)
+ txt += i.data;
+ else if (i.nodeType == 1)
+ txt += HTMLArea.getInnerText(i);
+ }
+ return txt;
+};
+
+HTMLArea.prototype._wordClean = function() {
+ var
+ editor = this,
+ stats = {
+ empty_tags : 0,
+ mso_class : 0,
+ mso_style : 0,
+ mso_xmlel : 0,
+ orig_len : this._doc.body.innerHTML.length,
+ T : (new Date()).getTime()
+ },
+ stats_txt = {
+ empty_tags : "Empty tags removed: ",
+ mso_class : "MSO class names removed: ",
+ mso_style : "MSO inline style removed: ",
+ mso_xmlel : "MSO XML elements stripped: "
+ };
+ function showStats() {
+ var txt = "HTMLArea word cleaner stats: \n\n";
+ for (var i in stats)
+ if (stats_txt[i])
+ txt += stats_txt[i] + stats[i] + "\n";
+ txt += "\nInitial document length: " + stats.orig_len + "\n";
+ txt += "Final document length: " + editor._doc.body.innerHTML.length + "\n";
+ txt += "Clean-up took " + (((new Date()).getTime() - stats.T) / 1000) + " seconds";
+ alert(txt);
+ };
+ function clearClass(node) {
+ var newc = node.className.replace(/(^|\s)mso.*?(\s|$)/ig, ' ');
+ if (newc != node.className) {
+ node.className = newc;
+ if (!/\S/.test(node.className)) {
+ node.removeAttribute("className");
+ ++stats.mso_class;
+ }
+ }
+ };
+ function clearStyle(node) {
+ var declarations = node.style.cssText.split(/\s*;\s*/);
+ for (var i = declarations.length; --i >= 0;)
+ if (/^mso|^tab-stops/i.test(declarations[i]) ||
+ /^margin\s*:\s*0..\s+0..\s+0../i.test(declarations[i])) {
+ ++stats.mso_style;
+ declarations.splice(i, 1);
+ }
+ node.style.cssText = declarations.join("; ");
+ };
+ function stripTag(el) {
+ if (HTMLArea.is_ie)
+ el.outerHTML = HTMLArea.htmlEncode(el.innerText);
+ else {
+ var txt = document.createTextNode(HTMLArea.getInnerText(el));
+ el.parentNode.insertBefore(txt, el);
+ el.parentNode.removeChild(el);
+ }
+ ++stats.mso_xmlel;
+ };
+ function checkEmpty(el) {
+ if (/^(a|span|b|strong|i|em|font)$/i.test(el.tagName) &&
+ !el.firstChild) {
+ el.parentNode.removeChild(el);
+ ++stats.empty_tags;
+ }
+ };
+ function parseTree(root) {
+ var tag = root.tagName.toLowerCase(), i, next;
+ if ((HTMLArea.is_ie && root.scopeName != 'HTML') || (!HTMLArea.is_ie && /:/.test(tag))) {
+ stripTag(root);
+ return false;
+ } else {
+ clearClass(root);
+ clearStyle(root);
+ for (i = root.firstChild; i; i = next) {
+ next = i.nextSibling;
+ if (i.nodeType == 1 && parseTree(i))
+ checkEmpty(i);
+ }
+ }
+ return true;
+ };
+ parseTree(this._doc.body);
+ // showStats();
+ // this.debugTree();
+ // this.setHTML(this.getHTML());
+ // this.setHTML(this.getInnerHTML());
+ // this.forceRedraw();
+ this.updateToolbar();
+};
+
+HTMLArea.prototype.forceRedraw = function() {
+ this._doc.body.style.visibility = "hidden";
+ this._doc.body.style.visibility = "visible";
+ // this._doc.body.innerHTML = this.getInnerHTML();
+};
+
+// focuses the iframe window. returns a reference to the editor document.
+HTMLArea.prototype.focusEditor = function() {
+ switch (this._editMode) {
+ // notice the try { ... } catch block to avoid some rare exceptions in FireFox
+ // (perhaps also in other Gecko browsers). Manual focus by user is required in
+ // case of an error. Somebody has an idea?
+ case "wysiwyg" : try { this._iframe.contentWindow.focus() } catch (e) {} break;
+ case "textmode": try { this._textArea.focus() } catch (e) {} break;
+ default : alert("ERROR: mode " + this._editMode + " is not defined");
+ }
+ return this._doc;
+};
+
+// takes a snapshot of the current text (for undo)
+HTMLArea.prototype._undoTakeSnapshot = function() {
+ ++this._undoPos;
+ if (this._undoPos >= this.config.undoSteps) {
+ // remove the first element
+ this._undoQueue.shift();
+ --this._undoPos;
+ }
+ // use the fasted method (getInnerHTML);
+ var take = true;
+ var txt = this.getInnerHTML();
+ if (this._undoPos > 0)
+ take = (this._undoQueue[this._undoPos - 1] != txt);
+ if (take) {
+ this._undoQueue[this._undoPos] = txt;
+ } else {
+ this._undoPos--;
+ }
+};
+
+HTMLArea.prototype.undo = function() {
+ if (this._undoPos > 0) {
+ var txt = this._undoQueue[--this._undoPos];
+ if (txt) this.setHTML(txt);
+ else ++this._undoPos;
+ }
+};
+
+HTMLArea.prototype.redo = function() {
+ if (this._undoPos < this._undoQueue.length - 1) {
+ var txt = this._undoQueue[++this._undoPos];
+ if (txt) this.setHTML(txt);
+ else --this._undoPos;
+ }
+};
+
+// updates enabled/disable/active state of the toolbar elements
+HTMLArea.prototype.updateToolbar = function(noStatus) {
+ var doc = this._doc;
+ var text = (this._editMode == "textmode");
+ var ancestors = null;
+ if (!text) {
+ ancestors = this.getAllAncestors();
+ if (this.config.statusBar && !noStatus) {
+ this._statusBarTree.innerHTML = HTMLArea.I18N.msg["Path"] + ": "; // clear
+ for (var i = ancestors.length; --i >= 0;) {
+ var el = ancestors[i];
+ if (!el) {
+ // hell knows why we get here; this
+ // could be a classic example of why
+ // it's good to check for conditions
+ // that are impossible to happen ;-)
+ continue;
+ }
+ var a = document.createElement("a");
+ a.href = "#";
+ a.el = el;
+ a.editor = this;
+ a.onclick = function() {
+ this.blur();
+ this.editor.selectNodeContents(this.el);
+ this.editor.updateToolbar(true);
+ return false;
+ };
+ a.oncontextmenu = function() {
+ // TODO: add context menu here
+ this.blur();
+ var info = "Inline style:\n\n";
+ info += this.el.style.cssText.split(/;\s*/).join(";\n");
+ alert(info);
+ return false;
+ };
+ var txt = el.tagName.toLowerCase();
+ a.title = el.style.cssText;
+ if (el.id) {
+ txt += "#" + el.id;
+ }
+ if (el.className) {
+ txt += "." + el.className;
+ }
+ a.appendChild(document.createTextNode(txt));
+ this._statusBarTree.appendChild(a);
+ if (i != 0) {
+ this._statusBarTree.appendChild(document.createTextNode(String.fromCharCode(0xbb)));
+ }
+ }
+ }
+ }
+
+ for (var i in this._toolbarObjects) {
+ var btn = this._toolbarObjects[i];
+ var cmd = i;
+ var inContext = true;
+ if (btn.context && !text) {
+ inContext = false;
+ var context = btn.context;
+ var attrs = [];
+ if (/(.*)\[(.*?)\]/.test(context)) {
+ context = RegExp.$1;
+ attrs = RegExp.$2.split(",");
+ }
+ context = context.toLowerCase();
+ var match = (context == "*");
+ for (var k = 0; k < ancestors.length; ++k) {
+ if (!ancestors[k]) {
+ // the impossible really happens.
+ continue;
+ }
+ if (match || (ancestors[k].tagName.toLowerCase() == context)) {
+ inContext = true;
+ for (var ka = 0; ka < attrs.length; ++ka) {
+ if (!eval("ancestors[k]." + attrs[ka])) {
+ inContext = false;
+ break;
+ }
+ }
+ if (inContext) {
+ break;
+ }
+ }
+ }
+ }
+ btn.state("enabled", (!text || btn.text) && inContext);
+ if (typeof cmd == "function") {
+ continue;
+ }
+ // look-it-up in the custom dropdown boxes
+ var dropdown = this.config.customSelects[cmd];
+ if ((!text || btn.text) && (typeof dropdown != "undefined")) {
+ dropdown.refresh(this);
+ continue;
+ }
+ switch (cmd) {
+ case "fontname":
+ case "fontsize":
+ case "formatblock":
+ if (!text) try {
+ var value = ("" + doc.queryCommandValue(cmd)).toLowerCase();
+ if (!value) {
+ btn.element.selectedIndex = 0;
+ break;
+ }
+ // HACK -- retrieve the config option for this
+ // combo box. We rely on the fact that the
+ // variable in config has the same name as
+ // button name in the toolbar.
+ var options = this.config[cmd];
+ var k = 0;
+ for (var j in options) {
+ // FIXME: the following line is scary.
+ if ((j.toLowerCase() == value) ||
+ (options[j].substr(0, value.length).toLowerCase() == value)) {
+ btn.element.selectedIndex = k;
+ throw "ok";
+ }
+ ++k;
+ }
+ btn.element.selectedIndex = 0;
+ } catch(e) {};
+ break;
+ case "textindicator":
+ if (!text) {
+ try {with (btn.element.style) {
+ backgroundColor = HTMLArea._makeColor(
+ doc.queryCommandValue(HTMLArea.is_ie ? "backcolor" : "hilitecolor"));
+ if (/transparent/i.test(backgroundColor)) {
+ // Mozilla
+ backgroundColor = HTMLArea._makeColor(doc.queryCommandValue("backcolor"));
+ }
+ color = HTMLArea._makeColor(doc.queryCommandValue("forecolor"));
+ fontFamily = doc.queryCommandValue("fontname");
+ fontWeight = doc.queryCommandState("bold") ? "bold" : "normal";
+ fontStyle = doc.queryCommandState("italic") ? "italic" : "normal";
+ }} catch (e) {
+ // alert(e + "\n\n" + cmd);
+ }
+ }
+ break;
+ case "htmlmode": btn.state("active", text); break;
+ case "lefttoright":
+ case "righttoleft":
+ var el = this.getParentElement();
+ while (el && !HTMLArea.isBlockElement(el))
+ el = el.parentNode;
+ if (el)
+ btn.state("active", (el.style.direction == ((cmd == "righttoleft") ? "rtl" : "ltr")));
+ break;
+ default:
+ cmd = cmd.replace(/(un)?orderedlist/i, "insert$1orderedlist");
+ try {
+ btn.state("active", (!text && doc.queryCommandState(cmd)));
+ } catch (e) {}
+ }
+ }
+ // take undo snapshots
+ if (this._customUndo && !this._timerUndo) {
+ this._undoTakeSnapshot();
+ var editor = this;
+ this._timerUndo = setTimeout(function() {
+ editor._timerUndo = null;
+ }, this.config.undoTimeout);
+ }
+
+ // check if any plugins have registered refresh handlers
+ for (var i in this.plugins) {
+ var plugin = this.plugins[i].instance;
+ if (typeof plugin.onUpdateToolbar == "function")
+ plugin.onUpdateToolbar();
+ }
+};
+
+/** Returns a node after which we can insert other nodes, in the current
+ * selection. The selection is removed. It splits a text node, if needed.
+ */
+HTMLArea.prototype.insertNodeAtSelection = function(toBeInserted) {
+ if (!HTMLArea.is_ie) {
+ var sel = this._getSelection();
+ var range = this._createRange(sel);
+ // remove the current selection
+ sel.removeAllRanges();
+ range.deleteContents();
+ var node = range.startContainer;
+ var pos = range.startOffset;
+ switch (node.nodeType) {
+ case 3: // Node.TEXT_NODE
+ // we have to split it at the caret position.
+ if (toBeInserted.nodeType == 3) {
+ // do optimized insertion
+ node.insertData(pos, toBeInserted.data);
+ range = this._createRange();
+ range.setEnd(node, pos + toBeInserted.length);
+ range.setStart(node, pos + toBeInserted.length);
+ sel.addRange(range);
+ } else {
+ node = node.splitText(pos);
+ var selnode = toBeInserted;
+ if (toBeInserted.nodeType == 11 /* Node.DOCUMENT_FRAGMENT_NODE */) {
+ selnode = selnode.firstChild;
+ }
+ node.parentNode.insertBefore(toBeInserted, node);
+ this.selectNodeContents(selnode);
+ this.updateToolbar();
+ }
+ break;
+ case 1: // Node.ELEMENT_NODE
+ var selnode = toBeInserted;
+ if (toBeInserted.nodeType == 11 /* Node.DOCUMENT_FRAGMENT_NODE */) {
+ selnode = selnode.firstChild;
+ }
+ node.insertBefore(toBeInserted, node.childNodes[pos]);
+ this.selectNodeContents(selnode);
+ this.updateToolbar();
+ break;
+ }
+ } else {
+ return null; // this function not yet used for IE <FIXME>
+ }
+};
+
+// Returns the deepest node that contains both endpoints of the selection.
+HTMLArea.prototype.getParentElement = function() {
+ var sel = this._getSelection();
+ var range = this._createRange(sel);
+ if (HTMLArea.is_ie) {
+ switch (sel.type) {
+ case "Text":
+ case "None":
+ // It seems that even for selection of type "None",
+ // there _is_ a parent element and it's value is not
+ // only correct, but very important to us. MSIE is
+ // certainly the buggiest browser in the world and I
+ // wonder, God, how can Earth stand it?
+ return range.parentElement();
+ case "Control":
+ return range.item(0);
+ default:
+ return this._doc.body;
+ }
+ } else try {
+ var p = range.commonAncestorContainer;
+ if (!range.collapsed && range.startContainer == range.endContainer &&
+ range.startOffset - range.endOffset <= 1 && range.startContainer.hasChildNodes())
+ p = range.startContainer.childNodes[range.startOffset];
+ /*
+ alert(range.startContainer + ":" + range.startOffset + "\n" +
+ range.endContainer + ":" + range.endOffset);
+ */
+ while (p.nodeType == 3) {
+ p = p.parentNode;
+ }
+ return p;
+ } catch (e) {
+ return null;
+ }
+};
+
+// Returns an array with all the ancestor nodes of the selection.
+HTMLArea.prototype.getAllAncestors = function() {
+ var p = this.getParentElement();
+ var a = [];
+ while (p && (p.nodeType == 1) && (p.tagName.toLowerCase() != 'body')) {
+ a.push(p);
+ p = p.parentNode;
+ }
+ a.push(this._doc.body);
+ return a;
+};
+
+// Selects the contents inside the given node
+HTMLArea.prototype.selectNodeContents = function(node, pos) {
+ this.focusEditor();
+ this.forceRedraw();
+ var range;
+ var collapsed = (typeof pos != "undefined");
+ if (HTMLArea.is_ie) {
+ range = this._doc.body.createTextRange();
+ range.moveToElementText(node);
+ (collapsed) && range.collapse(pos);
+ range.select();
+ } else {
+ var sel = this._getSelection();
+ range = this._doc.createRange();
+ range.selectNodeContents(node);
+ (collapsed) && range.collapse(pos);
+ sel.removeAllRanges();
+ sel.addRange(range);
+ }
+};
+
+/** Call this function to insert HTML code at the current position. It deletes
+ * the selection, if any.
+ */
+HTMLArea.prototype.insertHTML = function(html) {
+ var sel = this._getSelection();
+ var range = this._createRange(sel);
+ if (HTMLArea.is_ie) {
+ range.pasteHTML(html);
+ } else {
+ // construct a new document fragment with the given HTML
+ var fragment = this._doc.createDocumentFragment();
+ var div = this._doc.createElement("div");
+ div.innerHTML = html;
+ while (div.firstChild) {
+ // the following call also removes the node from div
+ fragment.appendChild(div.firstChild);
+ }
+ // this also removes the selection
+ var node = this.insertNodeAtSelection(fragment);
+ }
+};
+
+/**
+ * Call this function to surround the existing HTML code in the selection with
+ * your tags. FIXME: buggy! This function will be deprecated "soon".
+ */
+HTMLArea.prototype.surroundHTML = function(startTag, endTag) {
+ var html = this.getSelectedHTML();
+ // the following also deletes the selection
+ this.insertHTML(startTag + html + endTag);
+};
+
+/// Retrieve the selected block
+HTMLArea.prototype.getSelectedHTML = function() {
+ var sel = this._getSelection();
+ var range = this._createRange(sel);
+ var existing = null;
+ if (HTMLArea.is_ie) {
+ existing = range.htmlText;
+ } else {
+ existing = HTMLArea.getHTML(range.cloneContents(), false, this);
+ }
+ return existing;
+};
+
+/// Return true if we have some selection
+HTMLArea.prototype.hasSelectedText = function() {
+ // FIXME: come _on_ mishoo, you can do better than this ;-)
+ return this.getSelectedHTML() != '';
+};
+
+HTMLArea.prototype._createLink = function(link) {
+ var editor = this;
+ var outparam = null;
+ if (typeof link == "undefined") {
+ link = this.getParentElement();
+ if (link) {
+ if (/^img$/i.test(link.tagName))
+ link = link.parentNode;
+ if (!/^a$/i.test(link.tagName))
+ link = null;
+ }
+ }
+ if (!link) {
+ var sel = editor._getSelection();
+ var range = editor._createRange(sel);
+ var compare = 0;
+ if (HTMLArea.is_ie) {
+ compare = range.compareEndPoints("StartToEnd", range);
+ } else {
+ compare = range.compareBoundaryPoints(range.START_TO_END, range);
+ }
+ if (compare == 0) {
+ alert("You need to select some text before creating a link");
+ return;
+ }
+ outparam = {
+ f_href : '',
+ f_title : '',
+ f_target : '',
+ f_usetarget : editor.config.makeLinkShowsTarget
+ };
+ } else
+ outparam = {
+ f_href : HTMLArea.is_ie ? editor.stripBaseURL(link.href) : link.getAttribute("href"),
+ f_title : link.title,
+ f_target : link.target,
+ f_usetarget : editor.config.makeLinkShowsTarget
+ };
+ this._popupDialog("link.html", function(param) {
+ if (!param)
+ return false;
+ var a = link;
+ if (!a) try {
+ editor._doc.execCommand("createlink", false, param.f_href);
+ a = editor.getParentElement();
+ var sel = editor._getSelection();
+ var range = editor._createRange(sel);
+ if (!HTMLArea.is_ie) {
+ a = range.startContainer;
+ if (!/^a$/i.test(a.tagName)) {
+ a = a.nextSibling;
+ if (a == null)
+ a = range.startContainer.parentNode;
+ }
+ }
+ } catch(e) {}
+ else {
+ var href = param.f_href.trim();
+ editor.selectNodeContents(a);
+ if (href == "") {
+ editor._doc.execCommand("unlink", false, null);
+ editor.updateToolbar();
+ return false;
+ }
+ else {
+ a.href = href;
+ }
+ }
+ if (!(a && /^a$/i.test(a.tagName)))
+ return false;
+ a.target = param.f_target.trim();
+ a.title = param.f_title.trim();
+ editor.selectNodeContents(a);
+ editor.updateToolbar();
+ }, outparam);
+};
+
+// Called when the user clicks on "InsertImage" button. If an image is already
+// there, it will just modify it's properties.
+HTMLArea.prototype._insertImage = function(image) {
+ var editor = this; // for nested functions
+ var outparam = null;
+ if (typeof image == "undefined") {
+ image = this.getParentElement();
+ if (image && !/^img$/i.test(image.tagName))
+ image = null;
+ }
+ if (image) outparam = {
+ f_base : editor.config.baseURL,
+ f_url : HTMLArea.is_ie ? editor.stripBaseURL(image.src) : image.getAttribute("src"),
+ f_alt : image.alt,
+ f_border : image.border,
+ f_align : image.align,
+ f_vert : image.vspace,
+ f_horiz : image.hspace
+ };
+ this._popupDialog("insert_image.html", function(param) {
+ if (!param) { // user must have pressed Cancel
+ return false;
+ }
+ var img = image;
+ if (!img) {
+ var sel = editor._getSelection();
+ var range = editor._createRange(sel);
+ editor._doc.execCommand("insertimage", false, param.f_url);
+ if (HTMLArea.is_ie) {
+ img = range.parentElement();
+ // wonder if this works...
+ if (img.tagName.toLowerCase() != "img") {
+ img = img.previousSibling;
+ }
+ } else {
+ img = range.startContainer.previousSibling;
+ }
+ } else {
+ img.src = param.f_url;
+ }
+
+ for (var field in param) {
+ var value = param[field];
+ switch (field) {
+ case "f_alt" : img.alt = value; break;
+ case "f_border" : img.border = parseInt(value || "0"); break;
+ case "f_align" : img.align = value; break;
+ case "f_vert" : img.vspace = parseInt(value || "0"); break;
+ case "f_horiz" : img.hspace = parseInt(value || "0"); break;
+ }
+ }
+ }, outparam);
+};
+
+// Called when the user clicks the Insert Table button
+HTMLArea.prototype._insertTable = function() {
+ var sel = this._getSelection();
+ var range = this._createRange(sel);
+ var editor = this; // for nested functions
+ this._popupDialog("insert_table.html", function(param) {
+ if (!param) { // user must have pressed Cancel
+ return false;
+ }
+ var doc = editor._doc;
+ // create the table element
+ var table = doc.createElement("table");
+ // assign the given arguments
+
+ for (var field in param) {
+ var value = param[field];
+ if (!value) {
+ continue;
+ }
+ switch (field) {
+ case "f_width" : table.style.width = value + param["f_unit"]; break;
+ case "f_align" : table.align = value; break;
+ case "f_border" : table.border = parseInt(value); break;
+ case "f_spacing" : table.cellSpacing = parseInt(value); break;
+ case "f_padding" : table.cellPadding = parseInt(value); break;
+ }
+ }
+ var cellwidth = 0;
+ if (param.f_fixed)
+ cellwidth = Math.floor(100 / parseInt(param.f_cols));
+ var tbody = doc.createElement("tbody");
+ table.appendChild(tbody);
+ for (var i = 0; i < param["f_rows"]; ++i) {
+ var tr = doc.createElement("tr");
+ tbody.appendChild(tr);
+ for (var j = 0; j < param["f_cols"]; ++j) {
+ var td = doc.createElement("td");
+ if (cellwidth)
+ td.style.width = cellwidth + "%";
+ tr.appendChild(td);
+ // Mozilla likes to see something inside the cell.
+ (HTMLArea.is_gecko) && td.appendChild(doc.createElement("br"));
+ }
+ }
+ if (HTMLArea.is_ie) {
+ range.pasteHTML(table.outerHTML);
+ } else {
+ // insert the table
+ editor.insertNodeAtSelection(table);
+ }
+ return true;
+ }, null);
+};
+
+/***************************************************
+ * Category: EVENT HANDLERS
+ ***************************************************/
+
+// el is reference to the SELECT object
+// txt is the name of the select field, as in config.toolbar
+HTMLArea.prototype._comboSelected = function(el, txt) {
+ this.focusEditor();
+ var value = el.options[el.selectedIndex].value;
+ switch (txt) {
+ case "fontname":
+ case "fontsize": this.execCommand(txt, false, value); break;
+ case "formatblock":
+ (HTMLArea.is_ie) && (value = "<" + value + ">");
+ this.execCommand(txt, false, value);
+ break;
+ default:
+ // try to look it up in the registered dropdowns
+ var dropdown = this.config.customSelects[txt];
+ if (typeof dropdown != "undefined") {
+ dropdown.action(this);
+ } else {
+ alert("FIXME: combo box " + txt + " not implemented");
+ }
+ }
+};
+
+// the execCommand function (intercepts some commands and replaces them with
+// our own implementation)
+HTMLArea.prototype.execCommand = function(cmdID, UI, param) {
+ var editor = this; // for nested functions
+ this.focusEditor();
+ cmdID = cmdID.toLowerCase();
+ if (HTMLArea.is_gecko) try { this._doc.execCommand('useCSS', false, true); } catch (e) {};
+ switch (cmdID) {
+ case "htmlmode" : this.setMode(); break;
+ case "hilitecolor":
+ (HTMLArea.is_ie) && (cmdID = "backcolor");
+ case "forecolor":
+ this._popupDialog("select_color.html", function(color) {
+ if (color) { // selection not canceled
+ editor._doc.execCommand(cmdID, false, "#" + color);
+ }
+ }, HTMLArea._colorToRgb(this._doc.queryCommandValue(cmdID)));
+ break;
+ case "createlink":
+ this._createLink();
+ break;
+ case "popupeditor":
+ // this object will be passed to the newly opened window
+ HTMLArea._object = this;
+ if (HTMLArea.is_ie) {
+ //if (confirm(HTMLArea.I18N.msg["IE-sucks-full-screen"]))
+ {
+ window.open(this.popupURL("fullscreen.html"), "ha_fullscreen",
+ "toolbar=no,location=no,directories=no,status=no,menubar=no," +
+ "scrollbars=no,resizable=yes,width=640,height=480");
+ }
+ } else {
+ window.open(this.popupURL("fullscreen.html"), "ha_fullscreen",
+ "toolbar=no,menubar=no,personalbar=no,width=640,height=480," +
+ "scrollbars=no,resizable=yes");
+ }
+ break;
+ case "undo":
+ case "redo":
+ if (this._customUndo)
+ this[cmdID]();
+ else
+ this._doc.execCommand(cmdID, UI, param);
+ break;
+ case "inserttable": this._insertTable(); break;
+ case "insertimage": this._insertImage(); break;
+ case "about" : this._popupDialog("about.html", null, this); break;
+ case "showhelp" : window.open(_editor_url + "reference.html", "ha_help"); break;
+
+ case "killword": this._wordClean(); break;
+
+ case "cut":
+ case "copy":
+ case "paste":
+ try {
+ this._doc.execCommand(cmdID, UI, param);
+ if (this.config.killWordOnPaste)
+ this._wordClean();
+ } catch (e) {
+ if (HTMLArea.is_gecko) {
+ if (typeof HTMLArea.I18N.msg["Moz-Clipboard"] == "undefined") {
+ HTMLArea.I18N.msg["Moz-Clipboard"] =
+ "Unprivileged scripts cannot access Cut/Copy/Paste programatically " +
+ "for security reasons. Click OK to see a technical note at mozilla.org " +
+ "which shows you how to allow a script to access the clipboard.\n\n" +
+ "[FIXME: please translate this message in your language definition file.]";
+ }
+ if (confirm(HTMLArea.I18N.msg["Moz-Clipboard"]))
+ window.open("http://mozilla.org/editor/midasdemo/securityprefs.html");
+ }
+ }
+ break;
+ case "lefttoright":
+ case "righttoleft":
+ var dir = (cmdID == "righttoleft") ? "rtl" : "ltr";
+ var el = this.getParentElement();
+ while (el && !HTMLArea.isBlockElement(el))
+ el = el.parentNode;
+ if (el) {
+ if (el.style.direction == dir)
+ el.style.direction = "";
+ else
+ el.style.direction = dir;
+ }
+ break;
+ default: try { this._doc.execCommand(cmdID, UI, param); }
+ catch(e) { if (this.config.debug) { alert(e + "\n\nby execCommand(" + cmdID + ");"); } }
+ }
+ this.updateToolbar();
+ return false;
+};
+
+/** A generic event handler for things that happen in the IFRAME's document.
+ * This function also handles key bindings. */
+HTMLArea.prototype._editorEvent = function(ev) {
+ var editor = this;
+ var keyEvent = (HTMLArea.is_ie && ev.type == "keydown") || (!HTMLArea.is_ie && ev.type == "keypress");
+
+ if (keyEvent)
+ for (var i in editor.plugins) {
+ var plugin = editor.plugins[i].instance;
+ if (typeof plugin.onKeyPress == "function")
+ if (plugin.onKeyPress(ev))
+ return false;
+ }
+ if (keyEvent && ev.ctrlKey && !ev.altKey) {
+ var sel = null;
+ var range = null;
+ var key = String.fromCharCode(HTMLArea.is_ie ? ev.keyCode : ev.charCode).toLowerCase();
+ var cmd = null;
+ var value = null;
+ switch (key) {
+ case 'a':
+ if (!HTMLArea.is_ie) {
+ // KEY select all
+ sel = this._getSelection();
+ sel.removeAllRanges();
+ range = this._createRange();
+ range.selectNodeContents(this._doc.body);
+ sel.addRange(range);
+ HTMLArea._stopEvent(ev);
+ }
+ break;
+
+ // simple key commands follow
+
+ case 'b': cmd = "bold"; break;
+ case 'i': cmd = "italic"; break;
+ case 'u': cmd = "underline"; break;
+ case 's': cmd = "strikethrough"; break;
+ case 'l': cmd = "justifyleft"; break;
+ case 'e': cmd = "justifycenter"; break;
+ case 'r': cmd = "justifyright"; break;
+ case 'j': cmd = "justifyfull"; break;
+ case 'z': cmd = "undo"; break;
+ case 'y': cmd = "redo"; break;
+ case 'v': if (HTMLArea.is_ie || editor.config.htmlareaPaste) { cmd = "paste"; } break;
+ case 'n': cmd = "formatblock"; value = HTMLArea.is_ie ? "<p>" : "p"; break;
+
+ case '0': cmd = "killword"; break;
+
+ // headings
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ cmd = "formatblock";
+ value = "h" + key;
+ if (HTMLArea.is_ie)
+ value = "<" + value + ">";
+ break;
+ }
+ if (cmd) {
+ // execute simple command
+ this.execCommand(cmd, false, value);
+ HTMLArea._stopEvent(ev);
+ }
+ }
+ else if (keyEvent) {
+ // other keys here
+ switch (ev.keyCode) {
+ case 13: // KEY enter
+ if (HTMLArea.is_gecko && !ev.shiftKey) {
+ this.dom_checkInsertP();
+ HTMLArea._stopEvent(ev);
+ }
+ break;
+ case 8: // KEY backspace
+ case 46: // KEY delete
+ if (HTMLArea.is_gecko && !ev.shiftKey) {
+ if (this.dom_checkBackspace())
+ HTMLArea._stopEvent(ev);
+ } else if (HTMLArea.is_ie) {
+ if (this.ie_checkBackspace())
+ HTMLArea._stopEvent(ev);
+ }
+ break;
+ }
+ }
+
+ // update the toolbar state after some time
+ if (editor._timerToolbar) {
+ clearTimeout(editor._timerToolbar);
+ }
+ editor._timerToolbar = setTimeout(function() {
+ editor.updateToolbar();
+ editor._timerToolbar = null;
+ }, 50);
+};
+
+HTMLArea.prototype.scrollToCaret = function() {
+ var
+ e = this.getParentElement(),
+ w = this._iframe.contentWindow,
+ h = w.innerHeight || w.height,
+ d = this._doc,
+ t = d.documentElement.scrollTop || d.body.scrollTop;
+ if (typeof h == "undefined")
+ return false;
+ if (e.offsetTop > h + t)
+ w.scrollTo(e.offsetLeft, e.offsetTop - h + e.offsetHeight);
+};
+
+HTMLArea.prototype.convertNode = function(el, newTagName) {
+ var newel = this._doc.createElement(newTagName), p = el.parentNode;
+ while (el.firstChild)
+ newel.appendChild(el.firstChild);
+ p.insertBefore(newel, el);
+ p.removeChild(el);
+ return newel;
+};
+
+HTMLArea.prototype.ie_checkBackspace = function() {
+ var sel = this._getSelection();
+ var range = this._createRange(sel);
+ var r2 = range.duplicate();
+ r2.moveStart("character", -1);
+ var a = r2.parentElement();
+ if (a != range.parentElement() &&
+ /^a$/i.test(a.tagName)) {
+ r2.collapse(true);
+ r2.moveEnd("character", 1);
+ r2.pasteHTML('');
+ r2.select();
+ return true;
+ }
+};
+
+HTMLArea.prototype.dom_checkBackspace = function() {
+ var self = this;
+ setTimeout(function() {
+ var sel = self._getSelection();
+ var range = self._createRange(sel);
+ var SC = range.startContainer;
+ var SO = range.startOffset;
+ var EC = range.endContainer;
+ var EO = range.endOffset;
+ var newr = SC.nextSibling;
+ if (SC.nodeType == 3)
+ SC = SC.parentNode;
+ if (!/\S/.test(SC.tagName)) {
+ var p = document.createElement("p");
+ while (SC.firstChild)
+ p.appendChild(SC.firstChild);
+ SC.parentNode.insertBefore(p, SC);
+ SC.parentNode.removeChild(SC);
+ var r = range.cloneRange();
+ r.setStartBefore(newr);
+ r.setEndAfter(newr);
+ r.extractContents();
+ sel.removeAllRanges();
+ sel.addRange(r);
+ }
+ }, 10);
+};
+
+HTMLArea.prototype.dom_checkInsertP = function() {
+ var i, SC, left, right, r2,
+ sel = this._getSelection(),
+ r = this._createRange(sel),
+ p = this.getAllAncestors(),
+ block = null,
+ doc = this._doc,
+ body = doc.body;
+
+ for (i = 0; i < p.length; ++i)
+ if (HTMLArea.isBlockElement(p[i]) && !/body|html/i.test(p[i].tagName)) {
+ block = p[i];
+ break;
+ }
+
+ if (!r.collapsed)
+ r.deleteContents();
+ sel.removeAllRanges();
+ SC = r.startContainer;
+
+ if (!block) {
+ left = SC;
+ for (i = SC; i && i != body && !HTMLArea.isBlockElement(i); i = HTMLArea.getPrevNode(i))
+ left = i;
+ right = SC;
+ for (i = SC; i && i != body && !HTMLArea.isBlockElement(i); i = HTMLArea.getNextNode(i))
+ right = i;
+ if (left != body && right != body) {
+ r2 = r.cloneRange();
+ r2.setStartBefore(left);
+ r2.surroundContents(block = doc.createElement("p"));
+ if (!/\S/.test(HTMLArea.getInnerText(block)))
+ block.innerHTML = "<br />";
+ block.normalize();
+ r.setEndAfter(right);
+ r.surroundContents(block = doc.createElement("p"));
+ if (!/\S/.test(HTMLArea.getInnerText(block)))
+ block.innerHTML = "<br />";
+ block.normalize();
+ } else {
+ r = doc.createRange();
+ r.setStart(body, 0);
+ r.setEnd(body, 0);
+ r.insertNode(block = doc.createElement("p"));
+ block.innerHTML = "<br />";
+ }
+ r.selectNodeContents(block);
+ } else {
+ r.setEndAfter(block);
+ var df = r.extractContents(), left_empty = false;
+ if (!/\S/.test(block.innerHTML)) {
+ block.innerHTML = "<br />";
+ left_empty = true;
+ }
+ p = df.firstChild;
+ if (p) {
+ if (!/\S/.test(HTMLArea.getInnerText(p))) {
+ if (/^h[1-6]$/i.test(p.tagName))
+ p = this.convertNode(p, "p");
+ p.innerHTML = "<br />";
+ }
+ if (/^li$/i.test(p.tagName) && left_empty && !block.nextSibling) {
+ left = block.parentNode;
+ left.removeChild(block);
+ r.setEndAfter(left);
+ r.collapse(false);
+ p = this.convertNode(p, /^[uo]l$/i.test(left.parentNode.tagName) ? "li" : "p");
+ }
+ r.insertNode(df);
+ r.selectNodeContents(p);
+ }
+ }
+ r.collapse(true);
+ sel.addRange(r);
+ this.forceRedraw();
+ this.scrollToCaret();
+};
+
+// retrieve the HTML
+HTMLArea.prototype.getHTML = function() {
+ switch (this._editMode) {
+ case "wysiwyg" :
+ if (!this.config.fullPage) {
+ return HTMLArea.getHTML(this._doc.body, false, this);
+ } else
+ return this.doctype + "\n" + HTMLArea.getHTML(this._doc.documentElement, true, this);
+ case "textmode" : return this._textArea.value;
+ default : alert("Mode <" + mode + "> not defined!");
+ }
+ return false;
+};
+
+// retrieve the HTML (fastest version, but uses innerHTML)
+HTMLArea.prototype.getInnerHTML = function() {
+ switch (this._editMode) {
+ case "wysiwyg" :
+ if (!this.config.fullPage)
+ return this._doc.body.innerHTML;
+ else
+ return this.doctype + "\n" + this._doc.documentElement.innerHTML;
+ case "textmode" : return this._textArea.value;
+ default : alert("Mode <" + mode + "> not defined!");
+ }
+ return false;
+};
+
+// completely change the HTML inside
+HTMLArea.prototype.setHTML = function(html) {
+ switch (this._editMode) {
+ case "wysiwyg" :
+ if (!this.config.fullPage)
+ this._doc.body.innerHTML = html;
+ else
+ // this._doc.documentElement.innerHTML = html;
+ this._doc.body.innerHTML = html;
+ break;
+ case "textmode" : this._textArea.value = html; break;
+ default : alert("Mode <" + mode + "> not defined!");
+ }
+ return false;
+};
+
+// sets the given doctype (useful when config.fullPage is true)
+HTMLArea.prototype.setDoctype = function(doctype) {
+ this.doctype = doctype;
+};
+
+/***************************************************
+ * Category: UTILITY FUNCTIONS
+ ***************************************************/
+
+// variable used to pass the object to the popup editor window.
+HTMLArea._object = null;
+
+// function that returns a clone of the given object
+HTMLArea.cloneObject = function(obj) {
+ if (!obj) return null;
+ var newObj = new Object;
+
+ // check for array objects
+ if (obj.constructor.toString().indexOf("function Array(") == 1) {
+ newObj = obj.constructor();
+ }
+
+ // check for function objects (as usual, IE is fucked up)
+ if (obj.constructor.toString().indexOf("function Function(") == 1) {
+ newObj = obj; // just copy reference to it
+ } else for (var n in obj) {
+ var node = obj[n];
+ if (typeof node == 'object') { newObj[n] = HTMLArea.cloneObject(node); }
+ else { newObj[n] = node; }
+ }
+
+ return newObj;
+};
+
+// FIXME!!! this should return false for IE < 5.5
+HTMLArea.checkSupportedBrowser = function() {
+ if (HTMLArea.is_gecko) {
+ if (navigator.productSub < 20021201) {
+ alert("You need at least Mozilla-1.3 Alpha.\n" +
+ "Sorry, your Gecko is not supported.");
+ return false;
+ }
+ if (navigator.productSub < 20030210) {
+ alert("Mozilla < 1.3 Beta is not supported!\n" +
+ "I'll try, though, but it might not work.");
+ }
+ }
+ return HTMLArea.is_gecko || HTMLArea.is_ie;
+};
+
+// selection & ranges
+
+// returns the current selection object
+HTMLArea.prototype._getSelection = function() {
+ if (HTMLArea.is_ie) {
+ return this._doc.selection;
+ } else {
+ return this._iframe.contentWindow.getSelection();
+ }
+};
+
+// returns a range for the current selection
+HTMLArea.prototype._createRange = function(sel) {
+ if (HTMLArea.is_ie) {
+ return sel.createRange();
+ } else {
+ this.focusEditor();
+ if (typeof sel != "undefined") {
+ try {
+ return sel.getRangeAt(0);
+ } catch(e) {
+ return this._doc.createRange();
+ }
+ } else {
+ return this._doc.createRange();
+ }
+ }
+};
+
+// event handling
+
+HTMLArea._addEvent = function(el, evname, func) {
+ if (HTMLArea.is_ie) {
+ el.attachEvent("on" + evname, func);
+ } else {
+ el.addEventListener(evname, func, true);
+ }
+};
+
+HTMLArea._addEvents = function(el, evs, func) {
+ for (var i = evs.length; --i >= 0;) {
+ HTMLArea._addEvent(el, evs[i], func);
+ }
+};
+
+HTMLArea._removeEvent = function(el, evname, func) {
+ if (HTMLArea.is_ie) {
+ el.detachEvent("on" + evname, func);
+ } else {
+ el.removeEventListener(evname, func, true);
+ }
+};
+
+HTMLArea._removeEvents = function(el, evs, func) {
+ for (var i = evs.length; --i >= 0;) {
+ HTMLArea._removeEvent(el, evs[i], func);
+ }
+};
+
+HTMLArea._stopEvent = function(ev) {
+ if (HTMLArea.is_ie) {
+ ev.cancelBubble = true;
+ ev.returnValue = false;
+ } else {
+ ev.preventDefault();
+ ev.stopPropagation();
+ }
+};
+
+HTMLArea._removeClass = function(el, className) {
+ if (!(el && el.className)) {
+ return;
+ }
+ var cls = el.className.split(" ");
+ var ar = new Array();
+ for (var i = cls.length; i > 0;) {
+ if (cls[--i] != className) {
+ ar[ar.length] = cls[i];
+ }
+ }
+ el.className = ar.join(" ");
+};
+
+HTMLArea._addClass = function(el, className) {
+ // remove the class first, if already there
+ HTMLArea._removeClass(el, className);
+ el.className += " " + className;
+};
+
+HTMLArea._hasClass = function(el, className) {
+ if (!(el && el.className)) {
+ return false;
+ }
+ var cls = el.className.split(" ");
+ for (var i = cls.length; i > 0;) {
+ if (cls[--i] == className) {
+ return true;
+ }
+ }
+ return false;
+};
+
+HTMLArea._blockTags = " body form textarea fieldset ul ol dl li div " +
+"p h1 h2 h3 h4 h5 h6 quote pre table thead " +
+"tbody tfoot tr td iframe address ";
+HTMLArea.isBlockElement = function(el) {
+ return el && el.nodeType == 1 && (HTMLArea._blockTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
+};
+
+HTMLArea._closingTags = " head script style div span tr td tbody table em strong b i code cite dfn abbr acronym font a title ";
+HTMLArea.needsClosingTag = function(el) {
+ return el && el.nodeType == 1 && (HTMLArea._closingTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
+};
+
+// performs HTML encoding of some given string
+HTMLArea.htmlEncode = function(str) {
+ // we don't need regexp for that, but.. so be it for now.
+ str = str.replace(/&/ig, "&");
+ str = str.replace(/</ig, "<");
+ str = str.replace(/>/ig, ">");
+
+ // -------------------------------------------------------------
+ // PLOG HTMLAREA TWEAK
+ // Changed by: Mark Wu
+ // Date: 2005/02/05
+ // Purpose: Fix the multi-spaces converted to ASCII(160) errors.
+ // We need to convert them back to space ASCII(32) again.
+ // -------------------------------------------------------------
+ str = str.replace(/\xA0/g, " ");
+ // -------------------------------------------------------------
+
+ str = str.replace(/\x22/ig, """);
+ // \x22 means '"' -- we use hex reprezentation so that we don't disturb
+ // JS compressors (well, at least mine fails.. ;)
+ return str;
+};
+
+// Retrieves the HTML code from the given node. This is a replacement for
+// getting innerHTML, using standard DOM calls.
+// Wrapper catch a Mozilla-Exception with non well formed html source code
+HTMLArea.getHTML = function(root, outputRoot, editor){
+ try{
+ return HTMLArea.getHTMLWrapper(root,outputRoot,editor);
+ }
+ catch(e){
+ alert('Your Document is not well formed. Check JavaScript console for details.');
+ return editor._iframe.contentWindow.document.body.innerHTML;
+ }
+}
+
+HTMLArea.getHTMLWrapper = function(root, outputRoot, editor) {
+ var html = "";
+ switch (root.nodeType) {
+ case 1: // Node.ELEMENT_NODE
+ case 11: // Node.DOCUMENT_FRAGMENT_NODE
+ var closed;
+ var i;
+ var root_tag = (root.nodeType == 1) ? root.tagName.toLowerCase() : '';
+ if (root_tag == 'br' && !root.nextSibling)
+ break;
+ if (outputRoot)
+ outputRoot = !(editor.config.htmlRemoveTags && editor.config.htmlRemoveTags.test(root_tag));
+ if (HTMLArea.is_ie && root_tag == "head") {
+ if (outputRoot)
+ html += "<head>";
+ // lowercasize
+ var save_multiline = RegExp.multiline;
+ RegExp.multiline = true;
+ var txt = root.innerHTML.replace(HTMLArea.RE_tagName, function(str, p1, p2) {
+ return p1 + p2.toLowerCase();
+ });
+ RegExp.multiline = save_multiline;
+ html += txt;
+ if (outputRoot)
+ html += "</head>";
+ break;
+ } else if (outputRoot) {
+ closed = (!(root.hasChildNodes() || HTMLArea.needsClosingTag(root)));
+ html = "<" + root.tagName.toLowerCase();
+ var attrs = root.attributes;
+ for (i = 0; i < attrs.length; ++i) {
+ var a = attrs.item(i);
+ if (!a.specified) {
+ continue;
+ }
+ var name = a.nodeName.toLowerCase();
+ if (/_moz_editor_bogus_node/.test(name)) {
+ html = "";
+ break;
+ }
+ if (/_moz|contenteditable|_msh/.test(name)) {
+ // avoid certain attributes
+ continue;
+ }
+ var value;
+ if (name != "style") {
+ // IE5.5 reports 25 when cellSpacing is
+ // 1; other values might be doomed too.
+ // For this reason we extract the
+ // values directly from the root node.
+ // I'm starting to HATE JavaScript
+ // development. Browser differences
+ // suck.
+ //
+ // Using Gecko the values of href and src are converted to absolute links
+ // unless we get them using nodeValue()
+ if (typeof root[a.nodeName] != "undefined" && name != "href" && name != "src" && !/^on/.test(name)) {
+ value = root[a.nodeName];
+ } else {
+ value = a.nodeValue;
+ // IE seems not willing to return the original values - it converts to absolute
+ // links using a.nodeValue, a.value, a.stringValue, root.getAttribute("href")
+ // So we have to strip the baseurl manually :-/
+ if (HTMLArea.is_ie && (name == "href" || name == "src")) {
+ value = editor.stripBaseURL(value);
+ }
+ }
+ } else { // IE fails to put style in attributes list
+ // FIXME: cssText reported by IE is UPPERCASE
+ value = root.style.cssText;
+ }
+ if (/(_moz|^$)/.test(value)) {
+ // Mozilla reports some special tags
+ // here; we don't need them.
+ continue;
+ }
+ html += " " + name + '="' + value + '"';
+ }
+ if (html != "") {
+ html += closed ? " />" : ">";
+ }
+ }
+ for (i = root.firstChild; i; i = i.nextSibling) {
+ html += HTMLArea.getHTMLWrapper(i, true, editor);
+ }
+ if (outputRoot && !closed) {
+ html += "</" + root.tagName.toLowerCase() + ">";
+ }
+ break;
+ case 3: // Node.TEXT_NODE
+ // If a text node is alone in an element and all spaces, replace it with an non breaking one
+ // This partially undoes the damage done by moz, which translates ' 's into spaces in the data element
+ /* if ( !root.previousSibling && !root.nextSibling && root.data.match(/^\s*$/i) ) html = ' ';
+ else */
+ html = /^script|style$/i.test(root.parentNode.tagName) ? root.data : HTMLArea.htmlEncode(root.data);
+ break;
+ case 4: // Node.CDATA_SECTION_NODE
+ // FIXME: it seems we never get here, but I believe we should..
+ // maybe a browser problem?--CDATA sections are converted to plain text nodes and normalized
+ // CDATA sections should go "as is" without further encoding
+ html = "<![CDATA[" + root.data + "]]>";
+ break;
+ case 8: // Node.COMMENT_NODE
+ html = "<!--" + root.data + "-->";
+ break; // skip comments, for now.
+ }
+ return html;
+};
+
+HTMLArea.getPrevNode = function(node) {
+ if (!node) return null;
+ if (node.previousSibling) return node.previousSibling;
+ if (node.parentNode) return node.parentNode;
+ return null;
+};
+
+HTMLArea.getNextNode = function(node) {
+ if (!node) return null;
+ if (node.nextSibling) return node.nextSibling;
+ if (node.parentNode) return node.parentNode;
+ return null;
+};
+
+HTMLArea.prototype.stripBaseURL = function(string) {
+ var baseurl = this.config.baseURL;
+
+ // strip to last directory in case baseurl points to a file
+ baseurl = baseurl.replace(/[^\/]+$/, '');
+ var basere = new RegExp(baseurl);
+ string = string.replace(basere, "");
+
+ // strip host-part of URL which is added by MSIE to links relative to server root
+ baseurl = baseurl.replace(/^(https?:\/\/[^\/]+)(.*)$/, '$1');
+ basere = new RegExp(baseurl);
+ return string.replace(basere, "");
+};
+
+String.prototype.trim = function() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+};
+
+// creates a rgb-style color from a number
+HTMLArea._makeColor = function(v) {
+ if (typeof v != "number") {
+ // already in rgb (hopefully); IE doesn't get here.
+ return v;
+ }
+ // IE sends number; convert to rgb.
+ var r = v & 0xFF;
+ var g = (v >> 8) & 0xFF;
+ var b = (v >> 16) & 0xFF;
+ return "rgb(" + r + "," + g + "," + b + ")";
+};
+
+// returns hexadecimal color representation from a number or a rgb-style color.
+HTMLArea._colorToRgb = function(v) {
+ if (!v)
+ return '';
+
+ // returns the hex representation of one byte (2 digits)
+ function hex(d) {
+ return (d < 16) ? ("0" + d.toString(16)) : d.toString(16);
+ };
+
+ if (typeof v == "number") {
+ // we're talking to IE here
+ var r = v & 0xFF;
+ var g = (v >> 8) & 0xFF;
+ var b = (v >> 16) & 0xFF;
+ return "#" + hex(r) + hex(g) + hex(b);
+ }
+
+ if (v.substr(0, 3) == "rgb") {
+ // in rgb(...) form -- Mozilla
+ var re = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/;
+ if (v.match(re)) {
+ var r = parseInt(RegExp.$1);
+ var g = parseInt(RegExp.$2);
+ var b = parseInt(RegExp.$3);
+ return "#" + hex(r) + hex(g) + hex(b);
+ }
+ // doesn't match RE?! maybe uses percentages or float numbers
+ // -- FIXME: not yet implemented.
+ return null;
+ }
+
+ if (v.substr(0, 1) == "#") {
+ // already hex rgb (hopefully :D )
+ return v;
+ }
+
+ // if everything else fails ;)
+ return null;
+};
+
+// modal dialogs for Mozilla (for IE we're using the showModalDialog() call).
+
+// receives an URL to the popup dialog and a function that receives one value;
+// this function will get called after the dialog is closed, with the return
+// value of the dialog.
+HTMLArea.prototype._popupDialog = function(url, action, init) {
+ Dialog(this.popupURL(url), action, init);
+};
+
+// paths
+
+HTMLArea.prototype.imgURL = function(file, plugin) {
+ if (typeof plugin == "undefined")
+ return _editor_url + file;
+ else
+ return _editor_url + "plugins/" + plugin + "/img/" + file;
+};
+
+HTMLArea.prototype.popupURL = function(file) {
+ var url = "";
+ if (file.match(/^plugin:\/\/(.*?)\/(.*)/)) {
+ var plugin = RegExp.$1;
+ var popup = RegExp.$2;
+ if (!/\.html$/.test(popup))
+ popup += ".html";
+ url = _editor_url + "plugins/" + plugin + "/popups/" + popup;
+ } else
+ url = _editor_url + this.config.popupURL + file;
+ return url;
+};
+
+/**
+ * FIX: Internet Explorer returns an item having the _name_ equal to the given
+ * id, even if it's not having any id. This way it can return a different form
+ * field even if it's not a textarea. This workarounds the problem by
+ * specifically looking to search only elements having a certain tag name.
+ */
+HTMLArea.getElementById = function(tag, id) {
+ var el, i, objs = document.getElementsByTagName(tag);
+ for (i = objs.length; --i >= 0 && (el = objs[i]);)
+ if (el.id == id)
+ return el;
+ return null;
+};
+
+// -------------------------------------------------------------
+// PLOG HTMLAREA TWEAK
+// Added by: Mark Wu
+// Original by: einSTein
+// Date: 2005/02/05
+// Purpose: Add a CR/LF after some HTML Tag
+// Come From: http://www.htmlarea.com/forum/htmlArea_3_(beta)_C4/htmlArea_v3.0_-_Beta_Release_F14/html_output_is_one_*really*_long_line!_P17404/
+// -------------------------------------------------------------
+function insertCRLF( txt ) {
+
+ txt = txt.replace(/<br \/>([^\n])/g,"<br \/>\n$1");
+ txt = txt.replace(/<tr>([^\n])/g,"<tr>\n$1");
+ txt = txt.replace(/<\/h1>([^\n])/g,"<\/h1>\n$1");
+ txt = txt.replace(/<\/h2>([^\n])/g,"<\/h2>\n$1");
+ txt = txt.replace(/<\/h3>([^\n])/g,"<\/h3>\n$1");
+ txt = txt.replace(/<\/h4>([^\n])/g,"<\/h4>\n$1");
+ txt = txt.replace(/<\/h5>([^\n])/g,"<\/h5>\n$1");
+ txt = txt.replace(/<\/h6>([^\n])/g,"<\/h6>\n$1");
+ txt = txt.replace(/<\/tr>([^\n])/g,"<\/tr>\n$1");
+ txt = txt.replace(/<td>([^\n])/g,"<td>\n$1");
+ txt = txt.replace(/<\/td>([^\n])/g,"<\/td>\n$1");
+ txt = txt.replace(/<\/li>([^\n])/g,"<\/li>\n$1");
+ txt = txt.replace(/<\/p>([^\n])/g,"<\/p>\n$1");
+ txt = txt.replace(/<p \/>([^\n])/g,"<p \/>\n$1");
+
+ return txt;
+};
+// -------------------------------------------------------------
+
+// EOF
+// Local variables: //
+// c-basic-offset:8 //
+// indent-tabs-mode:t //
+// End: //
Modified: plog/trunk/js/htmlarea/images/ed_delete.gif
===================================================================
(Binary files differ)
Added: plog/trunk/js/htmlarea/images/ed_killword.gif
===================================================================
(Binary files differ)
Property changes on: plog/trunk/js/htmlarea/images/ed_killword.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: plog/trunk/js/htmlarea/images/ed_link.gif
===================================================================
(Binary files differ)
Added: plog/trunk/js/htmlarea/images/ed_print.gif
===================================================================
(Binary files differ)
Property changes on: plog/trunk/js/htmlarea/images/ed_print.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: plog/trunk/js/htmlarea/images/ed_rmformat.gif
===================================================================
(Binary files differ)
Property changes on: plog/trunk/js/htmlarea/images/ed_rmformat.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: plog/trunk/js/htmlarea/images/insert_table.gif
===================================================================
(Binary files differ)
Modified: plog/trunk/js/htmlarea/lang/b5.js
===================================================================
--- plog/trunk/js/htmlarea/lang/b5.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/b5.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,36 +1,36 @@
-// I18N constants -- Chinese Big-5
-// by Dave Lo -- dlo at interactivetools.com
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "b5",
-
- tooltips: {
- bold: "²ÊÅé",
- italic: "±×Åé",
- underline: "©³½u",
- strikethrough: "§R°£½u",
- subscript: "¤U¼Ð",
- superscript: "¤W¼Ð",
- justifyleft: "¦ì¸m¾a¥ª",
- justifycenter: "¦ì¸m©~¤¤",
- justifyright: "¦ì¸m¾a¥k",
- justifyfull: "¦ì¸m¥ª¥k¥µ¥",
- orderedlist: "¶¶§Ç²M³æ",
- unorderedlist: "µL§Ç²M³æ",
- outdent: "´î¤p¦æ«eªÅ¥Õ",
- indent: "¥[¼e¦æ«eªÅ¥Õ",
- forecolor: "¤å¦rÃC¦â",
- backcolor: "I´ºÃC¦â",
- horizontalrule: "¤ô¥½u",
- createlink: "´¡¤J³sµ²",
- insertimage: "´¡¤J¹Ï§Î",
- inserttable: "´¡¤Jªí®æ",
- htmlmode: "¤Á´«HTMLì©l½X",
- popupeditor: "©ñ¤j",
- about: "Ãö©ó HTMLArea",
- help: "»¡©ú",
- textindicator: "¦rÅé¨Ò¤l"
- }
-};
+// I18N constants -- Chinese Big-5
+// by Dave Lo -- dlo at interactivetools.com
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "b5",
+
+ tooltips: {
+ bold: "²ÊÅé",
+ italic: "±×Åé",
+ underline: "©³½u",
+ strikethrough: "§R°£½u",
+ subscript: "¤U¼Ð",
+ superscript: "¤W¼Ð",
+ justifyleft: "¦ì¸m¾a¥ª",
+ justifycenter: "¦ì¸m©~¤¤",
+ justifyright: "¦ì¸m¾a¥k",
+ justifyfull: "¦ì¸m¥ª¥k¥µ¥",
+ orderedlist: "¶¶§Ç²M³æ",
+ unorderedlist: "µL§Ç²M³æ",
+ outdent: "´î¤p¦æ«eªÅ¥Õ",
+ indent: "¥[¼e¦æ«eªÅ¥Õ",
+ forecolor: "¤å¦rÃC¦â",
+ backcolor: "I´ºÃC¦â",
+ horizontalrule: "¤ô¥½u",
+ createlink: "´¡¤J³sµ²",
+ insertimage: "´¡¤J¹Ï§Î",
+ inserttable: "´¡¤Jªí®æ",
+ htmlmode: "¤Á´«HTMLì©l½X",
+ popupeditor: "©ñ¤j",
+ about: "Ãö©ó HTMLArea",
+ help: "»¡©ú",
+ textindicator: "¦rÅé¨Ò¤l"
+ }
+};
Added: plog/trunk/js/htmlarea/lang/ch.js
===================================================================
--- plog/trunk/js/htmlarea/lang/ch.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/ch.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,83 @@
+// I18N constants
+
+// LANG: "ch", ENCODING: UTF-8
+// Samuel Stone, http://stonemicro.com/
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "ch",
+
+ tooltips: {
+ bold: "ç²é«",
+ italic: "æé«",
+ underline: "åºç·",
+ strikethrough: "åªç·",
+ subscript: "䏿¨",
+ superscript: "䏿¨",
+ justifyleft: "é å·¦",
+ justifycenter: "å±
ä¸",
+ justifyright: "é å³",
+ justifyfull: "æ´é½",
+ orderedlist: "é åºæ¸
å®",
+ unorderedlist: "ç¡åºæ¸
å®",
+ outdent: "伸æ",
+ indent: "縮æ",
+ forecolor: "æåé¡è²",
+ backcolor: "èæ¯é¡è²",
+ horizontalrule: "æ°´å¹³ç·",
+ createlink: "æå
¥é£çµ",
+ insertimage: "æå
¥åå",
+ inserttable: "æå
¥è¡¨æ ¼",
+ htmlmode: "åæHTMLåå§ç¢¼",
+ popupeditor: "伸åºç·¨è¼¯ç³»çµ±",
+ about: "éæ¼ HTMLArea",
+ help: "說æ",
+ textindicator: "åé«ä¾å",
+ undo: "åå",
+ redo: "鿥",
+ cut: "åªå¶é项",
+ copy: "å¤å¶é项",
+ paste: "è´´ä¸",
+ lefttoright: "ä»å·¦å°å³",
+ righttoleft: "ä»å³å°å·¦"
+ },
+
+ buttons: {
+ "ok": "好",
+ "cancel": "åæ¶"
+ },
+
+ msg: {
+ "Path": "éå¾",
+ "TEXT_MODE": "ä½ å¨ç¨ç´å編輯æ¹å¼. ç¨ [<>] æéè½å æè¦å³æå¾ 編輯æ¹å¼.",
+
+ "IE-sucks-full-screen" :
+ // translate here
+ "æ´é å¼å¨Internet Explorer ä¸å¸¸åºåé¡, " +
+ "å çºéæ¯ Internet Explorer çç¡ååé¡ï¼æåç¡æ³è§£æ±ºã" +
+ "ä½ å¯è½çè¦ä¸äºåå¾ï¼æéå°å
¶ä»åé¡ã" +
+ "æåå·²è¦åäºä½ . 妿è¦è½å° æ£é å¼ è«æ 好.",
+
+ "Moz-Clipboard" :
+ "Unprivileged scripts cannot access Cut/Copy/Paste programatically " +
+ "for security reasons. Click OK to see a technical note at mozilla.org " +
+ "which shows you how to allow a script to access the clipboard."
+ },
+
+ dialogs: {
+ "Cancel" : "åæ¶",
+ "Insert/Modify Link" : "æå
¥/æ¹å¯«é£çµ",
+ "New window (_blank)" : "æ°çªæ·(_blank)",
+ "None (use implicit)" : "ç¡(use implicit)",
+ "OK" : "好",
+ "Other" : "å
¶ä»",
+ "Same frame (_self)" : "æ¬å¡ (_self)",
+ "Target:" : "ç®æ¨å¡:",
+ "Title (tooltip):" : "ä¸»é¡ (tooltip):",
+ "Top frame (_top)" : "ä¸å¡ (_top)",
+ "URL:" : "ç¶²å:",
+ "You must enter the URL where this link points to" : "ä½ å¿
é 輸å
¥ä½ è¦è¿ç»çç¶²å"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/cz.js
===================================================================
--- plog/trunk/js/htmlarea/lang/cz.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/cz.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,63 +1,63 @@
-// I18N constants
-
-// LANG: "cz", ENCODING: UTF-8 | ISO-8859-2
-// Author: Jiri Löw, <jirilow at jirilow.com>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "cz",
-
- tooltips: {
- bold: "TuÄnÄ",
- italic: "KurzÃva",
- underline: "PodtrženÃ",
- strikethrough: "PÅeÅ¡krtnutÃ",
- subscript: "Dolnà index",
- superscript: "Hornà index",
- justifyleft: "Zarovnat doleva",
- justifycenter: "Na stÅed",
- justifyright: "Zarovnat doprava",
- justifyfull: "Zarovnat do stran",
- orderedlist: "Seznam",
- unorderedlist: "Odrážky",
- outdent: "PÅedsadit",
- indent: "Odsadit",
- forecolor: "Barva pÃsma",
- hilitecolor: "Barva pozadÃ",
- horizontalrule: "Vodorovná Äára",
- createlink: "Vložit odkaz",
- insertimage: "Vložit obrázek",
- inserttable: "Vložit tabulku",
- htmlmode: "PÅepnout HTML",
- popupeditor: "Nové okno editoru",
- about: "O této aplikaci",
- showhelp: "NápovÄda aplikace",
- textindicator: "Zvolený styl",
- undo: "Vrátà poslednà akci",
- redo: "Opakuje poslednà akci",
- cut: "Vyjmout",
- copy: "KopÃrovat",
- paste: "Vložit"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "Zrušit"
- },
-
- msg: {
- "Path": "Cesta",
- "TEXT_MODE": "Jste v TEXTOVÃM REŽIMU. Použijte tlaÄÃtko [<>] pro pÅepnutà do WYSIWIG."
- }
-};
+// I18N constants
+
+// LANG: "cz", ENCODING: UTF-8 | ISO-8859-2
+// Author: Jiri Löw, <jirilow at jirilow.com>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "cz",
+
+ tooltips: {
+ bold: "TuÄnÄ",
+ italic: "KurzÃva",
+ underline: "PodtrženÃ",
+ strikethrough: "PÅeÅ¡krtnutÃ",
+ subscript: "Dolnà index",
+ superscript: "Hornà index",
+ justifyleft: "Zarovnat doleva",
+ justifycenter: "Na stÅed",
+ justifyright: "Zarovnat doprava",
+ justifyfull: "Zarovnat do stran",
+ orderedlist: "Seznam",
+ unorderedlist: "Odrážky",
+ outdent: "PÅedsadit",
+ indent: "Odsadit",
+ forecolor: "Barva pÃsma",
+ hilitecolor: "Barva pozadÃ",
+ horizontalrule: "Vodorovná Äára",
+ createlink: "Vložit odkaz",
+ insertimage: "Vložit obrázek",
+ inserttable: "Vložit tabulku",
+ htmlmode: "PÅepnout HTML",
+ popupeditor: "Nové okno editoru",
+ about: "O této aplikaci",
+ showhelp: "NápovÄda aplikace",
+ textindicator: "Zvolený styl",
+ undo: "Vrátà poslednà akci",
+ redo: "Opakuje poslednà akci",
+ cut: "Vyjmout",
+ copy: "KopÃrovat",
+ paste: "Vložit"
+ },
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "Zrušit"
+ },
+
+ msg: {
+ "Path": "Cesta",
+ "TEXT_MODE": "Jste v TEXTOVÃM REŽIMU. Použijte tlaÄÃtko [<>] pro pÅepnutà do WYSIWIG."
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/da.js
===================================================================
--- plog/trunk/js/htmlarea/lang/da.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/da.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,38 +1,38 @@
-// danish version for htmlArea v3.0 - Alpha Release
-// - translated by rene<rene at laerke.net>
-// term´s and licenses are equal to htmlarea!
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "da",
-
- tooltips: {
- bold: "Fed",
- italic: "Kursiv",
- underline: "Understregning",
- strikethrough: "Overstregning ",
- subscript: "Sænket skrift",
- superscript: "Hævet skrift",
- justifyleft: "Venstrejuster",
- justifycenter: "Centrer",
- justifyright: "Højrejuster",
- justifyfull: "Lige margener",
- orderedlist: "Opstilling med tal",
- unorderedlist: "Opstilling med punkttegn",
- outdent: "Formindsk indrykning",
- indent: "Forøg indrykning",
- forecolor: "Skriftfarve",
- backcolor: "Baggrundsfarve",
- horizontalrule: "Horisontal linie",
- createlink: "Indsæt hyperlink",
- insertimage: "Indsæt billede",
- inserttable: "Indsæt tabel",
- htmlmode: "HTML visning",
- popupeditor: "Vis editor i popup",
- about: "Om htmlarea",
- help: "Hjælp",
- textindicator: "Anvendt stil"
- }
-};
+// danish version for htmlArea v3.0 - Alpha Release
+// - translated by rene<rene at laerke.net>
+// term´s and licenses are equal to htmlarea!
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "da",
+
+ tooltips: {
+ bold: "Fed",
+ italic: "Kursiv",
+ underline: "Understregning",
+ strikethrough: "Overstregning ",
+ subscript: "Sænket skrift",
+ superscript: "Hævet skrift",
+ justifyleft: "Venstrejuster",
+ justifycenter: "Centrer",
+ justifyright: "Højrejuster",
+ justifyfull: "Lige margener",
+ orderedlist: "Opstilling med tal",
+ unorderedlist: "Opstilling med punkttegn",
+ outdent: "Formindsk indrykning",
+ indent: "Forøg indrykning",
+ forecolor: "Skriftfarve",
+ backcolor: "Baggrundsfarve",
+ horizontalrule: "Horisontal linie",
+ createlink: "Indsæt hyperlink",
+ insertimage: "Indsæt billede",
+ inserttable: "Indsæt tabel",
+ htmlmode: "HTML visning",
+ popupeditor: "Vis editor i popup",
+ about: "Om htmlarea",
+ help: "Hjælp",
+ textindicator: "Anvendt stil"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/de.js
===================================================================
--- plog/trunk/js/htmlarea/lang/de.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/de.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,54 +1,80 @@
-// german version for htmlArea v3.0 - Alpha Release
-// - translated by AtK<atk at chello.at>
-// term´s and licenses are equal to htmlarea!
-// translation improved by broxx<broxx at broxx.com>
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "de",
-
- tooltips: {
- bold: "Fett",
- italic: "Kursiv",
- underline: "Unterstrichen",
- strikethrough: "Durchgestrichen",
- subscript: "Hochgestellt",
- superscript: "Tiefgestellt",
- justifyleft: "Links ausrichten",
- justifycenter: "Zentrieren",
- justifyright: "Rechts ausrichten",
- justifyfull: "Blocksatz",
- orderedlist: "Nummerierung",
- unorderedlist: "Aufzaehlungszeichen",
- outdent: "Einzug verkleinern",
- indent: "Einzug vergrössern",
- forecolor: "Text Farbe",
- hilitecolor: "Hintergrund Farbe",
- horizontalrule: "Horizontale Linie",
- createlink: "Hyperlink einfuegen",
- insertimage: "Bild einfuegen",
- inserttable: "Tabelle einfuegen",
- htmlmode: "HTML Modus",
- popupeditor: "Editor im Popup öffnen",
- about: "Ueber HtmlArea",
- showhelp: "Hilfe",
- textindicator: "derzeitiger Stil",
- undo: "Rueckgaengig",
- redo: "Wiederholen",
- cut: "Ausschneiden",
- copy: "Kopieren",
- paste: "Einfuegen"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "Abbrechen"
- },
-
- msg: {
- "Path": "Pfad",
- "TEXT_MODE": "Du befindest dich im HTML Modus. Benuetze die [<>] Schaltflaeche um in den WYSIWIG-Modus zu wechseln."
- }
-};
+// I18N constants
+
+// LANG: "de", ENCODING: ISO-8859-1 for the german umlaut!
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "de",
+
+ tooltips: {
+ bold: "Fett",
+ italic: "Kursiv",
+ underline: "Unterstrichen",
+ strikethrough: "Durchgestrichen",
+ subscript: "Hochgestellt",
+ superscript: "Tiefgestellt",
+ justifyleft: "Linksbündig",
+ justifycenter: "Zentriert",
+ justifyright: "Rechtsbündig",
+ justifyfull: "Blocksatz",
+ orderedlist: "Nummerierung",
+ unorderedlist: "Aufzählungszeichen",
+ outdent: "Einzug verkleinern",
+ indent: "Einzug vergrößern",
+ forecolor: "Schriftfarbe",
+ backcolor: "Hindergrundfarbe",
+ hilitecolor: "Hintergrundfarbe",
+ horizontalrule: "Horizontale Linie",
+ inserthorizontalrule: "Horizontale Linie",
+ createlink: "Hyperlink einfügen",
+ insertimage: "Bild einfügen",
+ inserttable: "Tabelle einfügen",
+ htmlmode: "HTML Modus",
+ popupeditor: "Editor im Popup öffnen",
+ about: "Über htmlarea",
+ help: "Hilfe",
+ showhelp: "Hilfe",
+ textindicator: "Derzeitiger Stil",
+ undo: "Rückgängig",
+ redo: "Wiederholen",
+ cut: "Ausschneiden",
+ copy: "Kopieren",
+ paste: "Einfügen aus der Zwischenablage",
+ lefttoright: "Textrichtung von Links nach Rechts",
+ righttoleft: "Textrichtung von Rechts nach Links",
+ removeformat: "Formatierung entfernen"
+ },
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "Abbrechen"
+ },
+
+ msg: {
+ "Path": "Pfad",
+ "TEXT_MODE": "Sie sind im Text-Modus. Benutzen Sie den [<>] Knopf um in den visuellen Modus (WYSIWIG) zu gelangen.",
+
+ "Moz-Clipboard" :
+ "Aus Sicherheitsgründen dürfen Skripte normalerweise nicht programmtechnisch auf " +
+ "Ausschneiden/Kopieren/Einfügen zugreifen. Bitte klicken Sie OK um die technische " +
+ "Erläuterung auf mozilla.org zu öffnen, in der erklärt wird, wie einem Skript Zugriff " +
+ "gewährt werden kann."
+ },
+
+ dialogs: {
+ "OK": "OK",
+ "Cancel": "Abbrechen",
+ "Insert/Modify Link": "Verknüpfung hinzufügen/ändern",
+ "None (use implicit)": "k.A. (implizit)",
+ "New window (_blank)": "Neues Fenster (_blank)",
+ "Same frame (_self)": "Selber Rahmen (_self)",
+ "Top frame (_top)": "Oberster Rahmen (_top)",
+ "Other": "Anderes",
+ "Target:": "Ziel:",
+ "Title (tooltip):": "Titel (Tooltip):",
+ "URL:": "URL:",
+ "You must enter the URL where this link points to": "Sie müssen eine Ziel-URL angeben für die Verknüpfung angeben"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/ee.js
===================================================================
--- plog/trunk/js/htmlarea/lang/ee.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/ee.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,63 +1,63 @@
-// I18N constants
-
-// LANG: "ee", ENCODING: UTF-8 | ISO-8859-1
-// Author: Martin Raie, <albertvill at hot.ee>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "ee",
-
- tooltips: {
- bold: "Paks",
- italic: "Kursiiv",
- underline: "Allakriipsutatud",
- strikethrough: "Läbikriipsutatud",
- subscript: "Allindeks",
- superscript: "Ülaindeks",
- justifyleft: "Joonda vasakule",
- justifycenter: "Joonda keskele",
- justifyright: "Joonda paremale",
- justifyfull: "Rööpjoonda",
- insertorderedlist: "Nummerdus",
- insertunorderedlist: "Täpploend",
- outdent: "Vähenda taanet",
- indent: "Suurenda taanet",
- forecolor: "Fondi värv",
- hilitecolor: "Tausta värv",
- inserthorizontalrule: "Horisontaaljoon",
- createlink: "Lisa viit",
- insertimage: "Lisa pilt",
- inserttable: "Lisa tabel",
- htmlmode: "HTML/tavaline vaade",
- popupeditor: "Suurenda toimeti aken",
- about: "Teave toimeti kohta",
- showhelp: "Spikker",
- textindicator: "Kirjastiil",
- undo: "Võta tagasi",
- redo: "Tee uuesti",
- cut: "Lõika",
- copy: "Kopeeri",
- paste: "Kleebi"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "Loobu"
- },
-
- msg: {
- "Path": "Path",
- "TEXT_MODE": "Sa oled tekstireziimis. Kasuta nuppu [<>] lülitamaks tagasi WYSIWIG reziimi."
- }
-};
+// I18N constants
+
+// LANG: "ee", ENCODING: UTF-8 | ISO-8859-1
+// Author: Martin Raie, <albertvill at hot.ee>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "ee",
+
+ tooltips: {
+ bold: "Paks",
+ italic: "Kursiiv",
+ underline: "Allakriipsutatud",
+ strikethrough: "Läbikriipsutatud",
+ subscript: "Allindeks",
+ superscript: "Ülaindeks",
+ justifyleft: "Joonda vasakule",
+ justifycenter: "Joonda keskele",
+ justifyright: "Joonda paremale",
+ justifyfull: "Rööpjoonda",
+ orderedlist: "Nummerdus",
+ unorderedlist: "Täpploend",
+ outdent: "Vähenda taanet",
+ indent: "Suurenda taanet",
+ forecolor: "Fondi värv",
+ hilitecolor: "Tausta värv",
+ inserthorizontalrule: "Horisontaaljoon",
+ createlink: "Lisa viit",
+ insertimage: "Lisa pilt",
+ inserttable: "Lisa tabel",
+ htmlmode: "HTML/tavaline vaade",
+ popupeditor: "Suurenda toimeti aken",
+ about: "Teave toimeti kohta",
+ showhelp: "Spikker",
+ textindicator: "Kirjastiil",
+ undo: "Võta tagasi",
+ redo: "Tee uuesti",
+ cut: "Lõika",
+ copy: "Kopeeri",
+ paste: "Kleebi"
+ },
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "Loobu"
+ },
+
+ msg: {
+ "Path": "Path",
+ "TEXT_MODE": "Sa oled tekstireziimis. Kasuta nuppu [<>] lülitamaks tagasi WYSIWIG reziimi."
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/el.js
===================================================================
--- plog/trunk/js/htmlarea/lang/el.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/el.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,75 +1,75 @@
-// I18N constants
-
-// LANG: "el", ENCODING: UTF-8 | ISO-8859-7
-// Author: Dimitris Glezos, dimitris at glezos.com
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "el",
-
- tooltips: {
- bold: "ÎνÏονα",
- italic: "Πλάγια",
- underline: "Î¥ÏογÏαμμιÏμÎνα",
- strikethrough: "ÎιαγÏαμμÎνα",
- subscript: "ÎείκÏηÏ",
- superscript: "ÎείκÏηÏ",
- justifyleft: "ΣÏοίÏιÏη ÎÏιÏÏεÏά",
- justifycenter: "ΣÏοίÏιÏη ÎÎνÏÏο",
- justifyright: "ΣÏοίÏιÏη Îεξιά",
- justifyfull: "ΠλήÏÎ·Ï Î£ÏοίÏιÏη",
- orderedlist: "ÎÏίθμηÏη",
- unorderedlist: "ÎοÏ
κκίδεÏ",
- outdent: "ÎείÏÏη ÎÏοÏήÏ",
- indent: "ÎÏξηÏη ÎÏοÏήÏ",
- forecolor: "ΧÏÏμα ÎÏαμμαÏοÏειÏάÏ",
- hilitecolor: "ΧÏÏμα ΦÏνÏοÏ
",
- horizontalrule: "ÎÏιζÏνÏια ÎÏαμμή",
- createlink: "ÎιÏαγÏγή ΣÏ
νδÎÏμοÏ
",
- insertimage: "ÎιÏαγÏγή/ΤÏοÏοÏοίηÏη ÎικÏναÏ",
- inserttable: "ÎιÏαγÏγή Πίνακα",
- htmlmode: "Îναλλαγή Ïε/αÏÏ HTML",
- popupeditor: "ÎεγÎνθÏ
νÏη εÏεξεÏγαÏÏή",
- about: "ΠληÏοÏοÏίεÏ",
- showhelp: "Îοήθεια",
- textindicator: "ΠαÏÏν ÏÏÏ
λ",
- undo: "ÎναίÏεÏη ÏελεÏ
ÏÎ±Î¯Î±Ï ÎµÎ½ÎÏγειαÏ",
- redo: "ÎÏαναÏοÏά αÏÏ Î±Î½Î±Î¯ÏεÏη",
- cut: "ÎÏοκοÏή",
- copy: "ÎνÏιγÏαÏή",
- paste: "ÎÏικÏλληÏη",
- lefttoright: "ÎαÏεÏθÏ
νÏη αÏιÏÏεÏά ÏÏÎ¿Ï Î´ÎµÎ¾Î¹Î¬",
- righttoleft: "ÎαÏεÏθÏ
νÏη αÏÏ Î´ÎµÎ¾Î¹Î¬ ÏÏÎ¿Ï Ïα αÏιÏÏεÏά"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "ÎκÏÏÏÏη"
- },
-
- msg: {
- "Path": "ÎιαδÏομή",
- "TEXT_MODE": "ÎίÏÏε Ïε TEXT MODE. ΧÏηÏιμοÏοιήÏÏε Ïο κοÏ
μÏί [<>] για να εÏανÎÏθεÏε ÏÏο WYSIWIG.",
-
- "IE-sucks-full-screen": "ΠκαÏάÏÏαÏη ÏλήÏÎ·Ï Î¿Î¸ÏÎ½Î·Ï ÎÏει ÏÏοβλήμαÏα με Ïον Internet Explorer, " +
- "λÏÎ³Ï ÏÏαλμάÏÏν ÏÏον ίδιο Ïον browser. Îν Ïο ÏÏÏÏημα ÏÎ±Ï ÎµÎ¯Î½Î±Î¹ Windows 9x " +
- "μÏοÏεί και να ÏÏειαÏÏείÏε reboot. Îν είÏÏε ÏίγοÏ
Ïοι, ÏαÏήÏÏε ÎÎ."
- },
-
- dialogs: {
- "Cancel" : "ÎκÏÏÏÏη",
- "Insert/Modify Link" : "ÎιÏαγÏγή/ΤÏοÏοÏοίηÏη ÏÏνδεÏμοÏ
",
- "New window (_blank)" : "ÎÎο ÏαÏάθÏ
Ïο (_blank)",
- "None (use implicit)" : "ÎανÎνα (ÏÏήÏη αÏÏλÏ
ÏοÏ
)",
- "OK" : "ÎνÏάξει",
- "Other" : "Îλλο",
- "Same frame (_self)" : "Îδιο frame (_self)",
- "Target:" : "Target:",
- "Title (tooltip):" : "ΤίÏÎ»Î¿Ï (tooltip):",
- "Top frame (_top)" : "Î Î¬Î½Ï frame (_top)",
- "URL:" : "URL:",
- "You must enter the URL where this link points to" : "Î ÏÎÏει να ειÏάγεÏε Ïο URL ÏοÏ
οδηγεί αÏ
ÏÏÏ Î¿ ÏÏνδεÏμοÏ"
- }
-};
+// I18N constants
+
+// LANG: "el", ENCODING: UTF-8 | ISO-8859-7
+// Author: Dimitris Glezos, dimitris at glezos.com
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "el",
+
+ tooltips: {
+ bold: "ÎνÏονα",
+ italic: "Πλάγια",
+ underline: "Î¥ÏογÏαμμιÏμÎνα",
+ strikethrough: "ÎιαγÏαμμÎνα",
+ subscript: "ÎείκÏηÏ",
+ superscript: "ÎείκÏηÏ",
+ justifyleft: "ΣÏοίÏιÏη ÎÏιÏÏεÏά",
+ justifycenter: "ΣÏοίÏιÏη ÎÎνÏÏο",
+ justifyright: "ΣÏοίÏιÏη Îεξιά",
+ justifyfull: "ΠλήÏÎ·Ï Î£ÏοίÏιÏη",
+ orderedlist: "ÎÏίθμηÏη",
+ unorderedlist: "ÎοÏ
κκίδεÏ",
+ outdent: "ÎείÏÏη ÎÏοÏήÏ",
+ indent: "ÎÏξηÏη ÎÏοÏήÏ",
+ forecolor: "ΧÏÏμα ÎÏαμμαÏοÏειÏάÏ",
+ hilitecolor: "ΧÏÏμα ΦÏνÏοÏ
",
+ horizontalrule: "ÎÏιζÏνÏια ÎÏαμμή",
+ createlink: "ÎιÏαγÏγή ΣÏ
νδÎÏμοÏ
",
+ insertimage: "ÎιÏαγÏγή/ΤÏοÏοÏοίηÏη ÎικÏναÏ",
+ inserttable: "ÎιÏαγÏγή Πίνακα",
+ htmlmode: "Îναλλαγή Ïε/αÏÏ HTML",
+ popupeditor: "ÎεγÎνθÏ
νÏη εÏεξεÏγαÏÏή",
+ about: "ΠληÏοÏοÏίεÏ",
+ showhelp: "Îοήθεια",
+ textindicator: "ΠαÏÏν ÏÏÏ
λ",
+ undo: "ÎναίÏεÏη ÏελεÏ
ÏÎ±Î¯Î±Ï ÎµÎ½ÎÏγειαÏ",
+ redo: "ÎÏαναÏοÏά αÏÏ Î±Î½Î±Î¯ÏεÏη",
+ cut: "ÎÏοκοÏή",
+ copy: "ÎνÏιγÏαÏή",
+ paste: "ÎÏικÏλληÏη",
+ lefttoright: "ÎαÏεÏθÏ
νÏη αÏιÏÏεÏά ÏÏÎ¿Ï Î´ÎµÎ¾Î¹Î¬",
+ righttoleft: "ÎαÏεÏθÏ
νÏη αÏÏ Î´ÎµÎ¾Î¹Î¬ ÏÏÎ¿Ï Ïα αÏιÏÏεÏά"
+ },
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "ÎκÏÏÏÏη"
+ },
+
+ msg: {
+ "Path": "ÎιαδÏομή",
+ "TEXT_MODE": "ÎίÏÏε Ïε TEXT MODE. ΧÏηÏιμοÏοιήÏÏε Ïο κοÏ
μÏί [<>] για να εÏανÎÏθεÏε ÏÏο WYSIWIG.",
+
+ "IE-sucks-full-screen": "ΠκαÏάÏÏαÏη ÏλήÏÎ·Ï Î¿Î¸ÏÎ½Î·Ï ÎÏει ÏÏοβλήμαÏα με Ïον Internet Explorer, " +
+ "λÏÎ³Ï ÏÏαλμάÏÏν ÏÏον ίδιο Ïον browser. Îν Ïο ÏÏÏÏημα ÏÎ±Ï ÎµÎ¯Î½Î±Î¹ Windows 9x " +
+ "μÏοÏεί και να ÏÏειαÏÏείÏε reboot. Îν είÏÏε ÏίγοÏ
Ïοι, ÏαÏήÏÏε ÎÎ."
+ },
+
+ dialogs: {
+ "Cancel" : "ÎκÏÏÏÏη",
+ "Insert/Modify Link" : "ÎιÏαγÏγή/ΤÏοÏοÏοίηÏη ÏÏνδεÏμοÏ
",
+ "New window (_blank)" : "ÎÎο ÏαÏάθÏ
Ïο (_blank)",
+ "None (use implicit)" : "ÎανÎνα (ÏÏήÏη αÏÏλÏ
ÏοÏ
)",
+ "OK" : "ÎνÏάξει",
+ "Other" : "Îλλο",
+ "Same frame (_self)" : "Îδιο frame (_self)",
+ "Target:" : "Target:",
+ "Title (tooltip):" : "ΤίÏÎ»Î¿Ï (tooltip):",
+ "Top frame (_top)" : "Î Î¬Î½Ï frame (_top)",
+ "URL:" : "URL:",
+ "You must enter the URL where this link points to" : "Î ÏÎÏει να ειÏάγεÏε Ïο URL ÏοÏ
οδηγεί αÏ
ÏÏÏ Î¿ ÏÏνδεÏμοÏ"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/en.js
===================================================================
--- plog/trunk/js/htmlarea/lang/en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,88 +1,147 @@
-// I18N constants
-
-// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
-// Author: Mihai Bazon, http://dynarch.com/mishoo
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "en",
-
- tooltips: {
- bold: "Bold",
- italic: "Italic",
- underline: "Underline",
- strikethrough: "Strikethrough",
- subscript: "Subscript",
- superscript: "Superscript",
- justifyleft: "Justify Left",
- justifycenter: "Justify Center",
- justifyright: "Justify Right",
- justifyfull: "Justify Full",
- orderedlist: "Ordered List",
- unorderedlist: "Bulleted List",
- outdent: "Decrease Indent",
- indent: "Increase Indent",
- forecolor: "Font Color",
- hilitecolor: "Background Color",
- horizontalrule: "Horizontal Rule",
- createlink: "Insert Web Link",
- insertimage: "Insert/Modify Image",
- inserttable: "Insert Table",
- htmlmode: "Toggle HTML Source",
- popupeditor: "Enlarge Editor",
- about: "About this editor",
- showhelp: "Help using editor",
- textindicator: "Current style",
- undo: "Undoes your last action",
- redo: "Redoes your last action",
- cut: "Cut selection",
- copy: "Copy selection",
- paste: "Paste from clipboard",
- lefttoright: "Direction left to right",
- righttoleft: "Direction right to left"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "Cancel"
- },
-
- msg: {
- "Path": "Path",
- "TEXT_MODE": "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.",
-
- "IE-sucks-full-screen" :
- // translate here
- "The full screen mode is known to cause problems with Internet Explorer, " +
- "due to browser bugs that we weren't able to workaround. You might experience garbage " +
- "display, lack of editor functions and/or random browser crashes. If your system is Windows 9x " +
- "it's very likely that you'll get a 'General Protection Fault' and need to reboot.\n\n" +
- "You have been warned. Please press OK if you still want to try the full screen editor."
- },
-
- dialogs: {
- "Cancel" : "Cancel",
- "Insert/Modify Link" : "Insert/Modify Link",
- "New window (_blank)" : "New window (_blank)",
- "None (use implicit)" : "None (use implicit)",
- "OK" : "OK",
- "Other" : "Other",
- "Same frame (_self)" : "Same frame (_self)",
- "Target:" : "Target:",
- "Title (tooltip):" : "Title (tooltip):",
- "Top frame (_top)" : "Top frame (_top)",
- "URL:" : "URL:",
- "You must enter the URL where this link points to" : "You must enter the URL where this link points to"
- }
-};
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "en",
+
+ tooltips: {
+ bold: "Bold",
+ italic: "Italic",
+ underline: "Underline",
+ strikethrough: "Strikethrough",
+ subscript: "Subscript",
+ superscript: "Superscript",
+ justifyleft: "Justify Left",
+ justifycenter: "Justify Center",
+ justifyright: "Justify Right",
+ justifyfull: "Justify Full",
+ orderedlist: "Ordered List",
+ unorderedlist: "Bulleted List",
+ outdent: "Decrease Indent",
+ indent: "Increase Indent",
+ forecolor: "Font Color",
+ hilitecolor: "Background Color",
+ horizontalrule: "Horizontal Rule",
+ createlink: "Insert Web Link",
+ insertimage: "Insert/Modify Image",
+ inserttable: "Insert Table",
+ htmlmode: "Toggle HTML Source",
+ popupeditor: "Enlarge Editor",
+ about: "About this editor",
+ showhelp: "Help using editor",
+ textindicator: "Current style",
+ undo: "Undoes your last action",
+ redo: "Redoes your last action",
+ cut: "Cut selection",
+ copy: "Copy selection",
+ paste: "Paste from clipboard",
+ lefttoright: "Direction left to right",
+ righttoleft: "Direction right to left",
+ removeformat: "Remove formatting",
+ print: "Print document",
+ killword: "Clear MSOffice tags"
+ },
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "Cancel"
+ },
+
+ msg: {
+ "Path": "Path",
+ "TEXT_MODE": "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.",
+
+ "IE-sucks-full-screen" :
+ // translate here
+ "The full screen mode is known to cause problems with Internet Explorer, " +
+ "due to browser bugs that we weren't able to workaround. You might experience garbage " +
+ "display, lack of editor functions and/or random browser crashes. If your system is Windows 9x " +
+ "it's very likely that you'll get a 'General Protection Fault' and need to reboot.\n\n" +
+ "You have been warned. Please press OK if you still want to try the full screen editor.",
+
+ "Moz-Clipboard" :
+ "Unprivileged scripts cannot access Cut/Copy/Paste programatically " +
+ "for security reasons. Click OK to see a technical note at mozilla.org " +
+ "which shows you how to allow a script to access the clipboard."
+ },
+
+ dialogs: {
+ // Common
+ "OK" : "OK",
+ "Cancel" : "Cancel",
+
+ "Alignment:" : "Alignment:",
+ "Not set" : "Not set",
+ "Left" : "Left",
+ "Right" : "Right",
+ "Texttop" : "Texttop",
+ "Absmiddle" : "Absmiddle",
+ "Baseline" : "Baseline",
+ "Absbottom" : "Absbottom",
+ "Bottom" : "Bottom",
+ "Middle" : "Middle",
+ "Top" : "Top",
+
+ "Layout" : "Layout",
+ "Spacing" : "Spacing",
+ "Horizontal:" : "Horizontal:",
+ "Horizontal padding" : "Horizontal padding",
+ "Vertical:" : "Vertical:",
+ "Vertical padding" : "Vertical padding",
+ "Border thickness:" : "Border thickness:",
+ "Leave empty for no border" : "Leave empty for no border",
+
+ // Insert Link
+ "Insert/Modify Link" : "Insert/Modify Link",
+ "None (use implicit)" : "None (use implicit)",
+ "New window (_blank)" : "New window (_blank)",
+ "Same frame (_self)" : "Same frame (_self)",
+ "Top frame (_top)" : "Top frame (_top)",
+ "Other" : "Other",
+ "Target:" : "Target:",
+ "Title (tooltip):" : "Title (tooltip):",
+ "URL:" : "URL:",
+ "You must enter the URL where this link points to" : "You must enter the URL where this link points to",
+ // Insert Table
+ "Insert Table" : "Insert Table",
+ "Rows:" : "Rows:",
+ "Number of rows" : "Number of rows",
+ "Cols:" : "Cols:",
+ "Number of columns" : "Number of columns",
+ "Width:" : "Width:",
+ "Width of the table" : "Width of the table",
+ "Percent" : "Percent",
+ "Pixels" : "Pixels",
+ "Em" : "Em",
+ "Width unit" : "Width unit",
+ "Positioning of this table" : "Positioning of this table",
+ "Cell spacing:" : "Cell spacing:",
+ "Space between adjacent cells" : "Space between adjacent cells",
+ "Cell padding:" : "Cell padding:",
+ "Space between content and border in cell" : "Space between content and border in cell",
+ // Insert Image
+ "Insert Image" : "Insert Image",
+ "Image URL:" : "Image URL:",
+ "Enter the image URL here" : "Enter the image URL here",
+ "Preview" : "Preview",
+ "Preview the image in a new window" : "Preview the image in a new window",
+ "Alternate text:" : "Alternate text:",
+ "For browsers that don't support images" : "For browsers that don't support images",
+ "Positioning of this image" : "Positioning of this image",
+ "Image Preview:" : "Image Preview:"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/es.js
===================================================================
--- plog/trunk/js/htmlarea/lang/es.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/es.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,51 +1,51 @@
-// I18N constants
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "es",
-
- tooltips: {
- bold: "Negrita",
- italic: "Cursiva",
- underline: "Subrayado",
- strikethrough: "Tachado",
- subscript: "Subíndice",
- superscript: "Superíndice",
- justifyleft: "Alinear a la Izquierda",
- justifycenter: "Centrar",
- justifyright: "Alinear a la Derecha",
- justifyfull: "Justificar",
- insertorderedlist: "Lista Ordenada",
- insertunorderedlist: "Lista No Ordenada",
- outdent: "Aumentar Sangría",
- indent: "Disminuir Sangría",
- forecolor: "Color del Texto",
- hilitecolor: "Color del Fondo",
- inserthorizontalrule: "Línea Horizontal",
- createlink: "Insertar Enlace",
- insertimage: "Insertar Imagen",
- inserttable: "Insertar Tabla",
- htmlmode: "Ver Documento en HTML",
- popupeditor: "Ampliar Editor",
- about: "Acerca del Editor",
- showhelp: "Ayuda",
- textindicator: "Estilo Actual",
- undo: "Deshacer",
- redo: "Rehacer",
- cut: "Cortar selección",
- copy: "Copiar selección",
- paste: "Pegar desde el portapapeles"
- },
-
- buttons: {
- "ok": "Aceptar",
- "cancel": "Cancelar"
- },
-
- msg: {
- "Path": "Ruta",
- "TEXT_MODE": "Esta en modo TEXTO. Use el boton [<>] para cambiar a WYSIWIG",
- }
-};
+// I18N constants
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "es",
+
+ tooltips: {
+ bold: "Negrita",
+ italic: "Cursiva",
+ underline: "Subrayado",
+ strikethrough: "Tachado",
+ subscript: "Subíndice",
+ superscript: "Superíndice",
+ justifyleft: "Alinear a la Izquierda",
+ justifycenter: "Centrar",
+ justifyright: "Alinear a la Derecha",
+ justifyfull: "Justificar",
+ orderedlist: "Lista Ordenada",
+ unorderedlist: "Lista No Ordenada",
+ outdent: "Aumentar Sangría",
+ indent: "Disminuir Sangría",
+ forecolor: "Color del Texto",
+ hilitecolor: "Color del Fondo",
+ inserthorizontalrule: "Línea Horizontal",
+ createlink: "Insertar Enlace",
+ insertimage: "Insertar Imagen",
+ inserttable: "Insertar Tabla",
+ htmlmode: "Ver Documento en HTML",
+ popupeditor: "Ampliar Editor",
+ about: "Acerca del Editor",
+ showhelp: "Ayuda",
+ textindicator: "Estilo Actual",
+ undo: "Deshacer",
+ redo: "Rehacer",
+ cut: "Cortar selección",
+ copy: "Copiar selección",
+ paste: "Pegar desde el portapapeles"
+ },
+
+ buttons: {
+ "ok": "Aceptar",
+ "cancel": "Cancelar"
+ },
+
+ msg: {
+ "Path": "Ruta",
+ "TEXT_MODE": "Esta en modo TEXTO. Use el boton [<>] para cambiar a WYSIWIG",
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/fi.js
===================================================================
--- plog/trunk/js/htmlarea/lang/fi.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/fi.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,46 +1,46 @@
-// I18N constants
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "en",
-
- tooltips: {
- bold: "Lihavoitu",
- italic: "Kursivoitu",
- underline: "Alleviivattu",
- strikethrough: "Yliviivattu",
- subscript: "Alaindeksi",
- superscript: "Yläindeksi",
- justifyleft: "Tasaa vasemmat reunat",
- justifycenter: "Keskitä",
- justifyright: "Tasaa oikeat reunat",
- justifyfull: "Tasaa molemmat reunat",
- insertorderedlist: "Numerointi",
- insertunorderedlist: "Luettelomerkit",
- outdent: "Lisää sisennystä",
- indent: "Pienennä sisennystä",
- forecolor: "Fontin väri",
- hilitecolor: "Taustaväri",
- inserthorizontalrule: "Vaakaviiva",
- createlink: "Lisää Linkki",
- insertimage: "Lisää Kuva",
- inserttable: "Lisää Taulu",
- htmlmode: "HTML Lähdekoodi vs WYSIWYG",
- popupeditor: "Suurenna Editori",
- about: "Tietoja Editorista",
- showhelp: "Näytä Ohje",
- textindicator: "Nykyinen tyyli",
- undo: "Peruuta viimeinen toiminto",
- redo: "Palauta viimeinen toiminto",
- cut: "Leikkaa maalattu",
- copy: "Kopioi maalattu",
- paste: "Liitä leikepyödältä"
- },
-
- buttons: {
- "ok": "Hyväksy",
- "cancel": "Peruuta"
- }
-};
+// I18N constants
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "en",
+
+ tooltips: {
+ bold: "Lihavoitu",
+ italic: "Kursivoitu",
+ underline: "Alleviivattu",
+ strikethrough: "Yliviivattu",
+ subscript: "Alaindeksi",
+ superscript: "Yläindeksi",
+ justifyleft: "Tasaa vasemmat reunat",
+ justifycenter: "Keskitä",
+ justifyright: "Tasaa oikeat reunat",
+ justifyfull: "Tasaa molemmat reunat",
+ orderedlist: "Numerointi",
+ unorderedlist: "Luettelomerkit",
+ outdent: "Lisää sisennystä",
+ indent: "Pienennä sisennystä",
+ forecolor: "Fontin väri",
+ hilitecolor: "Taustaväri",
+ inserthorizontalrule: "Vaakaviiva",
+ createlink: "Lisää Linkki",
+ insertimage: "Lisää Kuva",
+ inserttable: "Lisää Taulu",
+ htmlmode: "HTML Lähdekoodi vs WYSIWYG",
+ popupeditor: "Suurenna Editori",
+ about: "Tietoja Editorista",
+ showhelp: "Näytä Ohje",
+ textindicator: "Nykyinen tyyli",
+ undo: "Peruuta viimeinen toiminto",
+ redo: "Palauta viimeinen toiminto",
+ cut: "Leikkaa maalattu",
+ copy: "Kopioi maalattu",
+ paste: "Liitä leikepyödältä"
+ },
+
+ buttons: {
+ "ok": "Hyväksy",
+ "cancel": "Peruuta"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/fr.js
===================================================================
--- plog/trunk/js/htmlarea/lang/fr.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/fr.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,61 +1,97 @@
-// I18N constants
-// Author: Jonathan Ernst, <Jonathan.Ernst at NetOxygen.ch>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "fr",
-
- tooltips: {
- bold: "Gras",
- italic: "Italique",
- underline: "Souligné",
- strikethrough: "Barré",
- subscript: "Subscript",
- superscript: "Superscript",
- justifyleft: "Aligné à gauche",
- justifycenter: "Centré",
- justifyright: "Aligné à droite",
- justifyfull: "Justifié",
- orderedlist: "Numérotation",
- unorderedlist: "Puces",
- outdent: "Augmenter le retrait",
- indent: "Diminuer le retrait",
- forecolor: "Couleur du texte",
- hilitecolor: "Couleur du fond",
- horizontalrule: "Ligne horizontale",
- createlink: "Insérer un lien",
- insertimage: "Insérer une image",
- inserttable: "Insérer un tableau",
- htmlmode: "Passer au code source HTML",
- popupeditor: "Agrandir l'éditeur",
- about: "A propos de cet éditeur",
- showhelp: "Aide sur l'éditeur",
- textindicator: "Style courant",
- undo: "Annule la dernière action",
- redo: "Refait la dernière action",
- cut: "Coupe la sélection",
- copy: "Copie la sélection",
- paste: "Colle depuis le presse papiers"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "Annuler"
- },
-
- msg: {
- "Path": "Chemin",
- "TEXT_MODE": "Vous êtes en mode texte. Utilisez le bouton [<>] pour revenir au mode WYSIWIG."
- }
-};
+// I18N constants
+
+// LANG: "fr", ENCODING: UTF-8 | ISO-8859-1
+// Author: Simon Richard, s.rich at sympatico.ca
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+// All technical terms used in this document are the ones approved
+// by the Office québécois de la langue française.
+// Tous les termes techniques utilisés dans ce document sont ceux
+// approuvés par l'Office québécois de la langue française.
+// http://www.oqlf.gouv.qc.ca/
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "fr",
+
+ tooltips: {
+ bold: "Gras",
+ italic: "Italique",
+ underline: "Souligné",
+ strikethrough: "Barré",
+ subscript: "Indice",
+ superscript: "Exposant",
+ justifyleft: "Aligné à gauche",
+ justifycenter: "Centré",
+ justifyright: "Aligné à droite",
+ justifyfull: "Justifier",
+ orderedlist: "Numérotation",
+ unorderedlist: "Puces",
+ outdent: "Diminuer le retrait",
+ indent: "Augmenter le retrait",
+ forecolor: "Couleur de police",
+ hilitecolor: "Surlignage",
+ horizontalrule: "Ligne horizontale",
+ createlink: "Insérer un hyperlien",
+ insertimage: "Insérer/Modifier une image",
+ inserttable: "Insérer un tableau",
+ htmlmode: "Passer au code source",
+ popupeditor: "Agrandir l'éditeur",
+ about: "À propos de cet éditeur",
+ showhelp: "Aide sur l'éditeur",
+ textindicator: "Style courant",
+ undo: "Annuler la dernière action",
+ redo: "Répéter la dernière action",
+ cut: "Couper la sélection",
+ copy: "Copier la sélection",
+ paste: "Coller depuis le presse-papier",
+ lefttoright: "Direction de gauche à droite",
+ righttoleft: "Direction de droite à gauche"
+ },
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "Annuler"
+ },
+
+ msg: {
+ "Path": "Chemin",
+ "TEXT_MODE": "Vous êtes en MODE TEXTE. Appuyez sur le bouton [<>] pour retourner au mode tel-tel.",
+
+ "IE-sucks-full-screen" :
+ // translate here
+ "Le mode plein écran peut causer des problèmes sous Internet Explorer, " +
+ "ceci dû à des bogues du navigateur qui ont été impossible à contourner. " +
+ "Les différents symptômes peuvent être un affichage déficient, le manque de " +
+ "fonctions dans l'éditeur et/ou pannes aléatoires du navigateur. Si votre " +
+ "système est Windows 9x, il est possible que vous subissiez une erreur de type " +
+ "«General Protection Fault» et que vous ayez à redémarrer votre ordinateur." +
+ "\n\nConsidérez-vous comme ayant été avisé. Appuyez sur OK si vous désirez tout " +
+ "de même essayer le mode plein écran de l'éditeur."
+ },
+
+ dialogs: {
+ "Cancel" : "Annuler",
+ "Insert/Modify Link" : "Insérer/Modifier Lien",
+ "New window (_blank)" : "Nouvelle fenêtre (_blank)",
+ "None (use implicit)" : "Aucun (par défaut)",
+ "OK" : "OK",
+ "Other" : "Autre",
+ "Same frame (_self)" : "Même cadre (_self)",
+ "Target:" : "Cible:",
+ "Title (tooltip):" : "Titre (infobulle):",
+ "Top frame (_top)" : "Cadre du haut (_top)",
+ "URL:" : "Adresse Web:",
+ "You must enter the URL where this link points to" : "Vous devez entrer l'adresse Web du lien"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/gb.js
===================================================================
--- plog/trunk/js/htmlarea/lang/gb.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/gb.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,36 +1,36 @@
-// I18N constants -- Chinese GB
-// by Dave Lo -- dlo at interactivetools.com
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "gb",
-
- tooltips: {
- bold: "´ÖÌå",
- italic: "бÌå",
- underline: "µ×Ïß",
- strikethrough: "ɾ³ýÏß",
- subscript: "챐",
- superscript: "Éϱê",
- justifyleft: "λÖÿ¿×ó",
- justifycenter: "λÖþÓÖÐ",
- justifyright: "λÖÿ¿ÓÒ",
- justifyfull: "λÖÃ×óÓÒÆ½µÈ",
- orderedlist: "˳ÐòÇåµ¥",
- unorderedlist: "ÎÞÐòÇåµ¥",
- outdent: "¼õСÐÐǰ¿Õ°×",
- indent: "¼Ó¿íÐÐǰ¿Õ°×",
- forecolor: "ÎÄ×ÖÑÕÉ«",
- backcolor: "±³¾°ÑÕÉ«",
- horizontalrule: "ˮƽÏß",
- createlink: "²åÈëÁ¬½á",
- insertimage: "²åÈëͼÐÎ",
- inserttable: "²åÈë±í¸ñ",
- htmlmode: "Çл»HTMLÔʼÂë",
- popupeditor: "·Å´ó",
- about: "¹Øì¶ HTMLArea",
- help: "˵Ã÷",
- textindicator: "×ÖÌåÀý×Ó"
- }
-};
+// I18N constants -- Chinese GB
+// by Dave Lo -- dlo at interactivetools.com
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "gb",
+
+ tooltips: {
+ bold: "´ÖÌå",
+ italic: "бÌå",
+ underline: "µ×Ïß",
+ strikethrough: "ɾ³ýÏß",
+ subscript: "챐",
+ superscript: "Éϱê",
+ justifyleft: "λÖÿ¿×ó",
+ justifycenter: "λÖþÓÖÐ",
+ justifyright: "λÖÿ¿ÓÒ",
+ justifyfull: "λÖÃ×óÓÒÆ½µÈ",
+ orderedlist: "˳ÐòÇåµ¥",
+ unorderedlist: "ÎÞÐòÇåµ¥",
+ outdent: "¼õСÐÐǰ¿Õ°×",
+ indent: "¼Ó¿íÐÐǰ¿Õ°×",
+ forecolor: "ÎÄ×ÖÑÕÉ«",
+ backcolor: "±³¾°ÑÕÉ«",
+ horizontalrule: "ˮƽÏß",
+ createlink: "²åÈëÁ¬½á",
+ insertimage: "²åÈëͼÐÎ",
+ inserttable: "²åÈë±í¸ñ",
+ htmlmode: "Çл»HTMLÔʼÂë",
+ popupeditor: "·Å´ó",
+ about: "¹Øì¶ HTMLArea",
+ help: "˵Ã÷",
+ textindicator: "×ÖÌåÀý×Ó"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/he.js
===================================================================
--- plog/trunk/js/htmlarea/lang/he.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/he.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,63 +1,89 @@
-// I18N constants
-
-// LANG: "he", ENCODING: UTF-8
-// Author: Liron Newman, <plastish at ultinet.org>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "he",
-
- tooltips: {
- bold: "××××ש",
- italic: "× ×××",
- underline: "×§× ×ª×ת×",
- strikethrough: "×§× ××צע",
- subscript: "××ª× ×¢×××",
- superscript: "××ª× ×ª×ת×",
- justifyleft: " ×ש×ר ×ש×××",
- justifycenter: "×ש×ר ××ר××",
- justifyright: "×ש×ר ×××××",
- justifyfull: "××ש×ר ×ש××¨× ××××",
- orderedlist: "רש××× ×××ספרת",
- unorderedlist: "רש××× ×× ×××ספרת",
- outdent: "××§×× ×× ×ס×",
- indent: "×××× ×× ×ס×",
- forecolor: "צ××¢ ××פ×",
- hilitecolor: "צ××¢ רקע",
- horizontalrule: "×§× ×× ××",
- createlink: "××× ×¡ ××פר-×§×ש×ר",
- insertimage: "××× ×¡ ת××× ×",
- inserttable: "××× ×¡ ××××",
- htmlmode: "×©× × ××¦× ×§×× HTML",
- popupeditor: "×××× ×ת ××¢×ר×",
- about: "××××ת ×¢××¨× ××",
- showhelp: "×¢××¨× ×ש×××ש ××¢×ר×",
- textindicator: "ס×× ×× × ××××",
- undo: "×××× ×ת פע×××ª× ×××ר×× ×",
- redo: "××צע ×××ש ×ת ×פע××× ×××ר×× × ×©××××ת",
- cut: "×××ר ×××ר×",
- copy: "×עתק ×××ר×",
- paste: "××××§ ×××××"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "×××××"
- },
-
- msg: {
- "Path": "× ×ª×× ×¢×צ××",
- "TEXT_MODE": "××ª× ×××¦× ××§×¡× × ×§× (×§××). ×שת×ש ××פת×ר [<>] ××× ××××ר ×××¦× WYSIWYG (תצ××ת ×¢×צ××)."
- }
-};
+// I18N constants
+
+// LANG: "he", ENCODING: UTF-8
+// Author: Liron Newman, http://www.eesh.net, <plastish at ultinet dot org>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "he",
+
+ tooltips: {
+ bold: "××××ש",
+ italic: "× ×××",
+ underline: "×§× ×ª×ת×",
+ strikethrough: "×§× ××צע",
+ subscript: "××ª× ×¢×××",
+ superscript: "××ª× ×ª×ת×",
+ justifyleft: " ×ש×ר ×ש×××",
+ justifycenter: "×ש×ר ××ר××",
+ justifyright: "×ש×ר ×××××",
+ justifyfull: "×ש×ר ×ש××¨× ××××",
+ orderedlist: "רש××× ×××ספרת",
+ unorderedlist: "רש××× ×× ×××ספרת",
+ outdent: "××§×× ×× ×ס×",
+ indent: "×××× ×× ×ס×",
+ forecolor: "צ××¢ ××פ×",
+ hilitecolor: "צ××¢ רקע",
+ horizontalrule: "×§× ×× ××",
+ createlink: "××× ×¡ ××פר-×§×ש×ר",
+ insertimage: "××× ×¡/×©× × ×ª××× ×",
+ inserttable: "××× ×¡ ××××",
+ htmlmode: "×©× × ××¦× ×§×× HTML",
+ popupeditor: "×××× ×ת ××¢×ר×",
+ about: "××××ת ×¢××¨× ××",
+ showhelp: "×¢××¨× ×ש×××ש ××¢×ר×",
+ textindicator: "ס×× ×× × ××××",
+ undo: "×××× ×ת פע×××ª× ×××ר×× ×",
+ redo: "××צע ×××ש ×ת ×פע××× ×××ר×× × ×©××××ת",
+ cut: "×××ר ×××ר×",
+ copy: "×עתק ×××ר×",
+ paste: "××××§ ×××××",
+ lefttoright: "××××× ×ש××× ×××××",
+ righttoleft: "××××× ××××× ×ש×××"
+ },
+
+ buttons: {
+ "ok": "××ש×ר",
+ "cancel": "×××××"
+ },
+
+ msg: {
+ "Path": "× ×ª×× ×¢×צ××",
+ "TEXT_MODE": "××ª× ×××¦× ××§×¡× × ×§× (×§××). ×שת×ש ××פת×ר [<>] ××× ××××ר ×××¦× WYSIWYG (תצ××ת ×¢×צ××).",
+
+ "IE-sucks-full-screen" :
+ // translate here
+ "××¦× ××¡× ××× ××צר ××¢××ת ××פ××¤× Internet Explorer, " +
+ "×¢×§× ××××× ××פ××¤× ×× ××××× × ×פת×ר ×ת ××. ×ת/× ×¢×××/× ××××ת תצ××ת ×××, " +
+ "××¢××ת ×תפק×× ××¢××¨× ×/×× ×§×¨××¡× ×©× ××פ×פ×. ×× ××ער×ת ש×× ××× Windows 9x " +
+ "ס××ר ××× ×× ×©×ª×§××/× 'General Protection Fault' ×ת××צ/× ××ת×× ×ת ×××ש×.\n\n" +
+ "ר××/× ××××רת. ×× × ×××¥/× ××ש×ר ×× ×ת/× ×¢×××× ×¨××¦× ×× ×¡×ת ×ת ××¢××¨× ×××¡× ×××."
+ },
+
+ dialogs: {
+ "Cancel" : "×××××",
+ "Insert/Modify Link" : "××סף/×©× × ×§×ש×ר",
+ "New window (_blank)" : "×××× ××ש (_blank)",
+ "None (use implicit)" : "××× (×שת×ש ×-frame ××§×××)",
+ "OK" : "OK",
+ "Other" : "××ר",
+ "Same frame (_self)" : "×××ª× frame (_self)",
+ "Target:" : "××¢×:",
+ "Title (tooltip):" : "××תרת (tooltip):",
+ "Top frame (_top)" : "Frame ×¢×××× (_top)",
+ "URL:" : "URL:",
+ "You must enter the URL where this link points to" : "×××× ××ת×× URL ש×××× ×§×ש×ר ×× ×צ×××¢"
+
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/hu.js
===================================================================
--- plog/trunk/js/htmlarea/lang/hu.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/hu.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,63 +1,90 @@
-// I18N constants
-
-// LANG: "hu", ENCODING: UTF-8
-// Author: Miklós Somogyi, <somogyine at vnet.hu>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "hu",
-
- tooltips: {
- bold: "Félkövér",
- italic: "DÅlt",
- underline: "Aláhúzott",
- strikethrough: "Ãthúzott",
- subscript: "Alsó index",
- superscript: "FelsÅ index",
- justifyleft: "Balra zárt",
- justifycenter: "Középre zárt",
- justifyright: "Jobbra zárt",
- justifyfull: "Sorkizárt",
- orderedlist: "Számozott lista",
- unorderedlist: "Számozatlan lista",
- outdent: "Behúzás csökkentése",
- indent: "Behúzás növelése",
- forecolor: "KarakterszÃn",
- hilitecolor: "HáttérszÃn",
- horizontalrule: "Elválasztó vonal",
- createlink: "Hiperhivatkozás beszúrása",
- insertimage: "Kép beszúrása",
- inserttable: "Táblázat beszúrása",
- htmlmode: "HTML forrás be/ki",
- popupeditor: "SzerkesztŠkülön ablakban",
- about: "Névjegy",
- showhelp: "Súgó",
- textindicator: "Aktuális stÃlus",
- undo: "Visszavonás",
- redo: "Ãjra végrehajtás",
- cut: "Kivágás",
- copy: "Másolás",
- paste: "Beillesztés"
- },
-
- buttons: {
- "ok": "Rendben",
- "cancel": "Mégsem"
- },
-
- msg: {
- "Path": "Hierarchia",
- "TEXT_MODE": "Forrás mód. Visszaváltás [<>] gomb"
- }
-};
+// I18N constants
+
+// LANG: "hu", ENCODING: UTF-8
+// Author: Miklós Somogyi, <somogyine at vnet.hu>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "hu",
+
+ tooltips: {
+ bold: "Félkövér",
+ italic: "DÅlt",
+ underline: "Aláhúzott",
+ strikethrough: "Ãthúzott",
+ subscript: "Alsó index",
+ superscript: "FelsÅ index",
+ justifyleft: "Balra zárt",
+ justifycenter: "Középre zárt",
+ justifyright: "Jobbra zárt",
+ justifyfull: "Sorkizárt",
+ orderedlist: "Számozott lista",
+ unorderedlist: "Számozatlan lista",
+ outdent: "Behúzás csökkentése",
+ indent: "Behúzás növelése",
+ forecolor: "KarakterszÃn",
+ hilitecolor: "HáttérszÃn",
+ horizontalrule: "Elválasztó vonal",
+ createlink: "Hiperhivatkozás beszúrása",
+ insertimage: "Kép beszúrása",
+ inserttable: "Táblázat beszúrása",
+ htmlmode: "HTML forrás be/ki",
+ popupeditor: "SzerkesztŠkülön ablakban",
+ about: "Névjegy",
+ showhelp: "Súgó",
+ textindicator: "Aktuális stÃlus",
+ undo: "Visszavonás",
+ redo: "Ãjra végrehajtás",
+ cut: "Kivágás",
+ copy: "Másolás",
+ paste: "Beillesztés",
+ lefttoright: "Irány balról jobbra",
+ righttoleft: "Irány jobbról balra"
+ },
+
+ buttons: {
+ "ok": "Rendben",
+ "cancel": "Mégsem"
+ },
+
+ msg: {
+ "Path": "Hierarchia",
+ "TEXT_MODE": "Forrás mód. Visszaváltás [<>] gomb",
+
+ "IE-sucks-full-screen" :
+ // translate here
+ "A teljesképrenyÅs szerkesztés hibát okozhat Internet Explorer használata esetén, " +
+ "ez a böngészÅ a hibája, amit nem tudunk kikerülni. Szemetet észlelhet a képrenyÅn, " +
+ "illetve néhány funkció hiányozhat és/vagy véletlenszerűen lefagyhat a böngészÅ. " +
+ "Windows 9x operaciós futtatása esetén elég valószÃnű, hogy 'General Protection Fault' " +
+ "hibát okoz és újra kell indÃtania a számÃtógépet.\n\n" +
+ "Figyelmeztettük. Kérjük nyomja meg a Rendben gombot, ha mégis szeretné megnyitni a " +
+ "szerkesztÅt külön ablakban."
+ },
+
+ dialogs: {
+ "Cancel" : "Mégsem",
+ "Insert/Modify Link" : "Hivatkozás Beszúrása/MódosÃtása",
+ "New window (_blank)" : "Ãj ablak (_blank)",
+ "None (use implicit)" : "Nincs (use implicit)",
+ "OK" : "OK",
+ "Other" : "Más",
+ "Same frame (_self)" : "Ugyanabba a keretbe (_self)",
+ "Target:" : "Cél:",
+ "Title (tooltip):" : "CÃm (tooltip):",
+ "Top frame (_top)" : "FelsÅ keret (_top)",
+ "URL:" : "URL:",
+ "You must enter the URL where this link points to" : "Be kell Ãrnia az URL-t, ahova a hivatkozás mutasson"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/it.js
===================================================================
--- plog/trunk/js/htmlarea/lang/it.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/it.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,54 +1,79 @@
-// I18N constants
-
-// LANG: "it", ENCODING: UTF-8 | ISO-8859-1
-// Author: Fabio Rotondo <fabio at rotondo.it>
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "it",
-
- tooltips: {
- bold: "Grassetto",
- italic: "Italico",
- underline: "Sottolineato",
- strikethrough: "Barrato",
- subscript: "Pedice",
- superscript: "Apice",
- justifyleft: "Giustifica a Sinistra",
- justifycenter: "Giustifica in Centro",
- justifyright: "Giustifica a Destra",
- justifyfull: "Giustifica Completamente",
- orderedlist: "Lista Ordinata",
- unorderedlist: "Lista Puntata",
- outdent: "Decrementa Indentazione",
- indent: "Incrementa Indentazione",
- forecolor: "Colore del Carattere",
- hilitecolor: "Colore di Sfondo",
- horizontalrule: "Linea Orizzontale",
- createlink: "Inserisci un Link",
- insertimage: "Inserisci un'Immagine",
- inserttable: "Inserisci una Tabella",
- htmlmode: "Attiva il codice HTML",
- popupeditor: "Allarga l'editor",
- about: "Info sull'editor",
- showhelp: "Aiuto sull'editor",
- textindicator: "Stile Attuale",
- undo: "Elimina l'ultima modifica",
- redo: "Ripristina l'ultima modifica",
- cut: "Taglia l'area selezionata",
- copy: "Copia l'area selezionata",
- paste: "Incolla dalla memoria"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "Annulla"
- },
-
- msg: {
- "Path": "Percorso",
- "TEXT_MODE": "Sei in MODALITA' TESTO. Usa il bottone [<>] per tornare alla modalità WYSIWYG."
- }
-};
+// I18N constants
+
+// LANG: "it", ENCODING: UTF-8 | ISO-8859-1
+// Author: Fabio Rotondo <fabio at rotondo.it>
+// Update for 3.0 rc1: Giovanni Premuda <gpremuda at softwerk.it>
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "it",
+
+ tooltips: {
+ bold: "Grassetto",
+ italic: "Corsivo",
+ underline: "Sottolineato",
+ strikethrough: "Barrato",
+ subscript: "Pedice",
+ superscript: "Apice",
+ justifyleft: "Allinea a sinistra",
+ justifycenter: "Allinea in centro",
+ justifyright: "Allinea a destra",
+ justifyfull: "Giustifica",
+ insertorderedlist: "Lista ordinata",
+ insertunorderedlist: "Lista puntata",
+ outdent: "Decrementa indentazione",
+ indent: "Incrementa indentazione",
+ forecolor: "Colore del carattere",
+ hilitecolor: "Colore di sfondo",
+ inserthorizontalrule: "Linea orizzontale",
+ createlink: "Inserisci un link",
+ insertimage: "Inserisci un'immagine",
+ inserttable: "Inserisci una tabella",
+ htmlmode: "Visualizzazione HTML",
+ popupeditor: "Editor a pieno schermo",
+ about: "Info sull'editor",
+ showhelp: "Aiuto sull'editor",
+ textindicator: "Stile corrente",
+ undo: "Annulla",
+ redo: "Ripristina",
+ cut: "Taglia",
+ copy: "Copia",
+ paste: "Incolla",
+ lefttoright: "Scrivi da sinistra a destra",
+ righttoleft: "Scrivi da destra a sinistra"
+ },
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "Annulla"
+ },
+
+ msg: {
+ "Path": "Percorso",
+ "TEXT_MODE": "Sei in MODALITA' TESTO. Usa il bottone [<>] per tornare alla modalità WYSIWYG.",
+ "IE-sucks-full-screen" :
+ // translate here
+ "The full screen mode is known to cause problems with Internet Explorer, " +
+ "due to browser bugs that we weren't able to workaround. You might experience garbage " +
+ "display, lack of editor functions and/or random browser crashes. If your system is Windows 9x " +
+ "it's very likely that you'll get a 'General Protection Fault' and need to reboot.\n\n" +
+ "You have been warned. Please press OK if you still want to try the full screen editor."
+ },
+
+ dialogs: {
+ "Annulla" : "Cancel",
+ "Inserisci/modifica Link" : "Insert/Modify Link",
+ "Nuova finestra (_blank)" : "New window (_blank)",
+ "Nessuno (usa predefinito)" : "None (use implicit)",
+ "OK" : "OK",
+ "Altro" : "Other",
+ "Stessa finestra (_self)" : "Same frame (_self)",
+ "Target:" : "Target:",
+ "Title (suggerimento):" : "Title (tooltip):",
+ "Frame principale (_top)" : "Top frame (_top)",
+ "URL:" : "URL:",
+ "You must enter the URL where this link points to" : "Devi inserire un indirizzo per questo link"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/ja-euc.js
===================================================================
--- plog/trunk/js/htmlarea/lang/ja-euc.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/ja-euc.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,37 +1,37 @@
-// I18N constants -- Japanese EUC
-// by Manabu Onoue -- tmocsys at tmocsys.com
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "ja-euc",
-
- tooltips: {
- bold: "ÂÀ»ú",
- italic: "¼ÐÂÎ",
- underline: "²¼Àþ",
- strikethrough: "ÂǤÁ¾Ã¤·Àþ",
- subscript: "²¼Éդꤍ»ú",
- superscript: "¾åÉդꤍ»ú",
- justifyleft: "º¸´ó¤»",
- justifycenter: "Ãæ±û´ó¤»",
- justifyright: "±¦´ó¤»",
- justifyfull: "¶ÑÅù³äÉÕ",
- orderedlist: "ÈÖ¹æÉÕ¤²Õ¾ò½ñ¤",
- unorderedlist: "µ¹æÉÕ¤²Õ¾ò½ñ¤",
- outdent: "¥¤¥ó¥Ç¥ó¥È²ò½ü",
- indent: "¥¤¥ó¥Ç¥ó¥ÈÀßÄê",
- forecolor: "ʸ»ú¿§",
- backcolor: "ÇØ·Ê¿§",
- horizontalrule: "¿åÊ¿Àþ",
- createlink: "¥ê¥ó¥¯ºîÀ®",
- insertimage: "²èÁüÁÞÆþ",
- inserttable: "¥Æ¡¼¥Ö¥ëÁÞÆþ",
- htmlmode: "HTMLɽ¼¨ÀÚÂØ",
- popupeditor: "¥¨¥Ç¥£¥¿³ÈÂç",
- about: "¥Ð¡¼¥¸¥ç¥ó¾ðÊó",
- help: "¥Ø¥ë¥×",
- textindicator: "¸½ºß¤Î¥¹¥¿¥¤¥ë"
- }
-};
+// I18N constants -- Japanese EUC
+// by Manabu Onoue -- tmocsys at tmocsys.com
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "ja-euc",
+
+ tooltips: {
+ bold: "ÂÀ»ú",
+ italic: "¼ÐÂÎ",
+ underline: "²¼Àþ",
+ strikethrough: "ÂǤÁ¾Ã¤·Àþ",
+ subscript: "²¼Éդꤍ»ú",
+ superscript: "¾åÉդꤍ»ú",
+ justifyleft: "º¸´ó¤»",
+ justifycenter: "Ãæ±û´ó¤»",
+ justifyright: "±¦´ó¤»",
+ justifyfull: "¶ÑÅù³äÉÕ",
+ orderedlist: "ÈÖ¹æÉÕ¤²Õ¾ò½ñ¤",
+ unorderedlist: "µ¹æÉÕ¤²Õ¾ò½ñ¤",
+ outdent: "¥¤¥ó¥Ç¥ó¥È²ò½ü",
+ indent: "¥¤¥ó¥Ç¥ó¥ÈÀßÄê",
+ forecolor: "ʸ»ú¿§",
+ backcolor: "ÇØ·Ê¿§",
+ horizontalrule: "¿åÊ¿Àþ",
+ createlink: "¥ê¥ó¥¯ºîÀ®",
+ insertimage: "²èÁüÁÞÆþ",
+ inserttable: "¥Æ¡¼¥Ö¥ëÁÞÆþ",
+ htmlmode: "HTMLɽ¼¨ÀÚÂØ",
+ popupeditor: "¥¨¥Ç¥£¥¿³ÈÂç",
+ about: "¥Ð¡¼¥¸¥ç¥ó¾ðÊó",
+ help: "¥Ø¥ë¥×",
+ textindicator: "¸½ºß¤Î¥¹¥¿¥¤¥ë"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/ja-jis.js
===================================================================
--- plog/trunk/js/htmlarea/lang/ja-jis.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/ja-jis.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,37 +1,37 @@
-// I18N constants -- Japanese JIS
-// by Manabu Onoue -- tmocsys at tmocsys.com
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "ja-jis",
-
- tooltips: {
- bold: "$BB@;z(B",
- italic: "$B<PBN(B",
- underline: "$B2<@~(B",
- strikethrough: "$BBG$A>C$7@~(B",
- subscript: "$B2<IU$-E:$(;z(B",
- superscript: "$B>eIU$-E:$(;z(B",
- justifyleft: "$B:84s$;(B",
- justifycenter: "$BCf1{4s$;(B",
- justifyright: "$B1&4s$;(B",
- justifyfull: "$B6QEy3dIU(B",
- orderedlist: "$BHV9fIU$-2U>r=q$-(B",
- unorderedlist: "$B5-9fIU$-2U>r=q$-(B",
- outdent: "$B%$%s%G%s%H2r=|(B",
- indent: "$B%$%s%G%s%H at _Dj(B",
- forecolor: "$BJ8;z?'(B",
- backcolor: "$BGX7J?'(B",
- horizontalrule: "$B?eJ?@~(B",
- createlink: "$B%j%s%/:n at .(B",
- insertimage: "$B2hA|A^F~(B",
- inserttable: "$B%F!<%V%kA^F~(B",
- htmlmode: "HTML$BI=<(@ZBX(B",
- popupeditor: "$B%(%G%#%?3HBg(B",
- about: "$B%P!<%8%g%s>pJs(B",
- help: "$B%X%k%W(B",
- textindicator: "$B8=:_$N%9%?%$%k(B"
- }
-};
+// I18N constants -- Japanese JIS
+// by Manabu Onoue -- tmocsys at tmocsys.com
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "ja-jis",
+
+ tooltips: {
+ bold: "$BB@;z(B",
+ italic: "$B<PBN(B",
+ underline: "$B2<@~(B",
+ strikethrough: "$BBG$A>C$7@~(B",
+ subscript: "$B2<IU$-E:$(;z(B",
+ superscript: "$B>eIU$-E:$(;z(B",
+ justifyleft: "$B:84s$;(B",
+ justifycenter: "$BCf1{4s$;(B",
+ justifyright: "$B1&4s$;(B",
+ justifyfull: "$B6QEy3dIU(B",
+ orderedlist: "$BHV9fIU$-2U>r=q$-(B",
+ unorderedlist: "$B5-9fIU$-2U>r=q$-(B",
+ outdent: "$B%$%s%G%s%H2r=|(B",
+ indent: "$B%$%s%G%s%H at _Dj(B",
+ forecolor: "$BJ8;z?'(B",
+ backcolor: "$BGX7J?'(B",
+ horizontalrule: "$B?eJ?@~(B",
+ createlink: "$B%j%s%/:n at .(B",
+ insertimage: "$B2hA|A^F~(B",
+ inserttable: "$B%F!<%V%kA^F~(B",
+ htmlmode: "HTML$BI=<(@ZBX(B",
+ popupeditor: "$B%(%G%#%?3HBg(B",
+ about: "$B%P!<%8%g%s>pJs(B",
+ help: "$B%X%k%W(B",
+ textindicator: "$B8=:_$N%9%?%$%k(B"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/ja-sjis.js
===================================================================
--- plog/trunk/js/htmlarea/lang/ja-sjis.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/ja-sjis.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,37 +1,37 @@
-// I18N constants -- Japanese Shift-JIS
-// by Manabu Onoue -- tmocsys at tmocsys.com
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "ja-sjis",
-
- tooltips: {
- bold: "¾",
- italic: "ÎÌ",
- underline: "ºü",
- strikethrough: "Å¿Áµü",
- subscript: "ºt«Y¦",
- superscript: "ãt«Y¦",
- justifyleft: "¶ñ¹",
- justifycenter: "ñ¹",
- justifyright: "Eñ¹",
- justifyfull: "Ït",
- orderedlist: "Ôt«Óð«",
- unorderedlist: "Lt«Óð«",
- outdent: "Cfgð",
- indent: "CfgÝè",
- forecolor: "¶F",
- backcolor: "wiF",
- horizontalrule: "
½ü",
- createlink: "Nì¬",
- insertimage: "æ}ü",
- inserttable: "e[u}ü",
- htmlmode: "HTML\¦ØÖ",
- popupeditor: "GfB^gå",
- about: "o[Wîñ",
- help: "wv",
- textindicator: "»ÝÌX^C"
- }
-};
+// I18N constants -- Japanese Shift-JIS
+// by Manabu Onoue -- tmocsys at tmocsys.com
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "ja-sjis",
+
+ tooltips: {
+ bold: "¾",
+ italic: "ÎÌ",
+ underline: "ºü",
+ strikethrough: "Å¿Áµü",
+ subscript: "ºt«Y¦",
+ superscript: "ãt«Y¦",
+ justifyleft: "¶ñ¹",
+ justifycenter: "ñ¹",
+ justifyright: "Eñ¹",
+ justifyfull: "Ït",
+ orderedlist: "Ôt«Óð«",
+ unorderedlist: "Lt«Óð«",
+ outdent: "Cfgð",
+ indent: "CfgÝè",
+ forecolor: "¶F",
+ backcolor: "wiF",
+ horizontalrule: "
½ü",
+ createlink: "Nì¬",
+ insertimage: "æ}ü",
+ inserttable: "e[u}ü",
+ htmlmode: "HTML\¦ØÖ",
+ popupeditor: "GfB^gå",
+ about: "o[Wîñ",
+ help: "wv",
+ textindicator: "»ÝÌX^C"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/ja-utf8.js
===================================================================
--- plog/trunk/js/htmlarea/lang/ja-utf8.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/ja-utf8.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,37 +1,37 @@
-// I18N constants -- Japanese UTF-8
-// by Manabu Onoue -- tmocsys at tmocsys.com
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "ja-utf8",
-
- tooltips: {
- bold: "太å",
- italic: "æä½",
- underline: "ä¸ç·",
- strikethrough: "æã¡æ¶ãç·",
- subscript: "ä¸ä»ãæ·»ãå",
- superscript: "ä¸ä»ãæ·»ãå",
- justifyleft: "å·¦å¯ã",
- justifycenter: "ä¸å¤®å¯ã",
- justifyright: "å³å¯ã",
- justifyfull: "åçå²ä»",
- orderedlist: "çªå·ä»ãç®æ¡æ¸ã",
- unorderedlist: "è¨å·ä»ãç®æ¡æ¸ã",
- outdent: "ã¤ã³ãã³ãè§£é¤",
- indent: "ã¤ã³ãã³ãè¨å®",
- forecolor: "æåè²",
- backcolor: "èæ¯è²",
- horizontalrule: "æ°´å¹³ç·",
- createlink: "ãªã³ã¯ä½æ",
- insertimage: "ç»åæ¿å
¥",
- inserttable: "ãã¼ãã«æ¿å
¥",
- htmlmode: "HTMLè¡¨ç¤ºåæ¿",
- popupeditor: "ã¨ãã£ã¿æ¡å¤§",
- about: "ãã¼ã¸ã§ã³æ
å ±",
- help: "ãã«ã",
- textindicator: "ç¾å¨ã®ã¹ã¿ã¤ã«"
- }
-};
+// I18N constants -- Japanese UTF-8
+// by Manabu Onoue -- tmocsys at tmocsys.com
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "ja-utf8",
+
+ tooltips: {
+ bold: "太å",
+ italic: "æä½",
+ underline: "ä¸ç·",
+ strikethrough: "æã¡æ¶ãç·",
+ subscript: "ä¸ä»ãæ·»ãå",
+ superscript: "ä¸ä»ãæ·»ãå",
+ justifyleft: "å·¦å¯ã",
+ justifycenter: "ä¸å¤®å¯ã",
+ justifyright: "å³å¯ã",
+ justifyfull: "åçå²ä»",
+ orderedlist: "çªå·ä»ãç®æ¡æ¸ã",
+ unorderedlist: "è¨å·ä»ãç®æ¡æ¸ã",
+ outdent: "ã¤ã³ãã³ãè§£é¤",
+ indent: "ã¤ã³ãã³ãè¨å®",
+ forecolor: "æåè²",
+ backcolor: "èæ¯è²",
+ horizontalrule: "æ°´å¹³ç·",
+ createlink: "ãªã³ã¯ä½æ",
+ insertimage: "ç»åæ¿å
¥",
+ inserttable: "ãã¼ãã«æ¿å
¥",
+ htmlmode: "HTMLè¡¨ç¤ºåæ¿",
+ popupeditor: "ã¨ãã£ã¿æ¡å¤§",
+ about: "ãã¼ã¸ã§ã³æ
å ±",
+ help: "ãã«ã",
+ textindicator: "ç¾å¨ã®ã¹ã¿ã¤ã«"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/lt.js
===================================================================
--- plog/trunk/js/htmlarea/lang/lt.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/lt.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,55 +1,77 @@
-// I18N constants
-
-// LANG: "lt", ENCODING: UTF-8
-// Author: Jaroslav Å atkeviÄ, <jaro at akl.lt>
-
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "lt",
-
- tooltips: {
- bold: "Paryškinti",
- italic: "Kursyvas",
- underline: "Pabraukti",
- strikethrough: "Perbraukti",
- subscript: "Apatinis indeksas",
- superscript: "Viršutinis indeksas",
- justifyleft: "Lygiavimas pagal kairÄ",
- justifycenter: "Lygiavimas pagal centrÄ
",
- justifyright: "Lygiavimas pagal deÅ¡inÄ",
- justifyfull: "Lygiuoti pastraipÄ
",
- orderedlist: "Numeruotas sÄ
rašas",
- unorderedlist: "Suženklintas sÄ
rašas",
- outdent: "Sumažinti paraÅ¡tÄ",
- indent: "Padidinti paraÅ¡tÄ",
- forecolor: "Å rifto spalva",
- hilitecolor: "Fono spalva",
- horizontalrule: "Horizontali linija",
- createlink: "Ä®terpti nuorodÄ
",
- insertimage: "Ä®terpti paveiksliukÄ
",
- inserttable: "Ä®terpti lentelÄ",
- htmlmode: "Perjungti į HTML/WYSIWYG",
- popupeditor: "IÅ¡plÄstas redagavimo ekranas/Enlarge Editor",
- about: "Apie redaktorių",
- showhelp: "Pagalba naudojant redaktorių",
- textindicator: "Dabartinis stilius",
- undo: "AtÅ¡aukia paskutini jÅ«sų veiksmÄ
",
- redo: "Pakartoja paskutinį atÅ¡auktÄ
jÅ«sų veiksmÄ
",
- cut: "Iškirpti",
- copy: "Kopijuoti",
- paste: "Įterpti"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "Atšaukti"
- },
-
- msg: {
- "Path": "Kelias",
- "TEXT_MODE": "JÅ«s esete teksto režime. Naudokite [<>] mygtukÄ
grįžimui į WYSIWYG."
- }
-};
+// I18N constants
+
+// LANG: "lt", ENCODING: UTF-8
+// Author: Jaroslav Å atkeviÄ, <jaro at akl.lt>
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "en",
+
+ tooltips: {
+ bold: "Paryškinti",
+ italic: "Kursyvas",
+ underline: "Pabraukti",
+ strikethrough: "Perbraukti",
+ subscript: "Apatinis indeksas",
+ superscript: "Viršutinis indeksas",
+ justifyleft: "Lygiavimas pagal kairÄ",
+ justifycenter: "Lygiavimas pagal centrÄ
",
+ justifyright: "Lygiavimas pagal deÅ¡inÄ",
+ justifyfull: "Lygiuoti pastraipÄ
",
+ orderedlist: "Numeruotas sÄ
rašas",
+ unorderedlist: "Suženklintas sÄ
rašas",
+ outdent: "Sumažinti paraÅ¡tÄ",
+ indent: "Padidinti paraÅ¡tÄ",
+ forecolor: "Å rifto spalva",
+ hilitecolor: "Fono spalva",
+ horizontalrule: "Horizontali linija",
+ createlink: "Ä®terpti nuorodÄ
",
+ insertimage: "Ä®terpti paveiksliukÄ
",
+ inserttable: "Ä®terpti lentelÄ",
+ htmlmode: "Perjungti į HTML/WYSIWYG",
+ popupeditor: "IÅ¡plÄstas redagavimo ekranas/Enlarge Editor",
+ about: "Apie redaktorių",
+ showhelp: "Pagalba naudojant redaktorių",
+ textindicator: "Dabartinis stilius",
+ undo: "AtÅ¡aukia paskutini jÅ«sų veiksmÄ
",
+ redo: "Pakartoja paskutinį atÅ¡auktÄ
jÅ«sų veiksmÄ
",
+ cut: "Iškirpti",
+ copy: "Kopijuoti",
+ paste: "Įterpti"
+},
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "Atšaukti"
+ },
+
+ msg: {
+ "Path": "Kelias",
+ "TEXT_MODE": "JÅ«s esete teksto režime. Naudokite [<>] mygtukÄ
grįžimui į WYSIWYG.",
+
+ "IE-sucks-full-screen" :
+ // translate here
+ "The full screen mode is known to cause problems with Internet Explorer, " +
+ "due to browser bugs that we weren't able to workaround. You might experience garbage " +
+ "display, lack of editor functions and/or random browser crashes. If your system is Windows 9x " +
+ "it's very likely that you'll get a 'General Protection Fault' and need to reboot.\n\n" +
+ "You have been warned. Please press OK if you still want to try the full screen editor."
+ },
+
+ dialogs: {
+ "Cancel" : "Atšaukti",
+ "Insert/Modify Link" : "IdÄti/Modifikuoti",
+ "New window (_blank)" : "Naujas langas (_blank)",
+ "None (use implicit)" : "None (use implicit)",
+ "OK" : "OK",
+ "Other" : "Kitas",
+ "Same frame (_self)" : "Same frame (_self)",
+ "Target:" : "Target:",
+ "Title (tooltip):" : "Pavadinimas (tooltip):",
+ "Top frame (_top)" : "Top frame (_top)",
+ "URL:" : "URL:",
+ "You must enter the URL where this link points to" : "Jus privalote nurodyti URL į kuri rodo Å¡itÄ
nuoroda"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/lv.js
===================================================================
--- plog/trunk/js/htmlarea/lang/lv.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/lv.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,55 +1,55 @@
-// I18N constants
-
-// LANG: "lv", ENCODING: UTF-8 | ISO-8859-1
-// Author: Mihai Bazon, http://dynarch.com/mishoo
-// Translated by: Janis Klavins, <janis.klavins at devia.lv>
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "lv",
-
- tooltips: {
- bold: "Trekniem burtiem",
- italic: "Kursîvâ",
- underline: "Pasvîtrots",
- strikethrough: "Pârsvîtrots",
- subscript: "Novietot zem rindas",
- superscript: "Novietot virs rindas",
- justifyleft: "Izlîdzinât pa kreisi",
- justifycenter: "Izlîdzinât centrâ",
- justifyright: "Izlîdzinât pa labi",
- justifyfull: "Izlîdzinât pa visu lapu",
- orderedlist: "Numurçts saraksts",
- unorderedlist: "Saraksts",
- outdent: "Samazinât atkâpi",
- indent: "Palielinât atkâpi",
- forecolor: "Burtu krâsa",
- hilitecolor: "Fona krâsa",
- horizontalrule: "Horizontâla atdalîtâjsvîtra",
- createlink: "Ievietot hipersaiti",
- insertimage: "Ievietot attçlu",
- inserttable: "Ievietot tabulu",
- htmlmode: "Skatît HTML kodu",
- popupeditor: "Palielinât Rediìçtâju",
- about: "Par ðo rediìçtâju",
- showhelp: "Rediìçtâja palîgs",
- textindicator: "Patreizçjais stils",
- undo: "Atcelt pçdçjo darbîbu",
- redo: "Atkârtot pçdçjo darbîbu",
- cut: "Izgriezt iezîmçto",
- copy: "Kopçt iezîmçto",
- paste: "Ievietot iezîmçto"
- },
-
- buttons: {
- "ok": "Labi",
- "cancel": "Atcelt"
- },
-
- msg: {
- "Path": "Ceïð",
- "TEXT_MODE": "Jûs patlaban darbojaties TEKSTA REÞÎMÂ. Lai pârietu atpakaï uz GRAFISKO REÞÎMU (WYSIWIG), lietojiet [<>] pogu."
- }
-};
+// I18N constants
+
+// LANG: "lv", ENCODING: UTF-8 | ISO-8859-1
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+// Translated by: Janis Klavins, <janis.klavins at devia.lv>
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "lv",
+
+ tooltips: {
+ bold: "Trekniem burtiem",
+ italic: "Kursîvâ",
+ underline: "Pasvîtrots",
+ strikethrough: "Pârsvîtrots",
+ subscript: "Novietot zem rindas",
+ superscript: "Novietot virs rindas",
+ justifyleft: "Izlîdzinât pa kreisi",
+ justifycenter: "Izlîdzinât centrâ",
+ justifyright: "Izlîdzinât pa labi",
+ justifyfull: "Izlîdzinât pa visu lapu",
+ orderedlist: "Numurçts saraksts",
+ unorderedlist: "Saraksts",
+ outdent: "Samazinât atkâpi",
+ indent: "Palielinât atkâpi",
+ forecolor: "Burtu krâsa",
+ hilitecolor: "Fona krâsa",
+ horizontalrule: "Horizontâla atdalîtâjsvîtra",
+ createlink: "Ievietot hipersaiti",
+ insertimage: "Ievietot attçlu",
+ inserttable: "Ievietot tabulu",
+ htmlmode: "Skatît HTML kodu",
+ popupeditor: "Palielinât Rediìçtâju",
+ about: "Par ðo rediìçtâju",
+ showhelp: "Rediìçtâja palîgs",
+ textindicator: "Patreizçjais stils",
+ undo: "Atcelt pçdçjo darbîbu",
+ redo: "Atkârtot pçdçjo darbîbu",
+ cut: "Izgriezt iezîmçto",
+ copy: "Kopçt iezîmçto",
+ paste: "Ievietot iezîmçto"
+ },
+
+ buttons: {
+ "ok": "Labi",
+ "cancel": "Atcelt"
+ },
+
+ msg: {
+ "Path": "Ceïð",
+ "TEXT_MODE": "Jûs patlaban darbojaties TEKSTA REÞÎMÂ. Lai pârietu atpakaï uz GRAFISKO REÞÎMU (WYSIWIG), lietojiet [<>] pogu."
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/nb.js
===================================================================
--- plog/trunk/js/htmlarea/lang/nb.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/nb.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,36 +1,36 @@
-// I18N constants
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "nb",
-
- tooltips: {
- bold: "Fet",
- italic: "Kursiv",
- underline: "Understreket",
- strikethrough: "Gjennomstreket",
- subscript: "Senket",
- superscript: "Hevet",
- justifyleft: "Venstrejuster",
- justifycenter: "Midtjuster",
- justifyright: "Høyrejuster",
- justifyfull: "Blokkjuster",
- orderedlist: "Nummerert liste",
- unorderedlist: "Punktmerket liste",
- outdent: "Øke innrykk",
- indent: "Reduser innrykk",
- forecolor: "Skriftfarge",
- backcolor: "Bakgrunnsfarge",
- horizontalrule: "Horisontal linje",
- createlink: "Sett inn lenke",
- insertimage: "Sett inn bilde",
- inserttable: "Sett inn tabell",
- htmlmode: "Vis HTML kode",
- popupeditor: "Forstørr redigeringsvindu",
- about: "Om..",
- help: "Hjelp",
- textindicator: "Gjeldende stil"
- }
-};
+// I18N constants
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "nb",
+
+ tooltips: {
+ bold: "Fet",
+ italic: "Kursiv",
+ underline: "Understreket",
+ strikethrough: "Gjennomstreket",
+ subscript: "Senket",
+ superscript: "Hevet",
+ justifyleft: "Venstrejuster",
+ justifycenter: "Midtjuster",
+ justifyright: "Høyrejuster",
+ justifyfull: "Blokkjuster",
+ orderedlist: "Nummerert liste",
+ unorderedlist: "Punktmerket liste",
+ outdent: "Øke innrykk",
+ indent: "Reduser innrykk",
+ forecolor: "Skriftfarge",
+ backcolor: "Bakgrunnsfarge",
+ horizontalrule: "Horisontal linje",
+ createlink: "Sett inn lenke",
+ insertimage: "Sett inn bilde",
+ inserttable: "Sett inn tabell",
+ htmlmode: "Vis HTML kode",
+ popupeditor: "Forstørr redigeringsvindu",
+ about: "Om..",
+ help: "Hjelp",
+ textindicator: "Gjeldende stil"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/nl.js
===================================================================
--- plog/trunk/js/htmlarea/lang/nl.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/nl.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,90 +1,90 @@
-// I18N constants
-
-// LANG: "nl", ENCODING: UTF-8 | ISO-8859-1
-// Author: Michel Weegeerink (info at mmc-shop.nl), http://mmc-shop.nl
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "nl",
-
- tooltips: {
- bold: "Vet",
- italic: "Cursief",
- underline: "Onderstrepen",
- strikethrough: "Doorhalen",
- subscript: "Subscript",
- superscript: "Superscript",
- justifyleft: "Links uitlijnen",
- justifycenter: "Centreren",
- justifyright: "Rechts uitlijnen",
- justifyfull: "Uitvullen",
- insertorderedlist: "Nummering",
- insertunorderedlist: "Opsommingstekens",
- outdent: "Inspringing verkleinen",
- indent: "Inspringing vergroten",
- forecolor: "Tekstkleur",
- hilitecolor: "Achtergrondkleur",
- inserthorizontalrule: "Horizontale lijn",
- createlink: "Hyperlink invoegen/aanpassen",
- insertimage: "Afbeelding invoegen/aanpassen",
- inserttable: "Tabel invoegen",
- htmlmode: "HTML broncode",
- popupeditor: "Vergroot Editor",
- about: "Over deze editor",
- showhelp: "HTMLArea help",
- textindicator: "Huidige stijl",
- undo: "Ongedaan maken",
- redo: "Herhalen",
- cut: "Knippen",
- copy: "Kopiëren",
- paste: "Plakken",
- lefttoright: "Tekstrichting links naar rechts",
- righttoleft: "Tekstrichting rechts naar links"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "Annuleren"
- },
-
- msg: {
- "Path": "Pad",
- "TEXT_MODE": "Je bent in TEKST-mode. Gebruik de [<>] knop om terug te keren naar WYSIWYG-mode.",
-
- "IE-sucks-full-screen" :
- // translate here
- "Fullscreen-mode veroorzaakt problemen met Internet Explorer door bugs in de webbrowser " +
- "die we niet kunnen omzeilen. Hierdoor kunnen de volgende effecten optreden: verknoeide teksten, " +
- "een verlies aan editor-functionaliteit en/of willekeurig vastlopen van de webbrowser. " +
- "Als u Windows 95 of 98 gebruikt, is het zeer waarschijnlijk dat u een algemene beschermingsfout " +
- "('General Protection Fault') krijgt en de computer opnieuw zal moeten opstarten.\n\n" +
- "U bent gewaarschuwd. Druk OK als u toch nog de Fullscreen-editor wil gebruiken."
- },
-
- dialogs: {
- "Cancel" : "Annuleren",
- "Insert/Modify Link" : "Hyperlink invoegen/aanpassen",
- "New window (_blank)" : "Nieuw venster (_blank)",
- "None (use implicit)" : "Geen",
- "OK" : "OK",
- "Other" : "Ander",
- "Same frame (_self)" : "Zelfde frame (_self)",
- "Target:" : "Doel:",
- "Title (tooltip):" : "Titel (tooltip):",
- "Top frame (_top)" : "Bovenste frame (_top)",
- "URL:" : "URL:",
- "You must enter the URL where this link points to" : "Geef de URL in waar de link naar verwijst"
- }
-};
-
+// I18N constants
+
+// LANG: "nl", ENCODING: UTF-8 | ISO-8859-1
+// Author: Michel Weegeerink (info at mmc-shop.nl), http://mmc-shop.nl
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "nl",
+
+ tooltips: {
+ bold: "Vet",
+ italic: "Cursief",
+ underline: "Onderstrepen",
+ strikethrough: "Doorhalen",
+ subscript: "Subscript",
+ superscript: "Superscript",
+ justifyleft: "Links uitlijnen",
+ justifycenter: "Centreren",
+ justifyright: "Rechts uitlijnen",
+ justifyfull: "Uitvullen",
+ orderedlist: "Nummering",
+ unorderedlist: "Opsommingstekens",
+ outdent: "Inspringing verkleinen",
+ indent: "Inspringing vergroten",
+ forecolor: "Tekstkleur",
+ hilitecolor: "Achtergrondkleur",
+ inserthorizontalrule: "Horizontale lijn",
+ createlink: "Hyperlink invoegen/aanpassen",
+ insertimage: "Afbeelding invoegen/aanpassen",
+ inserttable: "Tabel invoegen",
+ htmlmode: "HTML broncode",
+ popupeditor: "Vergroot Editor",
+ about: "Over deze editor",
+ showhelp: "HTMLArea help",
+ textindicator: "Huidige stijl",
+ undo: "Ongedaan maken",
+ redo: "Herhalen",
+ cut: "Knippen",
+ copy: "Kopiëren",
+ paste: "Plakken",
+ lefttoright: "Tekstrichting links naar rechts",
+ righttoleft: "Tekstrichting rechts naar links"
+ },
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "Annuleren"
+ },
+
+ msg: {
+ "Path": "Pad",
+ "TEXT_MODE": "Je bent in TEKST-mode. Gebruik de [<>] knop om terug te keren naar WYSIWYG-mode.",
+
+ "IE-sucks-full-screen" :
+ // translate here
+ "Fullscreen-mode veroorzaakt problemen met Internet Explorer door bugs in de webbrowser " +
+ "die we niet kunnen omzeilen. Hierdoor kunnen de volgende effecten optreden: verknoeide teksten, " +
+ "een verlies aan editor-functionaliteit en/of willekeurig vastlopen van de webbrowser. " +
+ "Als u Windows 95 of 98 gebruikt, is het zeer waarschijnlijk dat u een algemene beschermingsfout " +
+ "('General Protection Fault') krijgt en de computer opnieuw zal moeten opstarten.\n\n" +
+ "U bent gewaarschuwd. Druk OK als u toch nog de Fullscreen-editor wil gebruiken."
+ },
+
+ dialogs: {
+ "Cancel" : "Annuleren",
+ "Insert/Modify Link" : "Hyperlink invoegen/aanpassen",
+ "New window (_blank)" : "Nieuw venster (_blank)",
+ "None (use implicit)" : "Geen",
+ "OK" : "OK",
+ "Other" : "Ander",
+ "Same frame (_self)" : "Zelfde frame (_self)",
+ "Target:" : "Doel:",
+ "Title (tooltip):" : "Titel (tooltip):",
+ "Top frame (_top)" : "Bovenste frame (_top)",
+ "URL:" : "URL:",
+ "You must enter the URL where this link points to" : "Geef de URL in waar de link naar verwijst"
+ }
+};
+
Modified: plog/trunk/js/htmlarea/lang/no.js
===================================================================
--- plog/trunk/js/htmlarea/lang/no.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/no.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,79 +1,79 @@
-// Norwegian version for htmlArea v3.0 - pre1
-// - translated by ses<ses at online.no>
-// Additional translations by Håvard Wigtil <havardw at extend.no>
-// term´s and licenses are equal to htmlarea!
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "no",
-
- tooltips: {
- bold: "Fet",
- italic: "Kursiv",
- underline: "Understreket",
- strikethrough: "Gjennomstreket",
- subscript: "Nedsenket",
- superscript: "Opphøyet",
- justifyleft: "Venstrejuster",
- justifycenter: "Midtjuster",
- justifyright: "Høyrejuster",
- justifyfull: "Blokkjuster",
- insertorderedlist: "Nummerert liste",
- insertunorderedlist: "Punktliste",
- outdent: "Reduser innrykk",
- indent: "Øke innrykk",
- forecolor: "Tekstfarge",
- hilitecolor: "Bakgrundsfarge",
- inserthorizontalrule: "Vannrett linje",
- createlink: "Lag lenke",
- insertimage: "Sett inn bilde",
- inserttable: "Sett inn tabell",
- htmlmode: "Vis kildekode",
- popupeditor: "Vis i eget vindu",
- about: "Om denne editor",
- showhelp: "Hjelp",
- textindicator: "Nåværende stil",
- undo: "Angrer siste redigering",
- redo: "Gjør om siste angring",
- cut: "Klipp ut område",
- copy: "Kopier område",
- paste: "Lim inn",
- lefttoright: "Fra venstre mot høyre",
- righttoleft: "Fra høyre mot venstre"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "Avbryt"
- },
-
- msg: {
- "Path": "Tekstvelger",
- "TEXT_MODE": "Du er i tekstmodus Klikk på [<>] for å gå tilbake til WYSIWIG.",
- "IE-sucks-full-screen" :
- // translate here
- "Visning i eget vindu har kjente problemer med Internet Explorer, " +
- "på grunn av problemer med denne nettleseren. Mulige problemer er et uryddig " +
- "skjermbilde, manglende editorfunksjoner og/eller at nettleseren crasher. Hvis du bruker Windows 95 eller Windows 98 " +
- "er det også muligheter for at Windows will crashe.\n\n" +
- "Trykk 'OK' hvis du vil bruke visning i eget vindu på tross av denne advarselen."
- },
-
- dialogs: {
- "Cancel" : "Avbryt",
- "Insert/Modify Link" : "Rediger lenke",
- "New window (_blank)" : "Eget vindu (_blank)",
- "None (use implicit)" : "Ingen (bruk standardinnstilling)",
- "OK" : "OK",
- "Other" : "Annen",
- "Same frame (_self)" : "Samme ramme (_self)",
- "Target:" : "Mål:",
- "Title (tooltip):" : "Tittel (tooltip):",
- "Top frame (_top)" : "Toppramme (_top)",
- "URL:" : "Adresse:",
- "You must enter the URL where this link points to" : "Du må skrive inn en adresse som denne lenken skal peke til"
- }
-};
-
+// Norwegian version for htmlArea v3.0 - pre1
+// - translated by ses<ses at online.no>
+// Additional translations by Håvard Wigtil <havardw at extend.no>
+// term´s and licenses are equal to htmlarea!
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "no",
+
+ tooltips: {
+ bold: "Fet",
+ italic: "Kursiv",
+ underline: "Understreket",
+ strikethrough: "Gjennomstreket",
+ subscript: "Nedsenket",
+ superscript: "Opphøyet",
+ justifyleft: "Venstrejuster",
+ justifycenter: "Midtjuster",
+ justifyright: "Høyrejuster",
+ justifyfull: "Blokkjuster",
+ orderedlist: "Nummerert liste",
+ unorderedlist: "Punktliste",
+ outdent: "Reduser innrykk",
+ indent: "Øke innrykk",
+ forecolor: "Tekstfarge",
+ hilitecolor: "Bakgrundsfarge",
+ inserthorizontalrule: "Vannrett linje",
+ createlink: "Lag lenke",
+ insertimage: "Sett inn bilde",
+ inserttable: "Sett inn tabell",
+ htmlmode: "Vis kildekode",
+ popupeditor: "Vis i eget vindu",
+ about: "Om denne editor",
+ showhelp: "Hjelp",
+ textindicator: "Nåværende stil",
+ undo: "Angrer siste redigering",
+ redo: "Gjør om siste angring",
+ cut: "Klipp ut område",
+ copy: "Kopier område",
+ paste: "Lim inn",
+ lefttoright: "Fra venstre mot høyre",
+ righttoleft: "Fra høyre mot venstre"
+ },
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "Avbryt"
+ },
+
+ msg: {
+ "Path": "Tekstvelger",
+ "TEXT_MODE": "Du er i tekstmodus Klikk på [<>] for å gå tilbake til WYSIWIG.",
+ "IE-sucks-full-screen" :
+ // translate here
+ "Visning i eget vindu har kjente problemer med Internet Explorer, " +
+ "på grunn av problemer med denne nettleseren. Mulige problemer er et uryddig " +
+ "skjermbilde, manglende editorfunksjoner og/eller at nettleseren crasher. Hvis du bruker Windows 95 eller Windows 98 " +
+ "er det også muligheter for at Windows will crashe.\n\n" +
+ "Trykk 'OK' hvis du vil bruke visning i eget vindu på tross av denne advarselen."
+ },
+
+ dialogs: {
+ "Cancel" : "Avbryt",
+ "Insert/Modify Link" : "Rediger lenke",
+ "New window (_blank)" : "Eget vindu (_blank)",
+ "None (use implicit)" : "Ingen (bruk standardinnstilling)",
+ "OK" : "OK",
+ "Other" : "Annen",
+ "Same frame (_self)" : "Samme ramme (_self)",
+ "Target:" : "Mål:",
+ "Title (tooltip):" : "Tittel (tooltip):",
+ "Top frame (_top)" : "Toppramme (_top)",
+ "URL:" : "Adresse:",
+ "You must enter the URL where this link points to" : "Du må skrive inn en adresse som denne lenken skal peke til"
+ }
+};
+
Modified: plog/trunk/js/htmlarea/lang/pl.js
===================================================================
--- plog/trunk/js/htmlarea/lang/pl.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/pl.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,36 +1,36 @@
-// I18N constants
+// I18N constants
+
+HTMLArea.I18N = {
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "pl",
-
- tooltips: {
- bold: "Pogrubienie",
- italic: "Pochylenie",
- underline: "Podkrelenie",
- strikethrough: "Przekrelenie",
- subscript: "Indeks dolny",
- superscript: "Indeks górny",
- justifyleft: "Wyrównaj do lewej",
- justifycenter: "Wyrodkuj",
- justifyright: "Wyrównaj do prawej",
- justifyfull: "Wyjustuj",
- orderedlist: "Numerowanie",
- unorderedlist: "Wypunktowanie",
- outdent: "Zmniejsz wciêcie",
- indent: "Zwiêksz wciêcie",
- forecolor: "Kolor czcionki",
- backcolor: "Kolor t³a",
- horizontalrule: "Linia pozioma",
- createlink: "Wstaw adres sieci Web",
- insertimage: "Wstaw obraz",
- inserttable: "Wstaw tabelê",
- htmlmode: "Edycja WYSIWYG/w ródle strony",
- popupeditor: "Pe³ny ekran",
- about: "Informacje o tym edytorze",
- help: "Pomoc",
- textindicator: "Obecny styl"
- }
-};
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "pl",
+
+ tooltips: {
+ bold: "Pogrubienie",
+ italic: "Pochylenie",
+ underline: "Podkrelenie",
+ strikethrough: "Przekrelenie",
+ subscript: "Indeks dolny",
+ superscript: "Indeks górny",
+ justifyleft: "Wyrównaj do lewej",
+ justifycenter: "Wyrodkuj",
+ justifyright: "Wyrównaj do prawej",
+ justifyfull: "Wyjustuj",
+ orderedlist: "Numerowanie",
+ unorderedlist: "Wypunktowanie",
+ outdent: "Zmniejsz wciêcie",
+ indent: "Zwiêksz wciêcie",
+ forecolor: "Kolor czcionki",
+ backcolor: "Kolor t³a",
+ horizontalrule: "Linia pozioma",
+ createlink: "Wstaw adres sieci Web",
+ insertimage: "Wstaw obraz",
+ inserttable: "Wstaw tabelê",
+ htmlmode: "Edycja WYSIWYG/w ródle strony",
+ popupeditor: "Pe³ny ekran",
+ about: "Informacje o tym edytorze",
+ help: "Pomoc",
+ textindicator: "Obecny styl"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/pt_br.js
===================================================================
--- plog/trunk/js/htmlarea/lang/pt_br.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/pt_br.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,37 +1,37 @@
-// I18N constants
-// Brazilian Portuguese Translation by Alex Piaz <webmaster at globalmap.com>
+// I18N constants
+// Brazilian Portuguese Translation by Alex Piaz <webmaster at globalmap.com>
+
+HTMLArea.I18N = {
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "pt_br",
-
- tooltips: {
- bold: "Negrito",
- italic: "Itálico",
- underline: "Sublinhado",
- strikethrough: "Tachado",
- subscript: "Subescrito",
- superscript: "Sobrescrito",
- justifyleft: "Alinhar à Esquerda",
- justifycenter: "Centralizar",
- justifyright: "Alinhar à Direita",
- justifyfull: "Justificar",
- orderedlist: "Lista Numerada",
- unorderedlist: "Lista Marcadores",
- outdent: "Diminuir Indentação",
- indent: "Aumentar Indentação",
- forecolor: "Cor da Fonte",
- backcolor: "Cor do Fundo",
- horizontalrule: "Linha Horizontal",
- createlink: "Inserir Link",
- insertimage: "Inserir Imagem",
- inserttable: "Inserir Tabela",
- htmlmode: "Ver Código-Fonte",
- popupeditor: "Expandir Editor",
- about: "Sobre",
- help: "Ajuda",
- textindicator: "Estilo Atual"
- }
-};
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "pt_br",
+
+ tooltips: {
+ bold: "Negrito",
+ italic: "Itálico",
+ underline: "Sublinhado",
+ strikethrough: "Tachado",
+ subscript: "Subescrito",
+ superscript: "Sobrescrito",
+ justifyleft: "Alinhar à Esquerda",
+ justifycenter: "Centralizar",
+ justifyright: "Alinhar à Direita",
+ justifyfull: "Justificar",
+ orderedlist: "Lista Numerada",
+ unorderedlist: "Lista Marcadores",
+ outdent: "Diminuir Indentação",
+ indent: "Aumentar Indentação",
+ forecolor: "Cor da Fonte",
+ backcolor: "Cor do Fundo",
+ horizontalrule: "Linha Horizontal",
+ createlink: "Inserir Link",
+ insertimage: "Inserir Imagem",
+ inserttable: "Inserir Tabela",
+ htmlmode: "Ver Código-Fonte",
+ popupeditor: "Expandir Editor",
+ about: "Sobre",
+ help: "Ajuda",
+ textindicator: "Estilo Atual"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/ro.js
===================================================================
--- plog/trunk/js/htmlarea/lang/ro.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/ro.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,80 +1,80 @@
-// I18N constants
-
-// LANG: "ro", ENCODING: UTF-8
-// Author: Mihai Bazon, http://dynarch.com/mishoo
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "ro",
-
- tooltips: {
- bold: "ÃngroÅat",
- italic: "Italic",
- underline: "Subliniat",
- strikethrough: "TÄiat",
- subscript: "Indice jos",
- superscript: "Indice sus",
- justifyleft: "Aliniere la stânga",
- justifycenter: "Aliniere pe centru",
- justifyright: "Aliniere la dreapta",
- justifyfull: "Aliniere în ambele pÄrÅ£i",
- orderedlist: "ListÄ ordonatÄ",
- unorderedlist: "ListÄ marcatÄ",
- outdent: "MicÅoreazÄ alineatul",
- indent: "MÄreÅte alineatul",
- forecolor: "Culoarea textului",
- hilitecolor: "Culoare de fundal",
- horizontalrule: "Linie orizontalÄ",
- createlink: "InsereazÄ/modificÄ link",
- insertimage: "InsereazÄ/modificÄ imagine",
- inserttable: "InsereazÄ un tabel",
- htmlmode: "Sursa HTML / WYSIWYG",
- popupeditor: "MaximizeazÄ editorul",
- about: "Despre editor",
- showhelp: "Documentaţie (devel)",
- textindicator: "Stilul curent",
- undo: "AnuleazÄ ultima acÅ£iune",
- redo: "Reface ultima acÅ£iune anulatÄ",
- cut: "Taie în clipboard",
- copy: "Copie în clipboard",
- paste: "Aduce din clipboard",
- lefttoright: "Direcţia de scriere: stânga - dreapta",
- righttoleft: "Direcţia de scriere: dreapta - stânga"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "AnuleazÄ"
- },
-
- msg: {
- "Path": "Calea",
- "TEXT_MODE": "EÅti în modul TEXT. ApasÄ butonul [<>] pentru a te întoarce în modul WYSIWYG."
- },
-
- dialogs: {
- "Cancel" : "RenunÅ£Ä",
- "Insert/Modify Link" : "InsereazÄ/modifcÄ link",
- "New window (_blank)" : "FereastrÄ nouÄ (_blank)",
- "None (use implicit)" : "Nimic (foloseÅte ce-i implicit)",
- "OK" : "AcceptÄ",
- "Other" : "Alt target",
- "Same frame (_self)" : "AceeaÅi fereastrÄ (_self)",
- "Target:" : "Å¢inta:",
- "Title (tooltip):" : "Titlul (tooltip):",
- "Top frame (_top)" : "Fereastra principalÄ (_top)",
- "URL:" : "URL:",
- "You must enter the URL where this link points to" : "Trebuie sÄ introduceÅ£i un URL"
- }
-};
+// I18N constants
+
+// LANG: "ro", ENCODING: UTF-8
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "ro",
+
+ tooltips: {
+ bold: "ÃngroÅat",
+ italic: "Italic",
+ underline: "Subliniat",
+ strikethrough: "TÄiat",
+ subscript: "Indice jos",
+ superscript: "Indice sus",
+ justifyleft: "Aliniere la stânga",
+ justifycenter: "Aliniere pe centru",
+ justifyright: "Aliniere la dreapta",
+ justifyfull: "Aliniere în ambele pÄrÅ£i",
+ orderedlist: "ListÄ ordonatÄ",
+ unorderedlist: "ListÄ marcatÄ",
+ outdent: "MicÅoreazÄ alineatul",
+ indent: "MÄreÅte alineatul",
+ forecolor: "Culoarea textului",
+ hilitecolor: "Culoare de fundal",
+ horizontalrule: "Linie orizontalÄ",
+ createlink: "InsereazÄ/modificÄ link",
+ insertimage: "InsereazÄ/modificÄ imagine",
+ inserttable: "InsereazÄ un tabel",
+ htmlmode: "Sursa HTML / WYSIWYG",
+ popupeditor: "MaximizeazÄ editorul",
+ about: "Despre editor",
+ showhelp: "Documentaţie (devel)",
+ textindicator: "Stilul curent",
+ undo: "AnuleazÄ ultima acÅ£iune",
+ redo: "Reface ultima acÅ£iune anulatÄ",
+ cut: "Taie în clipboard",
+ copy: "Copie în clipboard",
+ paste: "Aduce din clipboard",
+ lefttoright: "Direcţia de scriere: stânga - dreapta",
+ righttoleft: "Direcţia de scriere: dreapta - stânga"
+ },
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "AnuleazÄ"
+ },
+
+ msg: {
+ "Path": "Calea",
+ "TEXT_MODE": "EÅti în modul TEXT. ApasÄ butonul [<>] pentru a te întoarce în modul WYSIWYG."
+ },
+
+ dialogs: {
+ "Cancel" : "RenunÅ£Ä",
+ "Insert/Modify Link" : "InsereazÄ/modifcÄ link",
+ "New window (_blank)" : "FereastrÄ nouÄ (_blank)",
+ "None (use implicit)" : "Nimic (foloseÅte ce-i implicit)",
+ "OK" : "AcceptÄ",
+ "Other" : "Alt target",
+ "Same frame (_self)" : "AceeaÅi fereastrÄ (_self)",
+ "Target:" : "Å¢inta:",
+ "Title (tooltip):" : "Titlul (tooltip):",
+ "Top frame (_top)" : "Fereastra principalÄ (_top)",
+ "URL:" : "URL:",
+ "You must enter the URL where this link points to" : "Trebuie sÄ introduceÅ£i un URL"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/ru.js
===================================================================
--- plog/trunk/js/htmlarea/lang/ru.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/ru.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,63 +1,63 @@
-// I18N constants
-
-// LANG: "ru", ENCODING: UTF-8 | ISO-8859-1
-// Author: Yulya Shtyryakova, <yulya at vdcom.ru>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "ru",
-
- tooltips: {
- bold: "ÐолÑжиÑнÑй",
- italic: "ÐаклоннÑй",
- underline: "ÐодÑеÑкнÑÑÑй",
- strikethrough: "ÐеÑеÑеÑкнÑÑÑй",
- subscript: "Ðижний индекÑ",
- superscript: "ÐеÑÑ
ний индекÑ",
- justifyleft: "Ðо Ð»ÐµÐ²Ð¾Ð¼Ñ ÐºÑаÑ",
- justifycenter: "Ðо ÑенÑÑÑ",
- justifyright: "Ðо пÑÐ°Ð²Ð¾Ð¼Ñ ÐºÑаÑ",
- justifyfull: "Ðо ÑиÑине",
- insertorderedlist: "ÐÑмеÑованнÑй лиÑÑ",
- insertunorderedlist: "ÐаÑкиÑованнÑй лиÑÑ",
- outdent: "УменÑÑиÑÑ Ð¾ÑÑÑÑп",
- indent: "УвелиÑиÑÑ Ð¾ÑÑÑÑп",
- forecolor: "Ð¦Ð²ÐµÑ ÑÑиÑÑа",
- hilitecolor: "Ð¦Ð²ÐµÑ Ñона",
- horizontalrule: "ÐоÑизонÑалÑнÑй ÑазделиÑелÑ",
- createlink: "ÐÑÑавиÑÑ Ð³Ð¸Ð¿ÐµÑÑÑÑлкÑ",
- insertimage: "ÐÑÑавиÑÑ Ð¸Ð·Ð¾Ð±Ñажение",
- inserttable: "ÐÑÑавиÑÑ ÑаблиÑÑ",
- htmlmode: "ÐоказаÑÑ Html-код",
- popupeditor: "УвелиÑиÑÑ ÑедакÑоÑ",
- about: "Ð ÑедакÑоÑе",
- showhelp: "ÐомоÑÑ",
- textindicator: "ТекÑÑий ÑÑилÑ",
- undo: "ÐÑмениÑÑ",
- redo: "ÐовÑоÑиÑÑ",
- cut: "ÐÑÑезаÑÑ",
- copy: "ÐопиÑоваÑÑ",
- paste: "ÐÑÑавиÑÑ"
- },
-
- buttons: {
- "ok": "OK",
- "cancel": "ÐÑмена"
- },
-
- msg: {
- "Path": "ÐÑÑÑ",
- "TEXT_MODE": "ÐÑ Ð² Ñежиме оÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Html-кода. нажмиÑе ÐºÐ½Ð¾Ð¿ÐºÑ [<>], ÑÑÐ¾Ð±Ñ Ð¿ÐµÑеклÑÑиÑÑÑÑ Ð² визÑалÑнÑй Ñежим."
- }
-};
+// I18N constants
+
+// LANG: "ru", ENCODING: UTF-8 | ISO-8859-1
+// Author: Yulya Shtyryakova, <yulya at vdcom.ru>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "ru",
+
+ tooltips: {
+ bold: "ÐолÑжиÑнÑй",
+ italic: "ÐаклоннÑй",
+ underline: "ÐодÑеÑкнÑÑÑй",
+ strikethrough: "ÐеÑеÑеÑкнÑÑÑй",
+ subscript: "Ðижний индекÑ",
+ superscript: "ÐеÑÑ
ний индекÑ",
+ justifyleft: "Ðо Ð»ÐµÐ²Ð¾Ð¼Ñ ÐºÑаÑ",
+ justifycenter: "Ðо ÑенÑÑÑ",
+ justifyright: "Ðо пÑÐ°Ð²Ð¾Ð¼Ñ ÐºÑаÑ",
+ justifyfull: "Ðо ÑиÑине",
+ orderedlist: "ÐÑмеÑованнÑй лиÑÑ",
+ unorderedlist: "ÐаÑкиÑованнÑй лиÑÑ",
+ outdent: "УменÑÑиÑÑ Ð¾ÑÑÑÑп",
+ indent: "УвелиÑиÑÑ Ð¾ÑÑÑÑп",
+ forecolor: "Ð¦Ð²ÐµÑ ÑÑиÑÑа",
+ hilitecolor: "Ð¦Ð²ÐµÑ Ñона",
+ horizontalrule: "ÐоÑизонÑалÑнÑй ÑазделиÑелÑ",
+ createlink: "ÐÑÑавиÑÑ Ð³Ð¸Ð¿ÐµÑÑÑÑлкÑ",
+ insertimage: "ÐÑÑавиÑÑ Ð¸Ð·Ð¾Ð±Ñажение",
+ inserttable: "ÐÑÑавиÑÑ ÑаблиÑÑ",
+ htmlmode: "ÐоказаÑÑ Html-код",
+ popupeditor: "УвелиÑиÑÑ ÑедакÑоÑ",
+ about: "Ð ÑедакÑоÑе",
+ showhelp: "ÐомоÑÑ",
+ textindicator: "ТекÑÑий ÑÑилÑ",
+ undo: "ÐÑмениÑÑ",
+ redo: "ÐовÑоÑиÑÑ",
+ cut: "ÐÑÑезаÑÑ",
+ copy: "ÐопиÑоваÑÑ",
+ paste: "ÐÑÑавиÑÑ"
+ },
+
+ buttons: {
+ "ok": "OK",
+ "cancel": "ÐÑмена"
+ },
+
+ msg: {
+ "Path": "ÐÑÑÑ",
+ "TEXT_MODE": "ÐÑ Ð² Ñежиме оÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Html-кода. нажмиÑе ÐºÐ½Ð¾Ð¿ÐºÑ [<>], ÑÑÐ¾Ð±Ñ Ð¿ÐµÑеклÑÑиÑÑÑÑ Ð² визÑалÑнÑй Ñежим."
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/se.js
===================================================================
--- plog/trunk/js/htmlarea/lang/se.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/se.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,38 +1,38 @@
-// Swedish version for htmlArea v3.0 - Alpha Release
-// - translated by pat<pat at engvall.nu>
-// term´s and licenses are equal to htmlarea!
+// Swedish version for htmlArea v3.0 - Alpha Release
+// - translated by pat<pat at engvall.nu>
+// term´s and licenses are equal to htmlarea!
+
+HTMLArea.I18N = {
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "se",
-
- tooltips: {
- bold: "Fet",
- italic: "Kursiv",
- underline: "Understruken",
- strikethrough: "Genomstruken",
- subscript: "Nedsänkt",
- superscript: "Upphöjd",
- justifyleft: "Vänsterjustera",
- justifycenter: "Centrera",
- justifyright: "Högerjustera",
- justifyfull: "Marginaljustera",
- orderedlist: "Numrerad lista",
- unorderedlist: "Punktlista",
- outdent: "Minska indrag",
- indent: "Öka indrag",
- forecolor: "Textfärg",
- backcolor: "Bakgrundsfärg",
- horizontalrule: "Vågrät linje",
- createlink: "Infoga länk",
- insertimage: "Infoga bild",
- inserttable: "Infoga tabell",
- htmlmode: "Visa källkod",
- popupeditor: "Visa i eget fönster",
- about: "Om denna editor",
- help: "Hjälp",
- textindicator: "Nuvarande stil"
- }
-};
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "se",
+
+ tooltips: {
+ bold: "Fet",
+ italic: "Kursiv",
+ underline: "Understruken",
+ strikethrough: "Genomstruken",
+ subscript: "Nedsänkt",
+ superscript: "Upphöjd",
+ justifyleft: "Vänsterjustera",
+ justifycenter: "Centrera",
+ justifyright: "Högerjustera",
+ justifyfull: "Marginaljustera",
+ orderedlist: "Numrerad lista",
+ unorderedlist: "Punktlista",
+ outdent: "Minska indrag",
+ indent: "Öka indrag",
+ forecolor: "Textfärg",
+ backcolor: "Bakgrundsfärg",
+ horizontalrule: "Vågrät linje",
+ createlink: "Infoga länk",
+ insertimage: "Infoga bild",
+ inserttable: "Infoga tabell",
+ htmlmode: "Visa källkod",
+ popupeditor: "Visa i eget fönster",
+ about: "Om denna editor",
+ help: "Hjälp",
+ textindicator: "Nuvarande stil"
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/si.js
===================================================================
--- plog/trunk/js/htmlarea/lang/si.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/si.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,63 +1,63 @@
-// I18N constants
-
-// LANG: "si", ENCODING: ISO-8859-2
-// Author: Tomaz Kregar, x_tomo_x at email.si
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "si",
-
- tooltips: {
- bold: "Krepko",
- italic: "Le¾eèe",
- underline: "Podèrtano",
- strikethrough: "Preèrtano",
- subscript: "Podpisano",
- superscript: "Nadpisano",
- justifyleft: "Poravnaj levo",
- justifycenter: "Na sredino",
- justifyright: "Poravnaj desno",
- justifyfull: "Porazdeli vsebino",
- orderedlist: "O¹tevilèevanje",
- unorderedlist: "Oznaèevanje",
- outdent: "Zmanj¹aj zamik",
- indent: "Poveèaj zamik",
- forecolor: "Barva pisave",
- hilitecolor: "Barva ozadja",
- horizontalrule: "Vodoravna èrta",
- createlink: "Vstavi hiperpovezavo",
- insertimage: "Vstavi sliko",
- inserttable: "Vstavi tabelo",
- htmlmode: "Preklopi na HTML kodo",
- popupeditor: "Poveèaj urejevalnik",
- about: "Vizitka za urejevalnik",
- showhelp: "Pomoè za urejevalnik",
- textindicator: "Trenutni slog",
- undo: "Razveljavi zadnjo akcijo",
- redo: "Uveljavi zadnjo akcijo",
- cut: "Izre¾i",
- copy: "Kopiraj",
- paste: "Prilepi"
- },
-
- buttons: {
- "ok": "V redu",
- "cancel": "Preklièi"
- },
-
- msg: {
- "Path": "Pot",
- "TEXT_MODE": "Si v tekstovnem naèinu. Uporabi [<>] gumb za prklop nazaj na WYSIWYG."
- }
-};
+// I18N constants
+
+// LANG: "si", ENCODING: ISO-8859-2
+// Author: Tomaz Kregar, x_tomo_x at email.si
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "si",
+
+ tooltips: {
+ bold: "Krepko",
+ italic: "Le¾eèe",
+ underline: "Podèrtano",
+ strikethrough: "Preèrtano",
+ subscript: "Podpisano",
+ superscript: "Nadpisano",
+ justifyleft: "Poravnaj levo",
+ justifycenter: "Na sredino",
+ justifyright: "Poravnaj desno",
+ justifyfull: "Porazdeli vsebino",
+ orderedlist: "O¹tevilèevanje",
+ unorderedlist: "Oznaèevanje",
+ outdent: "Zmanj¹aj zamik",
+ indent: "Poveèaj zamik",
+ forecolor: "Barva pisave",
+ hilitecolor: "Barva ozadja",
+ horizontalrule: "Vodoravna èrta",
+ createlink: "Vstavi hiperpovezavo",
+ insertimage: "Vstavi sliko",
+ inserttable: "Vstavi tabelo",
+ htmlmode: "Preklopi na HTML kodo",
+ popupeditor: "Poveèaj urejevalnik",
+ about: "Vizitka za urejevalnik",
+ showhelp: "Pomoè za urejevalnik",
+ textindicator: "Trenutni slog",
+ undo: "Razveljavi zadnjo akcijo",
+ redo: "Uveljavi zadnjo akcijo",
+ cut: "Izre¾i",
+ copy: "Kopiraj",
+ paste: "Prilepi"
+ },
+
+ buttons: {
+ "ok": "V redu",
+ "cancel": "Preklièi"
+ },
+
+ msg: {
+ "Path": "Pot",
+ "TEXT_MODE": "Si v tekstovnem naèinu. Uporabi [<>] gumb za prklop nazaj na WYSIWYG."
+ }
+};
Modified: plog/trunk/js/htmlarea/lang/vn.js
===================================================================
--- plog/trunk/js/htmlarea/lang/vn.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/lang/vn.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,51 +1,77 @@
-// I18N constants : Vietnamese
-// LANG: "en", ENCODING: UTF-8
-// Author: Nguyá»
n Äình Nam, <hncryptologist at yahoo.com>
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "vn",
-
- tooltips: {
- bold: "Äáºm",
- italic: "Nghiêng",
- underline: "Gạch Chân",
- strikethrough: "Gạch Xóa",
- subscript: "Viết Xuá»ng Dưá»i",
- superscript: "Viết Lên Trên",
- justifyleft: "CÄn Trái",
- justifycenter: "CÄn Giữa",
- justifyright: "CÄn Phải",
- justifyfull: "CÄn Äá»u",
- orderedlist: "Danh Sách Có Thứ Tự",
- unorderedlist: "Danh Sách Phi Thứ Tự",
- outdent: "Lùi Ra Ngoà i",
- indent: "Thụt Và o Trong",
- forecolor: "Mà u Chữ",
- backcolor: "Mà u Ná»n",
- horizontalrule: "Dòng Kẻ Ngang",
- createlink: "Tạo Liên Kết",
- insertimage: "Chèn Ảnh",
- inserttable: "Chèn Bảng",
- htmlmode: "Chế Äá» Mã HTML",
- popupeditor: "Phóng To à Soạn Thảo",
- about: "Tá»± Giá»i Thiá»u",
- showhelp: "Giúp Äỡ",
- textindicator: "Äá»nh Dạng Hiá»n Thá»i",
- undo: "Undo",
- redo: "Redo",
- cut: "Cắt",
- copy: "Copy",
- paste: "Dán"
- },
- buttons: {
- "ok": "OK",
- "cancel": "Há»§y"
- },
- msg: {
- "Path": "ÄÆ°á»ng Dẫn",
- "TEXT_MODE": "Bạn Äang á» chế Äá» text. Sá» dụng nút [<>] Äá» chuyá»n lại chế Äá» WYSIWIG."
- }
-};
+// I18N constants : Vietnamese
+// LANG: "en", ENCODING: UTF-8
+// Author: Nguyá»
n Äình Nam, <hncryptologist at yahoo.com>
+// Modified 21/07/2004 by Phạm Mai Quân <pmquan at 4vn.org>
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "vn",
+
+ tooltips: {
+ bold: "Äáºm",
+ italic: "Nghiêng",
+ underline: "Gạch Chân",
+ strikethrough: "Gạch Xóa",
+ subscript: "Viết Xuá»ng Dưá»i",
+ superscript: "Viết Lên Trên",
+ justifyleft: "CÄn Trái",
+ justifycenter: "CÄn Giữa",
+ justifyright: "CÄn Phải",
+ justifyfull: "CÄn Äá»u",
+ insertorderedlist: "Danh Sách Có Thứ Tự (1, 2, 3)",
+ insertunorderedlist: "Danh Sách Phi Thứ Tá»± (Chấm Äầu dòng)",
+ outdent: "Lùi Ra Ngoà i",
+ indent: "Thụt Và o Trong",
+ forecolor: "Mà u Chữ",
+ hilitecolor: "Mà u Ná»n",
+ inserthorizontalrule: "Dòng Kẻ Ngang",
+ createlink: "Tạo Liên Kết",
+ insertimage: "Chèn Ảnh",
+ inserttable: "Chèn Bảng",
+ htmlmode: "Chế Äá» Mã HTML",
+ popupeditor: "Phóng To à Soạn Thảo",
+ about: "Tá»± Giá»i Thiá»u",
+ showhelp: "Giúp Äỡ",
+ textindicator: "Äá»nh Dạng Hiá»n Thá»i",
+ undo: "Há»§y thao tác trưá»c",
+ redo: "Lấy lại thao tác vừa bá»",
+ cut: "Cắt",
+ copy: "Sao chép",
+ paste: "Dán",
+ lefttoright: "Viết từ trái sang phải",
+ righttoleft: "Viết từ phải sang trái"
+ },
+ buttons: {
+ "ok": "Äá»ng ý",
+ "cancel": "Há»§y",
+
+ "IE-sucks-full-screen" :
+ // translate here
+ "Chế Äá» phóng to ô soạn thảo có thá» gây lá»i vá»i Internet Explorer vì má»t sá» lá»i cá»§a trình duyá»t nà y," +
+ " vì thế chế Äá» nà y có thá» sẽ không chạy. Hiá»n thá» không Äúng, lá»n xá»n, không có Äầy Äá»§ chức nÄng," +
+ " và cÅ©ng có thá» là m trình duyá»t cá»§a bạn bá» tắt ngang. Nếu bạn Äang sá» dụng Windows 9x " +
+ "bạn có thá» bá» báo lá»i 'General Protection Fault' và máy tÃnh cá»§a bạn buá»c phải khá»i Äá»ng lại.\n\n" +
+ "Chúng tôi Äã cảnh báo bạn. Nhấn nút 'Äá»ng ý' nếu bạn vẫn muá»n sá» dụng tÃnh nÄng nà y."
+ },
+ msg: {
+ "Path": "ÄÆ°á»ng Dẫn",
+ "TEXT_MODE": "Bạn Äang á» chế Äá» text. Sá» dụng nút [<>] Äá» chuyá»n lại chế Äá» WYSIWIG."
+ },
+
+ dialogs: {
+ "Cancel" : "Há»§y",
+ "Insert/Modify Link" : "Thêm/Chá»nh sá»a ÄÆ°á»ng dẫn",
+ "New window (_blank)" : "Cá»a sá» má»i (_blank)",
+ "None (use implicit)" : "Không (sỠdụng implicit)",
+ "OK" : "Äá»ng ý",
+ "Other" : "Khác",
+ "Same frame (_self)" : "Trên cùng khung (_self)",
+ "Target:" : "NÆ¡i hiá»n thá»:",
+ "Title (tooltip):" : "Tiêu Äá» (cá»§a hưá»ng dẫn):",
+ "Top frame (_top)" : "Khung trên cùng (_top)",
+ "URL:" : "URL:",
+ "You must enter the URL where this link points to" : "Bạn phải Äiá»n Äá»a chá» (URL) mÃ ÄÆ°á»ng dẫn sẽ liên kết tá»i"
+ }
+};
Deleted: plog/trunk/js/htmlarea/license.txt
===================================================================
--- plog/trunk/js/htmlarea/license.txt 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/license.txt 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,30 +0,0 @@
-htmlArea License (based on BSD license)
-Copyright (c) 2002-2004, interactivetools.com, inc.
-Copyright (c) 2003-2004 dynarch.com
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1) Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
-2) Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-3) Neither the name of interactivetools.com, inc. nor the names of its
- contributors may be used to endorse or promote products derived from this
- software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
Modified: plog/trunk/js/htmlarea/plugins/CSS/css.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/CSS/css.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/CSS/css.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,116 +1,116 @@
-// Simple CSS (className) plugin for the editor
-// Sponsored by http://www.miro.com.au
-// Implementation by Mihai Bazon, http://dynarch.com/mishoo.
-//
-// (c) dynarch.com 2003
-// Distributed under the same terms as HTMLArea itself.
-// This notice MUST stay intact for use (see license.txt).
-//
-// $Id: css.js,v 1.4 2003/11/24 01:34:33 mishoo Exp $
-
-function CSS(editor, params) {
- this.editor = editor;
- var cfg = editor.config;
- var toolbar = cfg.toolbar;
- var self = this;
- var i18n = CSS.I18N;
- var plugin_config = params[0];
- var combos = plugin_config.combos;
-
- var first = true;
- for (var i = combos.length; --i >= 0;) {
- var combo = combos[i];
- var id = "CSS-class" + i;
- var css_class = {
- id : id,
- options : combo.options,
- action : function(editor) { self.onSelect(editor, this, combo.context, combo.updatecontextclass); },
- refresh : function(editor) { self.updateValue(editor, this); },
- context : combo.context
- };
- cfg.registerDropdown(css_class);
-
- // prepend to the toolbar
- toolbar[1].splice(0, 0, first ? "separator" : "space");
- toolbar[1].splice(0, 0, id);
- if (combo.label)
- toolbar[1].splice(0, 0, "T[" + combo.label + "]");
- first = false;
- }
-};
-
-CSS._pluginInfo = {
- name : "CSS",
- version : "1.0",
- developer : "Mihai Bazon",
- developer_url : "http://dynarch.com/mishoo/",
- c_owner : "Mihai Bazon",
- sponsor : "Miro International",
- sponsor_url : "http://www.miro.com.au",
- license : "htmlArea"
-};
-
-CSS.prototype.onSelect = function(editor, obj, context, updatecontextclass) {
- var tbobj = editor._toolbarObjects[obj.id];
- var index = tbobj.element.selectedIndex;
- var className = tbobj.element.value;
-
- // retrieve parent element of the selection
- var parent = editor.getParentElement();
- var surround = true;
-
- var is_span = (parent && parent.tagName.toLowerCase() == "span");
- var update_parent = (context && updatecontextclass && parent && parent.tagName.toLowerCase() == context);
-
- if (update_parent) {
- parent.className = className;
- editor.updateToolbar();
- return;
- }
-
- if (is_span && index == 0 && !/\S/.test(parent.style.cssText)) {
- while (parent.firstChild) {
- parent.parentNode.insertBefore(parent.firstChild, parent);
- }
- parent.parentNode.removeChild(parent);
- editor.updateToolbar();
- return;
- }
-
- if (is_span) {
- // maybe we could simply change the class of the parent node?
- if (parent.childNodes.length == 1) {
- parent.className = className;
- surround = false;
- // in this case we should handle the toolbar updation
- // ourselves.
- editor.updateToolbar();
- }
- }
-
- // Other possibilities could be checked but require a lot of code. We
- // can't afford to do that now.
- if (surround) {
- // shit happens ;-) most of the time. this method works, but
- // it's dangerous when selection spans multiple block-level
- // elements.
- editor.surroundHTML("<span class='" + className + "'>", "</span>");
- }
-};
-
-CSS.prototype.updateValue = function(editor, obj) {
- var select = editor._toolbarObjects[obj.id].element;
- var parent = editor.getParentElement();
- if (typeof parent.className != "undefined" && /\S/.test(parent.className)) {
- var options = select.options;
- var value = parent.className;
- for (var i = options.length; --i >= 0;) {
- var option = options[i];
- if (value == option.value) {
- select.selectedIndex = i;
- return;
- }
- }
- }
- select.selectedIndex = 0;
-};
+// Simple CSS (className) plugin for the editor
+// Sponsored by http://www.miro.com.au
+// Implementation by Mihai Bazon, http://dynarch.com/mishoo.
+//
+// (c) dynarch.com 2003-2005.
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+//
+// $Id: css.js,v 1.5 2005/01/20 17:49:03 mishoo Exp $
+
+function CSS(editor, params) {
+ this.editor = editor;
+ var cfg = editor.config;
+ var toolbar = cfg.toolbar;
+ var self = this;
+ var i18n = CSS.I18N;
+ var plugin_config = params[0];
+ var combos = plugin_config.combos;
+
+ var first = true;
+ for (var i = combos.length; --i >= 0;) {
+ var combo = combos[i];
+ var id = "CSS-class" + i;
+ var css_class = {
+ id : id,
+ options : combo.options,
+ action : function(editor) { self.onSelect(editor, this, combo.context, combo.updatecontextclass); },
+ refresh : function(editor) { self.updateValue(editor, this); },
+ context : combo.context
+ };
+ cfg.registerDropdown(css_class);
+
+ // prepend to the toolbar
+ toolbar[1].splice(0, 0, first ? "separator" : "space");
+ toolbar[1].splice(0, 0, id);
+ if (combo.label)
+ toolbar[1].splice(0, 0, "T[" + combo.label + "]");
+ first = false;
+ }
+};
+
+CSS._pluginInfo = {
+ name : "CSS",
+ version : "1.0",
+ developer : "Mihai Bazon",
+ developer_url : "http://dynarch.com/mishoo/",
+ c_owner : "Mihai Bazon",
+ sponsor : "Miro International",
+ sponsor_url : "http://www.miro.com.au",
+ license : "htmlArea"
+};
+
+CSS.prototype.onSelect = function(editor, obj, context, updatecontextclass) {
+ var tbobj = editor._toolbarObjects[obj.id];
+ var index = tbobj.element.selectedIndex;
+ var className = tbobj.element.value;
+
+ // retrieve parent element of the selection
+ var parent = editor.getParentElement();
+ var surround = true;
+
+ var is_span = (parent && parent.tagName.toLowerCase() == "span");
+ var update_parent = (context && updatecontextclass && parent && parent.tagName.toLowerCase() == context);
+
+ if (update_parent) {
+ parent.className = className;
+ editor.updateToolbar();
+ return;
+ }
+
+ if (is_span && index == 0 && !/\S/.test(parent.style.cssText)) {
+ while (parent.firstChild) {
+ parent.parentNode.insertBefore(parent.firstChild, parent);
+ }
+ parent.parentNode.removeChild(parent);
+ editor.updateToolbar();
+ return;
+ }
+
+ if (is_span) {
+ // maybe we could simply change the class of the parent node?
+ if (parent.childNodes.length == 1) {
+ parent.className = className;
+ surround = false;
+ // in this case we should handle the toolbar updation
+ // ourselves.
+ editor.updateToolbar();
+ }
+ }
+
+ // Other possibilities could be checked but require a lot of code. We
+ // can't afford to do that now.
+ if (surround) {
+ // shit happens ;-) most of the time. this method works, but
+ // it's dangerous when selection spans multiple block-level
+ // elements.
+ editor.surroundHTML("<span class='" + className + "'>", "</span>");
+ }
+};
+
+CSS.prototype.updateValue = function(editor, obj) {
+ var select = editor._toolbarObjects[obj.id].element;
+ var parent = editor.getParentElement();
+ if (typeof parent.className != "undefined" && /\S/.test(parent.className)) {
+ var options = select.options;
+ var value = parent.className;
+ for (var i = options.length; --i >= 0;) {
+ var option = options[i];
+ if (value == option.value) {
+ select.selectedIndex = i;
+ return;
+ }
+ }
+ }
+ select.selectedIndex = 0;
+};
Modified: plog/trunk/js/htmlarea/plugins/CSS/lang/en.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/CSS/lang/en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/CSS/lang/en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,2 +1,2 @@
-// none yet; this file is a stub.
-CSS.I18N = {};
+// none yet; this file is a stub.
+CSS.I18N = {};
Added: plog/trunk/js/htmlarea/plugins/CharacterMap/character-map.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/CharacterMap/character-map.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/CharacterMap/character-map.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,70 @@
+// Character Map plugin for HTMLArea
+// Sponsored by http://www.systemconcept.de
+// Implementation by Holger Hees based on HTMLArea XTD 1.5 (http://mosforge.net/projects/htmlarea3xtd/)
+// Original Author - Bernhard Pfeifer novocaine at gmx.net
+//
+// (c) systemconcept.de 2004
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+
+function CharacterMap(editor) {
+ this.editor = editor;
+
+ var cfg = editor.config;
+ var toolbar = cfg.toolbar;
+ var self = this;
+ var i18n = CharacterMap.I18N;
+
+ cfg.registerButton({
+ id : "insertcharacter",
+ tooltip : i18n["CharacterMapTooltip"],
+ image : editor.imgURL("ed_charmap.gif", "CharacterMap"),
+ textMode : false,
+ action : function(editor) {
+ self.buttonPress(editor);
+ }
+ })
+
+ var a, i, j, found = false;
+ for (i = 0; !found && i < toolbar.length; ++i) {
+ a = toolbar[i];
+ for (j = 0; j < a.length; ++j) {
+ if (a[j] == "inserthorizontalrule") {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (found)
+ a.splice(j, 0, "insertcharacter");
+ else{
+ toolbar[1].splice(0, 0, "separator");
+ toolbar[1].splice(0, 0, "insertcharacter");
+ }
+};
+
+CharacterMap._pluginInfo = {
+ name : "CharacterMap",
+ version : "1.0",
+ developer : "Holger Hees & Bernhard Pfeifer",
+ developer_url : "http://www.systemconcept.de/",
+ c_owner : "Holger Hees & Bernhard Pfeifer",
+ sponsor : "System Concept GmbH & Bernhard Pfeifer",
+ sponsor_url : "http://www.systemconcept.de/",
+ license : "htmlArea"
+};
+
+CharacterMap.prototype.buttonPress = function(editor) {
+ editor._popupDialog( "plugin://CharacterMap/select_character", function( entity )
+ {
+ if ( !entity )
+ {
+ //user must have pressed Cancel
+ return false;
+ }
+
+ editor.insertHTML( entity );
+
+ }, null);
+}
+
Added: plog/trunk/js/htmlarea/plugins/CharacterMap/img/ed_charmap.gif
===================================================================
(Binary files differ)
Property changes on: plog/trunk/js/htmlarea/plugins/CharacterMap/img/ed_charmap.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: plog/trunk/js/htmlarea/plugins/CharacterMap/lang/de.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/CharacterMap/lang/de.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/CharacterMap/lang/de.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,16 @@
+// I18N constants
+
+// LANG: "de", ENCODING: UTF-8 | ISO-8859-1
+// Sponsored by http://www.systemconcept.de
+// Author: Holger Hees, <hhees at systemconcept.de>
+//
+// (c) systemconcept.de 2004
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+
+CharacterMap.I18N = {
+ "CharacterMapTooltip" : "Sonderzeichen einfügen",
+ "Insert special character" : "Sonderzeichen einfügen",
+ "HTML value:" : "HTML Wert:",
+ "Cancel" : "Abbrechen"
+};
Added: plog/trunk/js/htmlarea/plugins/CharacterMap/lang/en.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/CharacterMap/lang/en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/CharacterMap/lang/en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,16 @@
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Sponsored by http://www.systemconcept.de
+// Author: Holger Hees, <hhees at systemconcept.de>
+//
+// (c) systemconcept.de 2004
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+
+CharacterMap.I18N = {
+ "CharacterMapTooltip" : "Insert special character",
+ "Insert special character" : "Insert special character",
+ "HTML value:" : "HTML value:",
+ "Cancel" : "Cancel"
+};
Added: plog/trunk/js/htmlarea/plugins/CharacterMap/popups/select_character.html
===================================================================
--- plog/trunk/js/htmlarea/plugins/CharacterMap/popups/select_character.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/CharacterMap/popups/select_character.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,251 @@
+<html>
+<head>
+<title>Insert special character</title>
+<style type="text/css">
+ at import url(../../../htmlarea.css);
+td.character {
+ font-family: Verdana,Arial,Helvetica,sans-serif;
+ font-size: 14px;
+ font-weight: bold;
+ text-align: center;
+ background: #FFF;
+ padding: 4px;
+}
+
+td.character-hilite {
+ background: Highlight;
+ color: HighlightText;
+}
+
+html, body {
+ background: ButtonFace;
+ color: ButtonText;
+ font: 11px Tahoma,Verdana,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+body { padding: 5px; }
+table {
+ font: 11px Tahoma,Verdana,sans-serif;
+}
+select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
+button { width: 70px; }
+table .label { text-align: right; width: 8em; }
+
+.title { background: none; color: #000; font-weight: bold; font-size: 120%; padding: 3px 10px; margin-bottom: 10px;
+border-bottom: 1px solid black; letter-spacing: 2px;
+}
+#buttons {
+ margin-top: 1em; border-top: 1px solid #999;
+ padding: 2px; text-align: right;
+}
+</style>
+<script type="text/javascript" src="../../../popups/popup.js"></script>
+<script type="text/javascript">
+// HTMLSource based on HTMLArea XTD 1.5 (http://mosforge.net/projects/htmlarea3xtd/) modified by Holger Hees
+// Original Author - Bernhard Pfeifer novocaine at gmx.net
+
+CharacterMap = window.opener.CharacterMap; // load the CharacterMap plugin and lang file ;-)
+window.resizeTo(480, 300);
+// center on parent
+var x = opener.screenX + (opener.outerWidth - window.outerWidth) / 2;
+var y = opener.screenY + (opener.outerHeight - window.outerHeight) / 2;
+window.moveTo(x, y);
+
+function _CloseOnEsc()
+{
+ if ( event.keyCode == 27 )
+ {
+ window.close();
+ return;
+ }
+}
+
+function Init() // run on page load
+{
+ __dlg_translate(CharacterMap.I18N);
+ __dlg_init();
+ document.body.onkeypress = _CloseOnEsc;
+
+ var character = ''; // set default input to empty
+ View( null, character );
+}
+
+var oldView = null;
+function View( td, character ) // preview character
+{
+ if (oldView)
+ oldView.className = oldView.className.replace(/\s+character-hilite/, '');
+ document.getElementById( 'characterPreview' ).value = character;
+ document.getElementById( 'showCharacter' ).value = character;
+ if (td)
+ (oldView = td).className += " character-hilite";
+}
+
+function Set( string ) // return character
+{
+ var character = string;
+
+ __dlg_close( character );
+}
+
+function onCancel() // cancel selection
+{
+ __dlg_close( null );
+
+ return false;
+};
+
+</script>
+</head>
+<body style="background: Buttonface; margin: 0px; padding: 0px" onload="Init();self.focus();">
+<form method="get" style="margin:2px; padding:2px" onSubmit="Set(document.getElementById('showCharacter').value); return false;">
+<table border="0" cellspacing="0" cellpadding="4" width="100%">
+ <tr>
+ <td style="background: Buttonface" valign="center"><div style="padding: 1px; white-space: nowrap; font-family: tahoma,arial,sans-serif; font-size: 11px; font-weight: normal;">HTML value:<div id="characterPreview"></div></div></td>
+ <td style="background: Buttonface" valign="center"><input type="text" name="showcharacter" id="showCharacter" value="" size="15" style="background: #fff; font-size: 11px;" /></td>
+ <td style="background: Buttonface" width="100%"></td>
+ </tr>
+</table>
+</form>
+<table border="0" cellspacing="1" cellpadding="0" width="100%" style="cursor: pointer; background: #ADAD9C; border: 1px inset;">
+<tr>
+<td class="character" onMouseOver="View(this,'&Yuml;')" onClick="Set('Ÿ')">Ÿ</td>
+<td class="character" onMouseOver="View(this,'&scaron;')" onClick="Set('š')">š</td>
+<td class="character" onMouseOver="View(this,'&#064;')" onClick="Set('@')">@</td>
+<td class="character" onMouseOver="View(this,'&quot;')" onClick="Set('"')">"</td>
+<td class="character" onMouseOver="View(this,'&iexcl;')" onClick="Set('¡')">¡</td>
+<td class="character" onMouseOver="View(this,'&cent;')" onClick="Set('¢')">¢</td>
+<td class="character" onMouseOver="View(this,'&pound;')" onClick="Set('£')">£</td>
+<td class="character" onMouseOver="View(this,'&curren;')" onClick="Set('¤')">¤</td>
+<td class="character" onMouseOver="View(this,'&yen;')" onClick="Set('¥')">¥</td>
+<td class="character" onMouseOver="View(this,'&brvbar;')" onClick="Set('¦')">¦</td>
+<td class="character" onMouseOver="View(this,'&sect;')" onClick="Set('§')">§</td>
+<td class="character" onMouseOver="View(this,'&uml;')" onClick="Set('¨')">¨</td>
+<td class="character" onMouseOver="View(this,'&copy;')" onClick="Set('©')">©</td>
+<td class="character" onMouseOver="View(this,'&ordf;')" onClick="Set('ª')">ª</td>
+<td class="character" onMouseOver="View(this,'&laquo;')" onClick="Set('«')">«</td>
+<td class="character" onMouseOver="View(this,'&not;')" onClick="Set('¬')">¬</td>
+</tr><tr>
+<td class="character" onMouseOver="View(this,'&macr;')" onClick="Set('¯')">¯</td>
+<td class="character" onMouseOver="View(this,'&deg;')" onClick="Set('°')">°</td>
+<td class="character" onMouseOver="View(this,'&plusmn;')" onClick="Set('±')">±</td>
+<td class="character" onMouseOver="View(this,'&sup2;')" onClick="Set('²')">²</td>
+<td class="character" onMouseOver="View(this,'&sup3;')" onClick="Set('³')">³</td>
+<td class="character" onMouseOver="View(this,'&acute;')" onClick="Set('´')">´</td>
+<td class="character" onMouseOver="View(this,'&micro;')" onClick="Set('µ')">µ</td>
+<td class="character" onMouseOver="View(this,'&para;')" onClick="Set('¶')">¶</td>
+<td class="character" onMouseOver="View(this,'&middot;')" onClick="Set('·')">·</td>
+<td class="character" onMouseOver="View(this,'&cedil;')" onClick="Set('¸')">¸</td>
+<td class="character" onMouseOver="View(this,'&sup1;')" onClick="Set('¹')">¹</td>
+<td class="character" onMouseOver="View(this,'&ordm;')" onClick="Set('º')">º</td>
+<td class="character" onMouseOver="View(this,'&raquo;')" onClick="Set('»')">»</td>
+<td class="character" onMouseOver="View(this,'&frac14;')" onClick="Set('¼')">¼</td>
+<td class="character" onMouseOver="View(this,'&frac12;')" onClick="Set('½')">½</td>
+<td class="character" onMouseOver="View(this,'&frac34;')" onClick="Set('¾')">¾</td>
+</tr><tr>
+<td class="character" onMouseOver="View(this,'&iquest;')" onClick="Set('¿')">¿</td>
+<td class="character" onMouseOver="View(this,'&times;')" onClick="Set('×')">×</td>
+<td class="character" onMouseOver="View(this,'&Oslash;')" onClick="Set('Ø')">Ø</td>
+<td class="character" onMouseOver="View(this,'&divide;')" onClick="Set('÷')">÷</td>
+<td class="character" onMouseOver="View(this,'&oslash;')" onClick="Set('ø')">ø</td>
+<td class="character" onMouseOver="View(this,'&fnof;')" onClick="Set('ƒ')">ƒ</td>
+<td class="character" onMouseOver="View(this,'&circ;')" onClick="Set('ˆ')">ˆ</td>
+<td class="character" onMouseOver="View(this,'&tilde;')" onClick="Set('˜')">˜</td>
+<td class="character" onMouseOver="View(this,'&ndash;')" onClick="Set('–')">–</td>
+<td class="character" onMouseOver="View(this,'&mdash;')" onClick="Set('—')">—</td>
+<td class="character" onMouseOver="View(this,'&lsquo;')" onClick="Set('‘')">‘</td>
+<td class="character" onMouseOver="View(this,'&rsquo;')" onClick="Set('’')">’</td>
+<td class="character" onMouseOver="View(this,'&sbquo;')" onClick="Set('‚')">‚</td>
+<td class="character" onMouseOver="View(this,'&ldquo;')" onClick="Set('“')">“</td>
+<td class="character" onMouseOver="View(this,'&rdquo;')" onClick="Set('”')">”</td>
+<td class="character" onMouseOver="View(this,'&bdquo;')" onClick="Set('„')">„</td>
+</tr><tr>
+<td class="character" onMouseOver="View(this,'&dagger;')" onClick="Set('†')">†</td>
+<td class="character" onMouseOver="View(this,'&Dagger;')" onClick="Set('‡')">‡</td>
+<td class="character" onMouseOver="View(this,'&bull;')" onClick="Set('•')">•</td>
+<td class="character" onMouseOver="View(this,'&hellip;')" onClick="Set('…')">…</td>
+<td class="character" onMouseOver="View(this,'&permil;')" onClick="Set('‰')">‰</td>
+<td class="character" onMouseOver="View(this,'&lsaquo;')" onClick="Set('‹')">‹</td>
+<td class="character" onMouseOver="View(this,'&rsaquo;')" onClick="Set('›')">›</td>
+<td class="character" onMouseOver="View(this,'&euro;')" onClick="Set('€')">€</td>
+<td class="character" onMouseOver="View(this,'&trade;')" onClick="Set('™')">™</td>
+<td class="character" onMouseOver="View(this,'&Agrave;')" onClick="Set('À')">À</td>
+<td class="character" onMouseOver="View(this,'&Aacute;')" onClick="Set('Á')">Á</td>
+<td class="character" onMouseOver="View(this,'&Acirc;')" onClick="Set('Â')">Â</td>
+<td class="character" onMouseOver="View(this,'&Atilde;')" onClick="Set('Ã')">Ã</td>
+<td class="character" onMouseOver="View(this,'&Auml;')" onClick="Set('Ä')">Ä</td>
+<td class="character" onMouseOver="View(this,'&Aring;')" onClick="Set('Å')">Å</td>
+<td class="character" onMouseOver="View(this,'&AElig;')" onClick="Set('Æ')">Æ</td>
+</tr><tr>
+<td class="character" onMouseOver="View(this,'&Ccedil;')" onClick="Set('Ç')">Ç</td>
+<td class="character" onMouseOver="View(this,'&Egrave;')" onClick="Set('È')">È</td>
+<td class="character" onMouseOver="View(this,'&Eacute;')" onClick="Set('É')">É</td>
+<td class="character" onMouseOver="View(this,'&Ecirc;')" onClick="Set('Ê')">Ê</td>
+<td class="character" onMouseOver="View(this,'&Euml;')" onClick="Set('Ë')">Ë</td>
+<td class="character" onMouseOver="View(this,'&Igrave;')" onClick="Set('Ì')">Ì</td>
+<td class="character" onMouseOver="View(this,'&Iacute;')" onClick="Set('Í')">Í</td>
+<td class="character" onMouseOver="View(this,'&Icirc;')" onClick="Set('Î')">Î</td>
+<td class="character" onMouseOver="View(this,'&Iuml;')" onClick="Set('Ï')">Ï</td>
+<td class="character" onMouseOver="View(this,'&ETH;')" onClick="Set('Ð')">Ð</td>
+<td class="character" onMouseOver="View(this,'&Ntilde;')" onClick="Set('Ñ')">Ñ</td>
+<td class="character" onMouseOver="View(this,'&Ograve;')" onClick="Set('Ò')">Ò</td>
+<td class="character" onMouseOver="View(this,'&Oacute;')" onClick="Set('Ó')">Ó</td>
+<td class="character" onMouseOver="View(this,'&Ocirc;')" onClick="Set('Ô')">Ô</td>
+<td class="character" onMouseOver="View(this,'&Otilde;')" onClick="Set('Õ')">Õ</td>
+<td class="character" onMouseOver="View(this,'&Ouml;')" onClick="Set('Ö')">Ö</td>
+</tr><tr>
+<td class="character" onMouseOver="View(this,'&reg;')" onClick="Set('®')">®</td>
+<td class="character" onMouseOver="View(this,'&times;')" onClick="Set('×')">×</td>
+<td class="character" onMouseOver="View(this,'&Ugrave;')" onClick="Set('Ù')">Ù</td>
+<td class="character" onMouseOver="View(this,'&Uacute;')" onClick="Set('Ú')">Ú</td>
+<td class="character" onMouseOver="View(this,'&Ucirc;')" onClick="Set('Û')">Û</td>
+<td class="character" onMouseOver="View(this,'&Uuml;')" onClick="Set('Ü')">Ü</td>
+<td class="character" onMouseOver="View(this,'&Yacute;')" onClick="Set('Ý')">Ý</td>
+<td class="character" onMouseOver="View(this,'&THORN;')" onClick="Set('Þ')">Þ</td>
+<td class="character" onMouseOver="View(this,'&szlig;')" onClick="Set('ß')">ß</td>
+<td class="character" onMouseOver="View(this,'&agrave;')" onClick="Set('à')">à</td>
+<td class="character" onMouseOver="View(this,'&aacute;')" onClick="Set('á')">á</td>
+<td class="character" onMouseOver="View(this,'&acirc;')" onClick="Set('â')">â</td>
+<td class="character" onMouseOver="View(this,'&atilde;')" onClick="Set('ã')">ã</td>
+<td class="character" onMouseOver="View(this,'&auml;')" onClick="Set('ä')">ä</td>
+<td class="character" onMouseOver="View(this,'&aring;')" onClick="Set('å')">å</td>
+<td class="character" onMouseOver="View(this,'&aelig;')" onClick="Set('æ')">æ</td>
+</tr><tr>
+<td class="character" onMouseOver="View(this,'&ccedil;')" onClick="Set('ç')">ç</td>
+<td class="character" onMouseOver="View(this,'&egrave;')" onClick="Set('è')">è</td>
+<td class="character" onMouseOver="View(this,'&eacute;')" onClick="Set('é')">é</td>
+<td class="character" onMouseOver="View(this,'&ecirc;')" onClick="Set('ê')">ê</td>
+<td class="character" onMouseOver="View(this,'&euml;')" onClick="Set('ë')">ë</td>
+<td class="character" onMouseOver="View(this,'&igrave;')" onClick="Set('ì')">ì</td>
+<td class="character" onMouseOver="View(this,'&iacute;')" onClick="Set('í')">í</td>
+<td class="character" onMouseOver="View(this,'&icirc;')" onClick="Set('î')">î</td>
+<td class="character" onMouseOver="View(this,'&iuml;')" onClick="Set('ï')">ï</td>
+<td class="character" onMouseOver="View(this,'&eth;')" onClick="Set('ð')">ð</td>
+<td class="character" onMouseOver="View(this,'&ntilde;')" onClick="Set('ñ')">ñ</td>
+<td class="character" onMouseOver="View(this,'&ograve;')" onClick="Set('ò')">ò</td>
+<td class="character" onMouseOver="View(this,'&oacute;')" onClick="Set('ó')">ó</td>
+<td class="character" onMouseOver="View(this,'&ocirc;')" onClick="Set('ô')">ô</td>
+<td class="character" onMouseOver="View(this,'&otilde;')" onClick="Set('õ')">õ</td>
+<td class="character" onMouseOver="View(this,'&ouml;')" onClick="Set('ö')">ö</td>
+</tr><tr>
+<td class="character" onMouseOver="View(this,'&divide;')" onClick="Set('÷')">÷</td>
+<td class="character" onMouseOver="View(this,'&oslash;')" onClick="Set('ø')">ø</td>
+<td class="character" onMouseOver="View(this,'&ugrave;')" onClick="Set('ù')">ù</td>
+<td class="character" onMouseOver="View(this,'&uacute;')" onClick="Set('ú')">ú</td>
+<td class="character" onMouseOver="View(this,'&ucirc;')" onClick="Set('û')">û</td>
+<td class="character" onMouseOver="View(this,'&uuml;')" onClick="Set('ü')">ü</td>
+<td class="character" onMouseOver="View(this,'&yacute;')" onClick="Set('ý')">ý</td>
+<td class="character" onMouseOver="View(this,'&thorn;')" onClick="Set('þ')">þ</td>
+<td class="character" onMouseOver="View(this,'&yuml;')" onClick="Set('ÿ')">ÿ</td>
+<td class="character" onMouseOver="View(this,'&OElig;')" onClick="Set('Œ')">Œ</td>
+<td class="character" onMouseOver="View(this,'&oelig;')" onClick="Set('œ')">œ</td>
+<td class="character" onMouseOver="View(this,'&Scaron;')" onClick="Set('Š')">Š</td>
+<td class="character"> </td>
+<td class="character"> </td>
+<td class="character"> </td>
+<td class="character"> </td>
+</table><br />
+<form style="text-align: center;"><button type="button" name="cancel" onclick="return onCancel();" class="submitInsertTable">Cancel</button></form>
+</body>
+</html>
Modified: plog/trunk/js/htmlarea/plugins/ContextMenu/context-menu.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/ContextMenu/context-menu.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/ContextMenu/context-menu.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,416 +1,451 @@
-// Context Menu Plugin for HTMLArea-3.0
-// Sponsored by www.americanbible.org
-// Implementation by Mihai Bazon, http://dynarch.com/mishoo/
-//
-// (c) dynarch.com 2003.
-// Distributed under the same terms as HTMLArea itself.
-// This notice MUST stay intact for use (see license.txt).
-//
-// $Id: context-menu.js,v 1.2 2003/12/05 09:17:02 mishoo Exp $
-
-HTMLArea.loadStyle("menu.css", "ContextMenu");
-
-function ContextMenu(editor) {
- this.editor = editor;
-};
-
-ContextMenu._pluginInfo = {
- name : "ContextMenu",
- version : "1.0",
- developer : "Mihai Bazon",
- developer_url : "http://dynarch.com/mishoo/",
- c_owner : "dynarch.com",
- sponsor : "American Bible Society",
- sponsor_url : "http://www.americanbible.org",
- license : "htmlArea"
-};
-
-ContextMenu.prototype.onGenerate = function() {
- var self = this;
- var doc = this.editordoc = this.editor._iframe.contentWindow.document;
- HTMLArea._addEvents(doc, ["contextmenu"],
- function (event) {
- return self.popupMenu(HTMLArea.is_ie ? self.editor._iframe.contentWindow.event : event);
- });
- this.currentMenu = null;
-};
-
-ContextMenu.prototype.getContextMenu = function(target) {
- var self = this;
- var editor = this.editor;
- var config = editor.config;
- var menu = [];
- var tbo = this.editor.plugins.TableOperations;
- if (tbo) tbo = tbo.instance;
- var i18n = ContextMenu.I18N;
-
- var selection = editor.hasSelectedText();
- if (selection)
- menu.push([ i18n["Cut"], function() { editor.execCommand("cut"); }, null, config.btnList["cut"][1] ],
- [ i18n["Copy"], function() { editor.execCommand("copy"); }, null, config.btnList["copy"][1] ]);
- menu.push([ i18n["Paste"], function() { editor.execCommand("paste"); }, null, config.btnList["paste"][1] ]);
-
- var currentTarget = target;
- var elmenus = [];
-
- var link = null;
- var table = null;
- var tr = null;
- var td = null;
- var img = null;
-
- function tableOperation(opcode) {
- tbo.buttonPress(editor, opcode);
- };
-
- for (; target; target = target.parentNode) {
- var tag = target.tagName;
- if (!tag)
- continue;
- tag = tag.toLowerCase();
- switch (tag) {
- case "img":
- img = target;
- elmenus.push(null,
- [ i18n["Image Properties"],
- function() {
- editor._insertImage(img);
- },
- i18n["Show the image properties dialog"],
- config.btnList["insertimage"][1] ]
- );
- break;
- case "a":
- link = target;
- elmenus.push(null,
- [ i18n["Modify Link"],
- function() { editor.execCommand("createlink", true); },
- i18n["Current URL is"] + ': ' + link.href,
- config.btnList["createlink"][1] ],
-
- [ i18n["Check Link"],
- function() { window.open(link.href); },
- i18n["Opens this link in a new window"] ],
-
- [ i18n["Remove Link"],
- function() {
- if (confirm(i18n["Please confirm that you want to unlink this element."] + "\n" +
- i18n["Link points to:"] + " " + link.href)) {
- while (link.firstChild)
- link.parentNode.insertBefore(link.firstChild, link);
- link.parentNode.removeChild(link);
- }
- },
- i18n["Unlink the current element"] ]
- );
- break;
- case "td":
- td = target;
- if (!tbo) break;
- elmenus.push(null,
- [ i18n["Cell Properties"],
- function() { tableOperation("TO-cell-prop"); },
- i18n["Show the Table Cell Properties dialog"],
- config.btnList["TO-cell-prop"][1] ]
- );
- break;
- case "tr":
- tr = target;
- if (!tbo) break;
- elmenus.push(null,
- [ i18n["Row Properties"],
- function() { tableOperation("TO-row-prop"); },
- i18n["Show the Table Row Properties dialog"],
- config.btnList["TO-row-prop"][1] ],
-
- [ i18n["Insert Row Before"],
- function() { tableOperation("TO-row-insert-above"); },
- i18n["Insert a new row before the current one"],
- config.btnList["TO-row-insert-above"][1] ],
-
- [ i18n["Insert Row After"],
- function() { tableOperation("TO-row-insert-under"); },
- i18n["Insert a new row after the current one"],
- config.btnList["TO-row-insert-under"][1] ],
-
- [ i18n["Delete Row"],
- function() { tableOperation("TO-row-delete"); },
- i18n["Delete the current row"],
- config.btnList["TO-row-delete"][1] ]
- );
- break;
- case "table":
- table = target;
- if (!tbo) break;
- elmenus.push(null,
- [ i18n["Table Properties"],
- function() { tableOperation("TO-table-prop"); },
- i18n["Show the Table Properties dialog"],
- config.btnList["TO-table-prop"][1] ],
-
- [ i18n["Insert Column Before"],
- function() { tableOperation("TO-col-insert-before"); },
- i18n["Insert a new column before the current one"],
- config.btnList["TO-col-insert-before"][1] ],
-
- [ i18n["Insert Column After"],
- function() { tableOperation("TO-col-insert-after"); },
- i18n["Insert a new column after the current one"],
- config.btnList["TO-col-insert-after"][1] ],
-
- [ i18n["Delete Column"],
- function() { tableOperation("TO-col-delete"); },
- i18n["Delete the current column"],
- config.btnList["TO-col-delete"][1] ]
- );
- break;
- case "body":
- elmenus.push(null,
- [ i18n["Justify Left"],
- function() { editor.execCommand("justifyleft"); }, null,
- config.btnList["justifyleft"][1] ],
- [ i18n["Justify Center"],
- function() { editor.execCommand("justifycenter"); }, null,
- config.btnList["justifycenter"][1] ],
- [ i18n["Justify Right"],
- function() { editor.execCommand("justifyright"); }, null,
- config.btnList["justifyright"][1] ],
- [ i18n["Justify Full"],
- function() { editor.execCommand("justifyfull"); }, null,
- config.btnList["justifyfull"][1] ]
- );
- break;
- }
- }
-
- if (selection && !link)
- menu.push(null, [ i18n["Make link"],
- function() { editor.execCommand("createlink", true); },
- i18n["Create a link"],
- config.btnList["createlink"][1] ]);
-
- for (var i in elmenus)
- menu.push(elmenus[i]);
-
- menu.push(null,
- [ i18n["Remove the"] + " <" + currentTarget.tagName + "> " + i18n["Element"],
- function() {
- if (confirm(i18n["Please confirm that you want to remove this element:"] + " " + currentTarget.tagName)) {
- var el = currentTarget;
- var p = el.parentNode;
- p.removeChild(el);
- if (HTMLArea.is_gecko) {
- if (p.tagName.toLowerCase() == "td" && !p.hasChildNodes())
- p.appendChild(editor._doc.createElement("br"));
- editor.forceRedraw();
- editor.focusEditor();
- editor.updateToolbar();
- if (table) {
- var save_collapse = table.style.borderCollapse;
- table.style.borderCollapse = "collapse";
- table.style.borderCollapse = "separate";
- table.style.borderCollapse = save_collapse;
- }
- }
- }
- },
- i18n["Remove this node from the document"] ]);
- return menu;
-};
-
-ContextMenu.prototype.popupMenu = function(ev) {
- var self = this;
- var i18n = ContextMenu.I18N;
- if (this.currentMenu)
- this.currentMenu.parentNode.removeChild(this.currentMenu);
- function getPos(el) {
- var r = { x: el.offsetLeft, y: el.offsetTop };
- if (el.offsetParent) {
- var tmp = getPos(el.offsetParent);
- r.x += tmp.x;
- r.y += tmp.y;
- }
- return r;
- };
- function documentClick(ev) {
- ev || (ev = window.event);
- if (!self.currentMenu) {
- alert(i18n["How did you get here? (Please report!)"]);
- return false;
- }
- var el = HTMLArea.is_ie ? ev.srcElement : ev.target;
- for (; el != null && el != self.currentMenu; el = el.parentNode);
- if (el == null)
- self.closeMenu();
- //HTMLArea._stopEvent(ev);
- //return false;
- };
- var keys = [];
- function keyPress(ev) {
- ev || (ev = window.event);
- HTMLArea._stopEvent(ev);
- if (ev.keyCode == 27) {
- self.closeMenu();
- return false;
- }
- var key = String.fromCharCode(HTMLArea.is_ie ? ev.keyCode : ev.charCode).toLowerCase();
- for (var i = keys.length; --i >= 0;) {
- var k = keys[i];
- if (k[0].toLowerCase() == key)
- k[1].__msh.activate();
- }
- };
- self.closeMenu = function() {
- self.currentMenu.parentNode.removeChild(self.currentMenu);
- self.currentMenu = null;
- HTMLArea._removeEvent(document, "mousedown", documentClick);
- HTMLArea._removeEvent(self.editordoc, "mousedown", documentClick);
- if (keys.length > 0)
- HTMLArea._removeEvent(self.editordoc, "keypress", keyPress);
- if (HTMLArea.is_ie)
- self.iePopup.hide();
- };
- var target = HTMLArea.is_ie ? ev.srcElement : ev.target;
- var ifpos = getPos(self.editor._iframe);
- var x = ev.clientX + ifpos.x;
- var y = ev.clientY + ifpos.y;
-
- var div;
- var doc;
- if (!HTMLArea.is_ie) {
- doc = document;
- } else {
- // IE stinks
- var popup = this.iePopup = window.createPopup();
- doc = popup.document;
- doc.open();
- doc.write("<html><head><style type='text/css'>@import url(" + _editor_url + "plugins/ContextMenu/menu.css); html, body { padding: 0px; margin: 0px; overflow: hidden; border: 0px; }</style></head><body unselectable='yes'></body></html>");
- doc.close();
- }
- div = doc.createElement("div");
- if (HTMLArea.is_ie)
- div.unselectable = "on";
- div.oncontextmenu = function() { return false; };
- div.className = "htmlarea-context-menu";
- if (!HTMLArea.is_ie)
- div.style.left = div.style.top = "0px";
- doc.body.appendChild(div);
-
- var table = doc.createElement("table");
- div.appendChild(table);
- table.cellSpacing = 0;
- table.cellPadding = 0;
- var parent = doc.createElement("tbody");
- table.appendChild(parent);
-
- var options = this.getContextMenu(target);
- for (var i = 0; i < options.length; ++i) {
- var option = options[i];
- var item = doc.createElement("tr");
- parent.appendChild(item);
- if (HTMLArea.is_ie)
- item.unselectable = "on";
- else item.onmousedown = function(ev) {
- HTMLArea._stopEvent(ev);
- return false;
- };
- if (!option) {
- item.className = "separator";
- var td = doc.createElement("td");
- td.className = "icon";
- var IE_IS_A_FUCKING_SHIT = '>';
- if (HTMLArea.is_ie) {
- td.unselectable = "on";
- IE_IS_A_FUCKING_SHIT = " unselectable='on' style='height=1px'> ";
- }
- td.innerHTML = "<div" + IE_IS_A_FUCKING_SHIT + "</div>";
- var td1 = td.cloneNode(true);
- td1.className = "label";
- item.appendChild(td);
- item.appendChild(td1);
- } else {
- var label = option[0];
- item.className = "item";
- item.__msh = {
- item: item,
- label: label,
- action: option[1],
- tooltip: option[2] || null,
- icon: option[3] || null,
- activate: function() {
- self.closeMenu();
- self.editor.focusEditor();
- this.action();
- }
- };
- label = label.replace(/_([a-zA-Z0-9])/, "<u>$1</u>");
- if (label != option[0])
- keys.push([ RegExp.$1, item ]);
- label = label.replace(/__/, "_");
- var td1 = doc.createElement("td");
- if (HTMLArea.is_ie)
- td1.unselectable = "on";
- item.appendChild(td1);
- td1.className = "icon";
- if (item.__msh.icon)
- td1.innerHTML = "<img align='middle' src='" + item.__msh.icon + "' />";
- var td2 = doc.createElement("td");
- if (HTMLArea.is_ie)
- td2.unselectable = "on";
- item.appendChild(td2);
- td2.className = "label";
- td2.innerHTML = label;
- item.onmouseover = function() {
- this.className += " hover";
- self.editor._statusBarTree.innerHTML = this.__msh.tooltip || ' ';
- };
- item.onmouseout = function() { this.className = "item"; };
- item.oncontextmenu = function(ev) {
- this.__msh.activate();
- if (!HTMLArea.is_ie)
- HTMLArea._stopEvent(ev);
- return false;
- };
- item.onmouseup = function(ev) {
- var timeStamp = (new Date()).getTime();
- if (timeStamp - self.timeStamp > 500)
- this.__msh.activate();
- if (!HTMLArea.is_ie)
- HTMLArea._stopEvent(ev);
- return false;
- };
- //if (typeof option[2] == "string")
- //item.title = option[2];
- }
- }
-
- if (!HTMLArea.is_ie) {
- var dx = x + div.offsetWidth - window.innerWidth + 4;
- var dy = y + div.offsetHeight - window.innerHeight + 4;
- if (dx > 0) x -= dx;
- if (dy > 0) y -= dy;
- div.style.left = x + "px";
- div.style.top = y + "px";
- } else {
- // determine the size (did I mention that IE stinks?)
- var foobar = document.createElement("div");
- foobar.className = "htmlarea-context-menu";
- foobar.innerHTML = div.innerHTML;
- document.body.appendChild(foobar);
- var w = foobar.offsetWidth;
- var h = foobar.offsetHeight;
- document.body.removeChild(foobar);
- this.iePopup.show(ev.screenX, ev.screenY, w, h);
- }
-
- this.currentMenu = div;
- this.timeStamp = (new Date()).getTime();
-
- HTMLArea._addEvent(document, "mousedown", documentClick);
- HTMLArea._addEvent(this.editordoc, "mousedown", documentClick);
- if (keys.length > 0)
- HTMLArea._addEvent(this.editordoc, "keypress", keyPress);
-
- HTMLArea._stopEvent(ev);
- return false;
-};
+// Context Menu Plugin for HTMLArea-3.0
+// Sponsored by www.americanbible.org
+// Implementation by Mihai Bazon, http://dynarch.com/mishoo/
+//
+// (c) dynarch.com 2003-2005.
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+//
+// $Id: context-menu.js,v 1.6 2005/01/20 17:49:03 mishoo Exp $
+
+HTMLArea.loadStyle("menu.css", "ContextMenu");
+
+function ContextMenu(editor) {
+ this.editor = editor;
+};
+
+ContextMenu._pluginInfo = {
+ name : "ContextMenu",
+ version : "1.0",
+ developer : "Mihai Bazon",
+ developer_url : "http://dynarch.com/mishoo/",
+ c_owner : "dynarch.com",
+ sponsor : "American Bible Society",
+ sponsor_url : "http://www.americanbible.org",
+ license : "htmlArea"
+};
+
+ContextMenu.prototype.onGenerate = function() {
+ var self = this;
+ var doc = this.editordoc = this.editor._iframe.contentWindow.document;
+ HTMLArea._addEvents(doc, ["contextmenu"],
+ function (event) {
+ return self.popupMenu(HTMLArea.is_ie ? self.editor._iframe.contentWindow.event : event);
+ });
+ this.currentMenu = null;
+};
+
+ContextMenu.prototype.getContextMenu = function(target) {
+ var self = this;
+ var editor = this.editor;
+ var config = editor.config;
+ var menu = [];
+ var tbo = this.editor.plugins.TableOperations;
+ if (tbo) tbo = tbo.instance;
+ var i18n = ContextMenu.I18N;
+
+ var selection = editor.hasSelectedText();
+ if (selection)
+ menu.push([ i18n["Cut"], function() { editor.execCommand("cut"); }, null, config.btnList["cut"][1] ],
+ [ i18n["Copy"], function() { editor.execCommand("copy"); }, null, config.btnList["copy"][1] ]);
+ menu.push([ i18n["Paste"], function() { editor.execCommand("paste"); }, null, config.btnList["paste"][1] ]);
+
+ var currentTarget = target;
+ var elmenus = [];
+ var tmp;
+
+ var link = null;
+ var table = null;
+ var tr = null;
+ var td = null;
+ var img = null;
+
+ function tableOperation(opcode) {
+ tbo.buttonPress(editor, opcode);
+ };
+
+ function insertPara(currentTarget, after) {
+ var el = currentTarget;
+ var par = el.parentNode;
+ var p = editor._doc.createElement("p");
+ p.appendChild(editor._doc.createElement("br"));
+ par.insertBefore(p, after ? el.nextSibling : el);
+ var sel = editor._getSelection();
+ var range = editor._createRange(sel);
+ if (!HTMLArea.is_ie) {
+ sel.removeAllRanges();
+ range.selectNodeContents(p);
+ range.collapse(true);
+ sel.addRange(range);
+ } else {
+ range.moveToElementText(p);
+ range.collapse(true);
+ range.select();
+ }
+ };
+
+ for (; target; target = target.parentNode) {
+ var tag = target.tagName;
+ if (!tag)
+ continue;
+ tag = tag.toLowerCase();
+ switch (tag) {
+ case "img":
+ img = target;
+ elmenus.push(null,
+ [ i18n["Image Properties"],
+ function() {
+ editor._insertImage(img);
+ },
+ i18n["Show the image properties dialog"],
+ config.btnList["insertimage"][1] ]
+ );
+ break;
+ case "a":
+ link = target;
+ elmenus.push(null,
+ [ i18n["Modify Link"],
+ function() { editor.execCommand("createlink", true); },
+ i18n["Current URL is"] + ': ' + link.href,
+ config.btnList["createlink"][1] ],
+
+ [ i18n["Check Link"],
+ function() { window.open(link.href); },
+ i18n["Opens this link in a new window"] ],
+
+ [ i18n["Remove Link"],
+ function() {
+ if (confirm(i18n["Please confirm that you want to unlink this element."] + "\n" +
+ i18n["Link points to:"] + " " + link.href)) {
+ while (link.firstChild)
+ link.parentNode.insertBefore(link.firstChild, link);
+ link.parentNode.removeChild(link);
+ }
+ },
+ i18n["Unlink the current element"] ]
+ );
+ break;
+ case "td":
+ td = target;
+ if (!tbo) break;
+ elmenus.push(null,
+ [ i18n["Cell Properties"],
+ function() { tableOperation("TO-cell-prop"); },
+ i18n["Show the Table Cell Properties dialog"],
+ config.btnList["TO-cell-prop"][1] ],
+ [ i18n["Delete Cell"],
+ function() { tableOperation("TO-cell-delete"); }, null,
+ config.btnList["TO-cell-delete"][1] ]
+ );
+ break;
+ case "tr":
+ tr = target;
+ if (!tbo) break;
+ elmenus.push(null,
+ [ i18n["Row Properties"],
+ function() { tableOperation("TO-row-prop"); },
+ i18n["Show the Table Row Properties dialog"],
+ config.btnList["TO-row-prop"][1] ],
+
+ [ i18n["Insert Row Before"],
+ function() { tableOperation("TO-row-insert-above"); },
+ i18n["Insert a new row before the current one"],
+ config.btnList["TO-row-insert-above"][1] ],
+
+ [ i18n["Insert Row After"],
+ function() { tableOperation("TO-row-insert-under"); },
+ i18n["Insert a new row after the current one"],
+ config.btnList["TO-row-insert-under"][1] ],
+
+ [ i18n["Delete Row"],
+ function() { tableOperation("TO-row-delete"); },
+ i18n["Delete the current row"],
+ config.btnList["TO-row-delete"][1] ]
+ );
+ break;
+ case "table":
+ table = target;
+ if (!tbo) break;
+ elmenus.push(null,
+ [ i18n["Table Properties"],
+ function() { tableOperation("TO-table-prop"); },
+ i18n["Show the Table Properties dialog"],
+ config.btnList["TO-table-prop"][1] ],
+
+ [ i18n["Insert Column Before"],
+ function() { tableOperation("TO-col-insert-before"); },
+ i18n["Insert a new column before the current one"],
+ config.btnList["TO-col-insert-before"][1] ],
+
+ [ i18n["Insert Column After"],
+ function() { tableOperation("TO-col-insert-after"); },
+ i18n["Insert a new column after the current one"],
+ config.btnList["TO-col-insert-after"][1] ],
+
+ [ i18n["Delete Column"],
+ function() { tableOperation("TO-col-delete"); },
+ i18n["Delete the current column"],
+ config.btnList["TO-col-delete"][1] ]
+ );
+ break;
+ case "body":
+ elmenus.push(null,
+ [ i18n["Justify Left"],
+ function() { editor.execCommand("justifyleft"); }, null,
+ config.btnList["justifyleft"][1] ],
+ [ i18n["Justify Center"],
+ function() { editor.execCommand("justifycenter"); }, null,
+ config.btnList["justifycenter"][1] ],
+ [ i18n["Justify Right"],
+ function() { editor.execCommand("justifyright"); }, null,
+ config.btnList["justifyright"][1] ],
+ [ i18n["Justify Full"],
+ function() { editor.execCommand("justifyfull"); }, null,
+ config.btnList["justifyfull"][1] ]
+ );
+ break;
+ }
+ }
+
+ if (selection && !link)
+ menu.push(null, [ i18n["Make link"],
+ function() { editor.execCommand("createlink", true); },
+ i18n["Create a link"],
+ config.btnList["createlink"][1] ]);
+
+ for (var i = 0; i < elmenus.length; ++i)
+ menu.push(elmenus[i]);
+
+ if (!/html|body/i.test(currentTarget.tagName)) {
+ table ? (tmp = table, table = null) : (tmp = currentTarget);
+ menu.push(null,
+ [ i18n["Remove the"] + " <" + tmp.tagName + "> " + i18n["Element"],
+ function() {
+ if (confirm(i18n["Please confirm that you want to remove this element:"] + " " +
+ tmp.tagName)) {
+ var el = tmp;
+ var p = el.parentNode;
+ p.removeChild(el);
+ if (HTMLArea.is_gecko) {
+ if (p.tagName.toLowerCase() == "td" && !p.hasChildNodes())
+ p.appendChild(editor._doc.createElement("br"));
+ editor.forceRedraw();
+ editor.focusEditor();
+ editor.updateToolbar();
+ if (table) {
+ var save_collapse = table.style.borderCollapse;
+ table.style.borderCollapse = "collapse";
+ table.style.borderCollapse = "separate";
+ table.style.borderCollapse = save_collapse;
+ }
+ }
+ }
+ },
+ i18n["Remove this node from the document"] ],
+ [ i18n["Insert paragraph before"],
+ function() { insertPara(tmp, false); },
+ i18n["Insert a paragraph before the current node"] ],
+ [ i18n["Insert paragraph after"],
+ function() { insertPara(tmp, true); },
+ i18n["Insert a paragraph after the current node"] ]
+ );
+ }
+ return menu;
+};
+
+ContextMenu.prototype.popupMenu = function(ev) {
+ var self = this;
+ var i18n = ContextMenu.I18N;
+ if (this.currentMenu)
+ this.currentMenu.parentNode.removeChild(this.currentMenu);
+ function getPos(el) {
+ var r = { x: el.offsetLeft, y: el.offsetTop };
+ if (el.offsetParent) {
+ var tmp = getPos(el.offsetParent);
+ r.x += tmp.x;
+ r.y += tmp.y;
+ }
+ return r;
+ };
+ function documentClick(ev) {
+ ev || (ev = window.event);
+ if (!self.currentMenu) {
+ alert(i18n["How did you get here? (Please report!)"]);
+ return false;
+ }
+ var el = HTMLArea.is_ie ? ev.srcElement : ev.target;
+ for (; el != null && el != self.currentMenu; el = el.parentNode);
+ if (el == null)
+ self.closeMenu();
+ //HTMLArea._stopEvent(ev);
+ //return false;
+ };
+ var keys = [];
+ function keyPress(ev) {
+ ev || (ev = window.event);
+ HTMLArea._stopEvent(ev);
+ if (ev.keyCode == 27) {
+ self.closeMenu();
+ return false;
+ }
+ var key = String.fromCharCode(HTMLArea.is_ie ? ev.keyCode : ev.charCode).toLowerCase();
+ for (var i = keys.length; --i >= 0;) {
+ var k = keys[i];
+ if (k[0].toLowerCase() == key)
+ k[1].__msh.activate();
+ }
+ };
+ self.closeMenu = function() {
+ self.currentMenu.parentNode.removeChild(self.currentMenu);
+ self.currentMenu = null;
+ HTMLArea._removeEvent(document, "mousedown", documentClick);
+ HTMLArea._removeEvent(self.editordoc, "mousedown", documentClick);
+ if (keys.length > 0)
+ HTMLArea._removeEvent(self.editordoc, "keypress", keyPress);
+ if (HTMLArea.is_ie)
+ self.iePopup.hide();
+ };
+ var target = HTMLArea.is_ie ? ev.srcElement : ev.target;
+ var ifpos = getPos(self.editor._iframe);
+ var x = ev.clientX + ifpos.x;
+ var y = ev.clientY + ifpos.y;
+
+ var div;
+ var doc;
+ if (!HTMLArea.is_ie) {
+ doc = document;
+ } else {
+ // IE stinks
+ var popup = this.iePopup = window.createPopup();
+ doc = popup.document;
+ doc.open();
+ doc.write("<html><head><style type='text/css'>@import url(" + _editor_url + "plugins/ContextMenu/menu.css); html, body { padding: 0px; margin: 0px; overflow: hidden; border: 0px; }</style></head><body unselectable='yes'></body></html>");
+ doc.close();
+ }
+ div = doc.createElement("div");
+ if (HTMLArea.is_ie)
+ div.unselectable = "on";
+ div.oncontextmenu = function() { return false; };
+ div.className = "htmlarea-context-menu";
+ if (!HTMLArea.is_ie)
+ div.style.left = div.style.top = "0px";
+ doc.body.appendChild(div);
+
+ var table = doc.createElement("table");
+ div.appendChild(table);
+ table.cellSpacing = 0;
+ table.cellPadding = 0;
+ var parent = doc.createElement("tbody");
+ table.appendChild(parent);
+
+ var options = this.getContextMenu(target);
+ for (var i = 0; i < options.length; ++i) {
+ var option = options[i];
+ var item = doc.createElement("tr");
+ parent.appendChild(item);
+ if (HTMLArea.is_ie)
+ item.unselectable = "on";
+ else item.onmousedown = function(ev) {
+ HTMLArea._stopEvent(ev);
+ return false;
+ };
+ if (!option) {
+ item.className = "separator";
+ var td = doc.createElement("td");
+ td.className = "icon";
+ var IE_IS_A_FUCKING_SHIT = '>';
+ if (HTMLArea.is_ie) {
+ td.unselectable = "on";
+ IE_IS_A_FUCKING_SHIT = " unselectable='on' style='height=1px'> ";
+ }
+ td.innerHTML = "<div" + IE_IS_A_FUCKING_SHIT + "</div>";
+ var td1 = td.cloneNode(true);
+ td1.className = "label";
+ item.appendChild(td);
+ item.appendChild(td1);
+ } else {
+ var label = option[0];
+ item.className = "item";
+ item.__msh = {
+ item: item,
+ label: label,
+ action: option[1],
+ tooltip: option[2] || null,
+ icon: option[3] || null,
+ activate: function() {
+ self.closeMenu();
+ self.editor.focusEditor();
+ this.action();
+ }
+ };
+ label = label.replace(/_([a-zA-Z0-9])/, "<u>$1</u>");
+ if (label != option[0])
+ keys.push([ RegExp.$1, item ]);
+ label = label.replace(/__/, "_");
+ var td1 = doc.createElement("td");
+ if (HTMLArea.is_ie)
+ td1.unselectable = "on";
+ item.appendChild(td1);
+ td1.className = "icon";
+ if (item.__msh.icon)
+ td1.innerHTML = "<img align='middle' src='" + item.__msh.icon + "' />";
+ var td2 = doc.createElement("td");
+ if (HTMLArea.is_ie)
+ td2.unselectable = "on";
+ item.appendChild(td2);
+ td2.className = "label";
+ td2.innerHTML = label;
+ item.onmouseover = function() {
+ this.className += " hover";
+ self.editor._statusBarTree.innerHTML = this.__msh.tooltip || ' ';
+ };
+ item.onmouseout = function() { this.className = "item"; };
+ item.oncontextmenu = function(ev) {
+ this.__msh.activate();
+ if (!HTMLArea.is_ie)
+ HTMLArea._stopEvent(ev);
+ return false;
+ };
+ item.onmouseup = function(ev) {
+ var timeStamp = (new Date()).getTime();
+ if (timeStamp - self.timeStamp > 500)
+ this.__msh.activate();
+ if (!HTMLArea.is_ie)
+ HTMLArea._stopEvent(ev);
+ return false;
+ };
+ //if (typeof option[2] == "string")
+ //item.title = option[2];
+ }
+ }
+
+ if (!HTMLArea.is_ie) {
+ var dx = x + div.offsetWidth - window.innerWidth + 4;
+ var dy = y + div.offsetHeight - window.innerHeight + 4;
+ if (dx > 0) x -= dx;
+ if (dy > 0) y -= dy;
+ div.style.left = x + "px";
+ div.style.top = y + "px";
+ } else {
+ // determine the size (did I mention that IE stinks?)
+ var foobar = document.createElement("div");
+ foobar.className = "htmlarea-context-menu";
+ foobar.innerHTML = div.innerHTML;
+ document.body.appendChild(foobar);
+ var w = foobar.offsetWidth;
+ var h = foobar.offsetHeight;
+ document.body.removeChild(foobar);
+ this.iePopup.show(ev.screenX, ev.screenY, w, h);
+ }
+
+ this.currentMenu = div;
+ this.timeStamp = (new Date()).getTime();
+
+ HTMLArea._addEvent(document, "mousedown", documentClick);
+ HTMLArea._addEvent(this.editordoc, "mousedown", documentClick);
+ if (keys.length > 0)
+ HTMLArea._addEvent(this.editordoc, "keypress", keyPress);
+
+ HTMLArea._stopEvent(ev);
+ return false;
+};
Modified: plog/trunk/js/htmlarea/plugins/ContextMenu/lang/de.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/ContextMenu/lang/de.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/ContextMenu/lang/de.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,59 +1,59 @@
-// I18N constants
-
-// LANG: "de", ENCODING: UTF-8 | ISO-8859-1
-
-// translated: <]{MJ}[> i at student.ethz.ch
-
-
-ContextMenu.I18N = {
- // Items that appear in menu. Please note that an underscore (_)
- // character in the translation (right column) will cause the following
- // letter to become underlined and be shortcut for that menu option.
-
- "Cut" : "Ausschneiden",
- "Copy" : "Kopieren",
- "Paste" : "Einfügen",
- "Image Properties" : "_Bild Einstellungen...",
- "Modify Link" : "_Link ändern...",
- "Check Link" : "Link testen...",
- "Remove Link" : "Link entfernen...",
- "Cell Properties" : "Z_ellen Einstellungen...",
- "Row Properties" : "Ze_ilen Einstellungen...",
- "Insert Row Before" : "Zeile einfügen v_or Position",
- "Insert Row After" : "Zeile einfügen n_ach Position",
- "Delete Row" : "Zeile löschen",
- "Table Properties" : "_Tabellen Einstellungen...",
- "Insert Column Before" : "Spalte einfügen vo_r Position",
- "Insert Column After" : "Spalte einfügen na_ch Position",
- "Delete Column" : "Spalte löschen",
- "Justify Left" : "Links ausrichten",
- "Justify Center" : "Zentriert",
- "Justify Right" : "Rechts ausrichten",
- "Justify Full" : "Blocksatz",
- "Make link" : "Lin_k erstellen...",
- "Remove the" : "",
- "Element" : "Element entfernen...",
-
- // Other labels (tooltips and alert/confirm box messages)
-
- "Please confirm that you want to remove this element:" : "Wollen sie dieses Element wirklich entfernen ?",
- "Remove this node from the document" : "Dieses Element aus dem Dokument entfernen",
- "How did you get here? (Please report!)" : "How did you get here? (Please report!)",
- "Show the image properties dialog" : "Fenster für die Bild-Einstellungen anzeigen",
- "Modify URL" : "URL ändern",
- "Current URL is" : "Aktuelle URL ist",
- "Opens this link in a new window" : "Diesen Link in neuem Fenster öffnen",
- "Please confirm that you want to unlink this element." : "Wollen sie diesen Link wirklich entfernen ?",
- "Link points to:" : "Link zeigt auf:",
- "Unlink the current element" : "Link auf Element entfernen",
- "Show the Table Cell Properties dialog" : "Zellen-Einstellungen anzeigen",
- "Show the Table Row Properties dialog" : "Zeilen-Einstellungen anzeigen",
- "Insert a new row before the current one" : "Zeile einfügen vor der aktuellen Position",
- "Insert a new row after the current one" : "Zeile einfügen nach der aktuellen Position",
- "Delete the current row" : "Zeile löschen",
- "Show the Table Properties dialog" : "Show the Table Properties dialog",
- "Insert a new column before the current one" : "Spalte einfügen vor der aktuellen Position",
- "Insert a new column after the current one" : "Spalte einfügen nach der aktuellen Position",
- "Delete the current column" : "Spalte löschen",
- "Create a link" : "Link erstellen"
-};
+// I18N constants
+
+// LANG: "de", ENCODING: UTF-8 | ISO-8859-1
+
+// translated: <]{MJ}[> i at student.ethz.ch
+
+
+ContextMenu.I18N = {
+ // Items that appear in menu. Please note that an underscore (_)
+ // character in the translation (right column) will cause the following
+ // letter to become underlined and be shortcut for that menu option.
+
+ "Cut" : "Ausschneiden",
+ "Copy" : "Kopieren",
+ "Paste" : "Einfügen",
+ "Image Properties" : "_Bild Einstellungen...",
+ "Modify Link" : "_Link ändern...",
+ "Check Link" : "Link testen...",
+ "Remove Link" : "Link entfernen...",
+ "Cell Properties" : "Z_ellen Einstellungen...",
+ "Row Properties" : "Ze_ilen Einstellungen...",
+ "Insert Row Before" : "Zeile einfügen v_or Position",
+ "Insert Row After" : "Zeile einfügen n_ach Position",
+ "Delete Row" : "Zeile löschen",
+ "Table Properties" : "_Tabellen Einstellungen...",
+ "Insert Column Before" : "Spalte einfügen vo_r Position",
+ "Insert Column After" : "Spalte einfügen na_ch Position",
+ "Delete Column" : "Spalte löschen",
+ "Justify Left" : "Links ausrichten",
+ "Justify Center" : "Zentriert",
+ "Justify Right" : "Rechts ausrichten",
+ "Justify Full" : "Blocksatz",
+ "Make link" : "Lin_k erstellen...",
+ "Remove the" : "",
+ "Element" : "Element entfernen...",
+
+ // Other labels (tooltips and alert/confirm box messages)
+
+ "Please confirm that you want to remove this element:" : "Wollen sie dieses Element wirklich entfernen ?",
+ "Remove this node from the document" : "Dieses Element aus dem Dokument entfernen",
+ "How did you get here? (Please report!)" : "How did you get here? (Please report!)",
+ "Show the image properties dialog" : "Fenster für die Bild-Einstellungen anzeigen",
+ "Modify URL" : "URL ändern",
+ "Current URL is" : "Aktuelle URL ist",
+ "Opens this link in a new window" : "Diesen Link in neuem Fenster öffnen",
+ "Please confirm that you want to unlink this element." : "Wollen sie diesen Link wirklich entfernen ?",
+ "Link points to:" : "Link zeigt auf:",
+ "Unlink the current element" : "Link auf Element entfernen",
+ "Show the Table Cell Properties dialog" : "Zellen-Einstellungen anzeigen",
+ "Show the Table Row Properties dialog" : "Zeilen-Einstellungen anzeigen",
+ "Insert a new row before the current one" : "Zeile einfügen vor der aktuellen Position",
+ "Insert a new row after the current one" : "Zeile einfügen nach der aktuellen Position",
+ "Delete the current row" : "Zeile löschen",
+ "Show the Table Properties dialog" : "Show the Table Properties dialog",
+ "Insert a new column before the current one" : "Spalte einfügen vor der aktuellen Position",
+ "Insert a new column after the current one" : "Spalte einfügen nach der aktuellen Position",
+ "Delete the current column" : "Spalte löschen",
+ "Create a link" : "Link erstellen"
+};
Modified: plog/trunk/js/htmlarea/plugins/ContextMenu/lang/el.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/ContextMenu/lang/el.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/ContextMenu/lang/el.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,57 +1,57 @@
-// I18N constants
-
-// LANG: "el", ENCODING: UTF-8 | ISO-8859-7
-// Author: Dimitris Glezos, dimitris at glezos.com
-
-ContextMenu.I18N = {
- // Items that appear in menu. Please note that an underscore (_)
- // character in the translation (right column) will cause the following
- // letter to become underlined and be shortcut for that menu option.
-
- "Cut" : "ÎÏοκοÏή",
- "Copy" : "ÎνÏιγÏαÏή",
- "Paste" : "ÎÏικÏλληÏη",
- "Image Properties" : "ÎδιÏÏηÏÎµÏ ÎικÏναÏ...",
- "Modify Link" : "ΤÏοÏοÏοίηÏη ÏÏ
νδÎÏμοÏ
...",
- "Check Link" : "ÎλεγÏÎ¿Ï ÏÏ
νδÎÏμÏν...",
- "Remove Link" : "ÎιαγÏαÏή ÏÏ
νδÎÏμοÏ
...",
- "Cell Properties" : "ÎδιÏÏηÏÎµÏ ÎºÎµÎ»Î¹Î¿Ï...",
- "Row Properties" : "ÎδιÏÏηÏÎµÏ Î³ÏαμμήÏ...",
- "Insert Row Before" : "ÎιÏαγÏγή γÏÎ±Î¼Î¼Î®Ï ÏÏιν",
- "Insert Row After" : "ÎιÏαγÏγή γÏÎ±Î¼Î¼Î®Ï Î¼ÎµÏά",
- "Delete Row" : "ÎιαγÏαÏή γÏαμμήÏ",
- "Table Properties" : "ÎδιÏÏηÏÎµÏ Ïίνακα...",
- "Insert Column Before" : "ÎιÏαγÏγή ÏÏÎ®Î»Î·Ï ÏÏιν",
- "Insert Column After" : "ÎιÏαγÏγή ÏÏÎ®Î»Î·Ï Î¼ÎµÏά",
- "Delete Column" : "ÎιαγÏαÏή ÏÏήληÏ",
- "Justify Left" : "ΣÏοίÏηÏη ÎÏιÏÏεÏά",
- "Justify Center" : "ΣÏοίÏηÏη ÎÎνÏÏο",
- "Justify Right" : "ΣÏοίÏηÏη Îεξιά",
- "Justify Full" : "ΠλήÏÎ·Ï Î£ÏοίÏηÏη",
- "Make link" : "ÎημιοÏ
Ïγία ÏÏ
νδÎÏμοÏ
...",
- "Remove the" : "ÎÏαίÏεÏη",
- "Element" : "ÏÏοιÏείοÏ
...",
-
- // Other labels (tooltips and alert/confirm box messages)
-
- "Please confirm that you want to remove this element:" : "ÎίÏÏε βÎÎ²Î±Î¹Î¿Ï ÏÏÏ Î¸ÎλεÏε να αÏαιÏÎÏεÏε Ïο ÏÏοιÏείο ",
- "Remove this node from the document" : "ÎÏαίÏεÏη αÏ
ÏÎ¿Ï ÏοÏ
κÏμβοÏ
αÏÏ Ïο ÎγγÏαÏο",
- "How did you get here? (Please report!)" : "Î ÏÏ Î®ÏθαÏε μÎÏÏι εδÏ; (ΠαÏακαλοÏμε αναÏÎÏεÏε Ïο!)",
- "Show the image properties dialog" : "ÎμÏάνιÏη διαλÏγοÏ
με ÏÎ¹Ï ÎδιÏÏηÏÎµÏ ÎµÎ¹ÎºÏναÏ",
- "Modify URL" : "ΤÏοÏοÏοίηÏη URL",
- "Current URL is" : "Το ÏÏÎÏÏν URL είναι",
- "Opens this link in a new window" : "Îνοίγει αÏ
ÏÏ Ïον ÏÏνδεÏμο Ïε Îνα νÎο ÏαÏάθÏ
Ïο",
- "Please confirm that you want to unlink this element." : "ÎίÏÏε βÎÎ²Î±Î¹Î¿Ï ÏÏÏ Î¸ÎλεÏε να αÏαιÏÎÏεÏε Ïον ÏÏνδεÏμο αÏÏ Î±Ï
ÏÏ Ïο ÏÏοιÏείο:",
- "Link points to:" : "Î ÏÏÎ½Î´ÎµÎ¼Î¿Ï Î¿Î´Î·Î³ÎµÎ¯ εδÏ:",
- "Unlink the current element" : "ÎÏαίÏεÏη ÏÏ
νδÎÏμοÏ
αÏÏ Ïο ÏαÏÏν ÏÏοιÏείο",
- "Show the Table Cell Properties dialog" : "ÎμÏάνιÏη διαλÏγοÏ
με ÏÎ¹Ï ÎδιÏÏηÏÎµÏ ÎºÎµÎ»Î¹Î¿Ï Î Î¯Î½Î±ÎºÎ±",
- "Show the Table Row Properties dialog" : "ÎμÏάνιÏη διαλÏγοÏ
με ÏÎ¹Ï ÎδιÏÏηÏÎµÏ Î³ÏÎ±Î¼Î¼Î®Ï Î Î¯Î½Î±ÎºÎ±",
- "Insert a new row before the current one" : "ÎιÏαγÏγή Î¼Î¹Î±Ï Î½ÎÎ±Ï Î³ÏÎ±Î¼Î¼Î®Ï ÏÏιν Ïην εÏιλεγμÎνη",
- "Insert a new row after the current one" : "ÎιÏαγÏγή Î¼Î¹Î±Ï Î½ÎÎ±Ï Î³ÏÎ±Î¼Î¼Î®Ï Î¼ÎµÏά Ïην εÏιλεγμÎνη",
- "Delete the current row" : "ÎιαγÏαÏή εÏιλεγμÎÎ½Î·Ï Î³ÏαμμήÏ",
- "Show the Table Properties dialog" : "ÎμÏάνιÏη διαλÏγοÏ
με ÏÎ¹Ï ÎδιÏÏηÏÎµÏ Î Î¯Î½Î±ÎºÎ±",
- "Insert a new column before the current one" : "ÎιÏαγÏγή νÎÎ±Ï ÏÏÎ®Î»Î·Ï ÏÏιν Ïην εÏιλεγμÎνη",
- "Insert a new column after the current one" : "ÎιÏαγÏγή νÎÎ±Ï ÏÏÎ®Î»Î·Ï Î¼ÎµÏά Ïην εÏιλεγμÎνη",
- "Delete the current column" : "ÎιαγÏαÏή εÏιλεγμÎÎ½Î·Ï ÏÏήληÏ",
- "Create a link" : "ÎημιοÏ
Ïγία ÏÏ
νδÎÏμοÏ
"
-};
+// I18N constants
+
+// LANG: "el", ENCODING: UTF-8 | ISO-8859-7
+// Author: Dimitris Glezos, dimitris at glezos.com
+
+ContextMenu.I18N = {
+ // Items that appear in menu. Please note that an underscore (_)
+ // character in the translation (right column) will cause the following
+ // letter to become underlined and be shortcut for that menu option.
+
+ "Cut" : "ÎÏοκοÏή",
+ "Copy" : "ÎνÏιγÏαÏή",
+ "Paste" : "ÎÏικÏλληÏη",
+ "Image Properties" : "ÎδιÏÏηÏÎµÏ ÎικÏναÏ...",
+ "Modify Link" : "ΤÏοÏοÏοίηÏη ÏÏ
νδÎÏμοÏ
...",
+ "Check Link" : "ÎλεγÏÎ¿Ï ÏÏ
νδÎÏμÏν...",
+ "Remove Link" : "ÎιαγÏαÏή ÏÏ
νδÎÏμοÏ
...",
+ "Cell Properties" : "ÎδιÏÏηÏÎµÏ ÎºÎµÎ»Î¹Î¿Ï...",
+ "Row Properties" : "ÎδιÏÏηÏÎµÏ Î³ÏαμμήÏ...",
+ "Insert Row Before" : "ÎιÏαγÏγή γÏÎ±Î¼Î¼Î®Ï ÏÏιν",
+ "Insert Row After" : "ÎιÏαγÏγή γÏÎ±Î¼Î¼Î®Ï Î¼ÎµÏά",
+ "Delete Row" : "ÎιαγÏαÏή γÏαμμήÏ",
+ "Table Properties" : "ÎδιÏÏηÏÎµÏ Ïίνακα...",
+ "Insert Column Before" : "ÎιÏαγÏγή ÏÏÎ®Î»Î·Ï ÏÏιν",
+ "Insert Column After" : "ÎιÏαγÏγή ÏÏÎ®Î»Î·Ï Î¼ÎµÏά",
+ "Delete Column" : "ÎιαγÏαÏή ÏÏήληÏ",
+ "Justify Left" : "ΣÏοίÏηÏη ÎÏιÏÏεÏά",
+ "Justify Center" : "ΣÏοίÏηÏη ÎÎνÏÏο",
+ "Justify Right" : "ΣÏοίÏηÏη Îεξιά",
+ "Justify Full" : "ΠλήÏÎ·Ï Î£ÏοίÏηÏη",
+ "Make link" : "ÎημιοÏ
Ïγία ÏÏ
νδÎÏμοÏ
...",
+ "Remove the" : "ÎÏαίÏεÏη",
+ "Element" : "ÏÏοιÏείοÏ
...",
+
+ // Other labels (tooltips and alert/confirm box messages)
+
+ "Please confirm that you want to remove this element:" : "ÎίÏÏε βÎÎ²Î±Î¹Î¿Ï ÏÏÏ Î¸ÎλεÏε να αÏαιÏÎÏεÏε Ïο ÏÏοιÏείο ",
+ "Remove this node from the document" : "ÎÏαίÏεÏη αÏ
ÏÎ¿Ï ÏοÏ
κÏμβοÏ
αÏÏ Ïο ÎγγÏαÏο",
+ "How did you get here? (Please report!)" : "Î ÏÏ Î®ÏθαÏε μÎÏÏι εδÏ; (ΠαÏακαλοÏμε αναÏÎÏεÏε Ïο!)",
+ "Show the image properties dialog" : "ÎμÏάνιÏη διαλÏγοÏ
με ÏÎ¹Ï ÎδιÏÏηÏÎµÏ ÎµÎ¹ÎºÏναÏ",
+ "Modify URL" : "ΤÏοÏοÏοίηÏη URL",
+ "Current URL is" : "Το ÏÏÎÏÏν URL είναι",
+ "Opens this link in a new window" : "Îνοίγει αÏ
ÏÏ Ïον ÏÏνδεÏμο Ïε Îνα νÎο ÏαÏάθÏ
Ïο",
+ "Please confirm that you want to unlink this element." : "ÎίÏÏε βÎÎ²Î±Î¹Î¿Ï ÏÏÏ Î¸ÎλεÏε να αÏαιÏÎÏεÏε Ïον ÏÏνδεÏμο αÏÏ Î±Ï
ÏÏ Ïο ÏÏοιÏείο:",
+ "Link points to:" : "Î ÏÏÎ½Î´ÎµÎ¼Î¿Ï Î¿Î´Î·Î³ÎµÎ¯ εδÏ:",
+ "Unlink the current element" : "ÎÏαίÏεÏη ÏÏ
νδÎÏμοÏ
αÏÏ Ïο ÏαÏÏν ÏÏοιÏείο",
+ "Show the Table Cell Properties dialog" : "ÎμÏάνιÏη διαλÏγοÏ
με ÏÎ¹Ï ÎδιÏÏηÏÎµÏ ÎºÎµÎ»Î¹Î¿Ï Î Î¯Î½Î±ÎºÎ±",
+ "Show the Table Row Properties dialog" : "ÎμÏάνιÏη διαλÏγοÏ
με ÏÎ¹Ï ÎδιÏÏηÏÎµÏ Î³ÏÎ±Î¼Î¼Î®Ï Î Î¯Î½Î±ÎºÎ±",
+ "Insert a new row before the current one" : "ÎιÏαγÏγή Î¼Î¹Î±Ï Î½ÎÎ±Ï Î³ÏÎ±Î¼Î¼Î®Ï ÏÏιν Ïην εÏιλεγμÎνη",
+ "Insert a new row after the current one" : "ÎιÏαγÏγή Î¼Î¹Î±Ï Î½ÎÎ±Ï Î³ÏÎ±Î¼Î¼Î®Ï Î¼ÎµÏά Ïην εÏιλεγμÎνη",
+ "Delete the current row" : "ÎιαγÏαÏή εÏιλεγμÎÎ½Î·Ï Î³ÏαμμήÏ",
+ "Show the Table Properties dialog" : "ÎμÏάνιÏη διαλÏγοÏ
με ÏÎ¹Ï ÎδιÏÏηÏÎµÏ Î Î¯Î½Î±ÎºÎ±",
+ "Insert a new column before the current one" : "ÎιÏαγÏγή νÎÎ±Ï ÏÏÎ®Î»Î·Ï ÏÏιν Ïην εÏιλεγμÎνη",
+ "Insert a new column after the current one" : "ÎιÏαγÏγή νÎÎ±Ï ÏÏÎ®Î»Î·Ï Î¼ÎµÏά Ïην εÏιλεγμÎνη",
+ "Delete the current column" : "ÎιαγÏαÏή εÏιλεγμÎÎ½Î·Ï ÏÏήληÏ",
+ "Create a link" : "ÎημιοÏ
Ïγία ÏÏ
νδÎÏμοÏ
"
+};
Modified: plog/trunk/js/htmlarea/plugins/ContextMenu/lang/en.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/ContextMenu/lang/en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/ContextMenu/lang/en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,66 +1,71 @@
-// I18N constants
-
-// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
-// Author: Mihai Bazon, http://dynarch.com/mishoo
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-ContextMenu.I18N = {
- // Items that appear in menu. Please note that an underscore (_)
- // character in the translation (right column) will cause the following
- // letter to become underlined and be shortcut for that menu option.
-
- "Cut" : "Cut",
- "Copy" : "Copy",
- "Paste" : "Paste",
- "Image Properties" : "_Image Properties...",
- "Modify Link" : "_Modify Link...",
- "Check Link" : "Chec_k Link...",
- "Remove Link" : "_Remove Link...",
- "Cell Properties" : "C_ell Properties...",
- "Row Properties" : "Ro_w Properties...",
- "Insert Row Before" : "I_nsert Row Before",
- "Insert Row After" : "In_sert Row After",
- "Delete Row" : "_Delete Row",
- "Table Properties" : "_Table Properties...",
- "Insert Column Before" : "Insert _Column Before",
- "Insert Column After" : "Insert C_olumn After",
- "Delete Column" : "De_lete Column",
- "Justify Left" : "Justify Left",
- "Justify Center" : "Justify Center",
- "Justify Right" : "Justify Right",
- "Justify Full" : "Justify Full",
- "Make link" : "Make lin_k...",
- "Remove the" : "Remove the",
- "Element" : "Element...",
-
- // Other labels (tooltips and alert/confirm box messages)
-
- "Please confirm that you want to remove this element:" : "Please confirm that you want to remove this element:",
- "Remove this node from the document" : "Remove this node from the document",
- "How did you get here? (Please report!)" : "How did you get here? (Please report!)",
- "Show the image properties dialog" : "Show the image properties dialog",
- "Modify URL" : "Modify URL",
- "Current URL is" : "Current URL is",
- "Opens this link in a new window" : "Opens this link in a new window",
- "Please confirm that you want to unlink this element." : "Please confirm that you want to unlink this element.",
- "Link points to:" : "Link points to:",
- "Unlink the current element" : "Unlink the current element",
- "Show the Table Cell Properties dialog" : "Show the Table Cell Properties dialog",
- "Show the Table Row Properties dialog" : "Show the Table Row Properties dialog",
- "Insert a new row before the current one" : "Insert a new row before the current one",
- "Insert a new row after the current one" : "Insert a new row after the current one",
- "Delete the current row" : "Delete the current row",
- "Show the Table Properties dialog" : "Show the Table Properties dialog",
- "Insert a new column before the current one" : "Insert a new column before the current one",
- "Insert a new column after the current one" : "Insert a new column after the current one",
- "Delete the current column" : "Delete the current column",
- "Create a link" : "Create a link"
-};
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+ContextMenu.I18N = {
+ // Items that appear in menu. Please note that an underscore (_)
+ // character in the translation (right column) will cause the following
+ // letter to become underlined and be shortcut for that menu option.
+
+ "Cut" : "Cut",
+ "Copy" : "Copy",
+ "Paste" : "Paste",
+ "Image Properties" : "_Image Properties...",
+ "Modify Link" : "_Modify Link...",
+ "Check Link" : "Chec_k Link...",
+ "Remove Link" : "_Remove Link...",
+ "Cell Properties" : "C_ell Properties...",
+ "Row Properties" : "Ro_w Properties...",
+ "Insert Row Before" : "I_nsert Row Before",
+ "Insert Row After" : "In_sert Row After",
+ "Delete Row" : "_Delete Row",
+ "Delete Cell" : "Delete Cell",
+ "Table Properties" : "_Table Properties...",
+ "Insert Column Before" : "Insert _Column Before",
+ "Insert Column After" : "Insert C_olumn After",
+ "Delete Column" : "De_lete Column",
+ "Justify Left" : "Justify Left",
+ "Justify Center" : "Justify Center",
+ "Justify Right" : "Justify Right",
+ "Justify Full" : "Justify Full",
+ "Make link" : "Make lin_k...",
+ "Remove the" : "Remove the",
+ "Element" : "Element...",
+ "Insert paragraph before" : "Insert paragraph before",
+ "Insert paragraph after" : "Insert paragraph after",
+
+ // Other labels (tooltips and alert/confirm box messages)
+
+ "Please confirm that you want to remove this element:" : "Please confirm that you want to remove this element:",
+ "Remove this node from the document" : "Remove this node from the document",
+ "How did you get here? (Please report!)" : "How did you get here? (Please report!)",
+ "Show the image properties dialog" : "Show the image properties dialog",
+ "Modify URL" : "Modify URL",
+ "Current URL is" : "Current URL is",
+ "Opens this link in a new window" : "Opens this link in a new window",
+ "Please confirm that you want to unlink this element." : "Please confirm that you want to unlink this element.",
+ "Link points to:" : "Link points to:",
+ "Unlink the current element" : "Unlink the current element",
+ "Show the Table Cell Properties dialog" : "Show the Table Cell Properties dialog",
+ "Show the Table Row Properties dialog" : "Show the Table Row Properties dialog",
+ "Insert a new row before the current one" : "Insert a new row before the current one",
+ "Insert a new row after the current one" : "Insert a new row after the current one",
+ "Delete the current row" : "Delete the current row",
+ "Show the Table Properties dialog" : "Show the Table Properties dialog",
+ "Insert a new column before the current one" : "Insert a new column before the current one",
+ "Insert a new column after the current one" : "Insert a new column after the current one",
+ "Delete the current column" : "Delete the current column",
+ "Create a link" : "Create a link",
+ "Insert a paragraph before the current node" : "Insert a paragraph before the current node",
+ "Insert a paragraph after the current node" : "Insert a paragraph after the current node"
+};
Added: plog/trunk/js/htmlarea/plugins/ContextMenu/lang/fr.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/ContextMenu/lang/fr.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/ContextMenu/lang/fr.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,66 @@
+// I18N constants
+
+// LANG: "fr", ENCODING: UTF-8 | ISO-8859-1
+// Author: Cédric Guillemette, http://www.ebdata.com
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+ContextMenu.I18N = {
+ // Items that appear in menu. Please note that an underscore (_)
+ // character in the translation (right column) will cause the following
+ // letter to become underlined and be shortcut for that menu option.
+
+ "Cut" : "Couper",
+ "Copy" : "Copier",
+ "Paste" : "Coller",
+ "Image Properties" : "_Propriétés de l'image...",
+ "Modify Link" : "_Modifier le lien...",
+ "Check Link" : "_Vérifier le lien...",
+ "Remove Link" : "_Supprimer le lien...",
+ "Cell Properties" : "P_ropriétés de la cellule...",
+ "Row Properties" : "Pr_opriétés de la rangée...",
+ "Insert Row Before" : "Insérer une rangée a_vant",
+ "Insert Row After" : "Insér_er une rangée après",
+ "Delete Row" : "Suppr_imer une rangée",
+ "Table Properties" : "Proprié_tés de la table...",
+ "Insert Column Before" : "I_nsérer une colonne avant",
+ "Insert Column After" : "Insérer une colonne _après",
+ "Delete Column" : "_Supprimer la colonne",
+ "Justify Left" : "Justifier _gauche",
+ "Justify Center" : "Justifier _centre",
+ "Justify Right" : "Justifier _droit",
+ "Justify Full" : "Justifier p_lein",
+ "Make link" : "Convertir en lien...",
+ "Remove the" : "Supprimer",
+ "Element" : "Ãlément...",
+
+ // Other labels (tooltips and alert/confirm box messages)
+
+ "Please confirm that you want to remove this element:" : "Confirmer la suppression de cet élément:",
+ "Remove this node from the document" : "Supprimer ce noeud du document",
+ "How did you get here? (Please report!)" : "Comment êtes-vous arrivé ici? (Please report!)",
+ "Show the image properties dialog" : "Afficher le dialogue des propriétés d'image",
+ "Modify URL" : "Modifier le URL",
+ "Current URL is" : "Le URL courant est",
+ "Opens this link in a new window" : "Ouvrir ce lien dans une nouvelle fenêtre",
+ "Please confirm that you want to unlink this element." : "Voulez-vous vraiment enlever le lien présent sur cet élément.",
+ "Link points to:" : "Lier les points jusqu'Ã :",
+ "Unlink the current element" : "Enlever le lien sur cet élément",
+ "Show the Table Cell Properties dialog" : "Afficher le dialogue des propriétés des cellules",
+ "Show the Table Row Properties dialog" : "Afficher le dialogue des propriétés des rangées",
+ "Insert a new row before the current one" : "Insérer une nouvelle rangée avant celle-ci",
+ "Insert a new row after the current one" : "Insérer une nouvelle rangée après celle-ci",
+ "Delete the current row" : "Supprimer la rangée courante",
+ "Show the Table Properties dialog" : "Afficher le dialogue des propriétés de table",
+ "Insert a new column before the current one" : "Insérer une nouvelle rangée avant celle-ci",
+ "Insert a new column after the current one" : "Insérer une nouvelle colonne après celle-ci",
+ "Delete the current column" : "Supprimer cette colonne",
+ "Create a link" : "Créer un lien"
+};
Added: plog/trunk/js/htmlarea/plugins/ContextMenu/lang/he.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/ContextMenu/lang/he.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/ContextMenu/lang/he.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,66 @@
+// I18N constants
+
+// LANG: "he", ENCODING: UTF-8
+// Author: Liron Newman, http://www.eesh.net, <plastish at ultinet dot org>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+ContextMenu.I18N = {
+ // Items that appear in menu. Please note that an underscore (_)
+ // character in the translation (right column) will cause the following
+ // letter to become underlined and be shortcut for that menu option.
+
+ "Cut" : "×××ר",
+ "Copy" : "×עתק",
+ "Paste" : "××××§",
+ "Image Properties" : "_××פ××× × ×ª××× ×...",
+ "Modify Link" : "_×©× × ×§×ש×ר...",
+ "Check Link" : "×××_×§ ×§×ש×ר...",
+ "Remove Link" : "_×סר ×§×ש×ר...",
+ "Cell Properties" : "××פ××× × ×ª_×...",
+ "Row Properties" : "××פ××× × _××ר...",
+ "Insert Row Before" : "×_×× ×¡ ש××¨× ××¤× ×",
+ "Insert Row After" : "××× _ס ש××¨× ××ר×",
+ "Delete Row" : "_×××§ ש×ר×",
+ "Table Properties" : "××פ××× × ×_×××...",
+ "Insert Column Before" : "××× ×¡ _××ר ××¤× ×",
+ "Insert Column After" : "××× ×¡ ×_×ר ××ר×",
+ "Delete Column" : "××_×§ ××ר",
+ "Justify Left" : "×ש×ר ×ש×××",
+ "Justify Center" : "×ש×ר ××ר××",
+ "Justify Right" : "×ש×ר ×××××",
+ "Justify Full" : "×ש×ר ×ש××¨× ××××",
+ "Make link" : "צ×ר ×§×_ש×ר...",
+ "Remove the" : "×סר ×ת ×××× × ×-",
+ "Element" : "...",
+
+ // Other labels (tooltips and alert/confirm box messages)
+
+ "Please confirm that you want to remove this element:" : "×× × ×שר ש×רצ×× × ××ס×ר ×ת ××××× × ×××:",
+ "Remove this node from the document" : "××¡×¨× ×©× node ×× ×××ס××",
+ "How did you get here? (Please report!)" : "××× ××עת ×× ×? (×× × ××××!)",
+ "Show the image properties dialog" : "×צ×× ×ת ×××× ×××-ש×× ×©× ××פ××× × ×ª××× ×",
+ "Modify URL" : "ש×× ×× URL",
+ "Current URL is" : "URL × ×××× ×××",
+ "Opens this link in a new window" : "פת××ת ×§×ש×ר ×× ××××× ××ש",
+ "Please confirm that you want to unlink this element." : "×× × ×שר ש××ª× ×¨××¦× ×× ×ª×§ ×ת ×××× × ××.",
+ "Link points to:" : "××§×ש×ר ×צ×××¢ ××:",
+ "Unlink the current element" : "× ×ת××§ ×ת ××××× × ×× ××××",
+ "Show the Table Cell Properties dialog" : "×צ×× ×ת ×××× ×××-ש×× ×©× ××פ××× × ×ª× ×××××",
+ "Show the Table Row Properties dialog" : "×צ×× ×ת ×××× ×××-ש×× ×©× ××פ××× × ×©××¨× ×××××",
+ "Insert a new row before the current one" : "××ספת ש××¨× ×××©× ××¤× × ×× ××××ת",
+ "Insert a new row after the current one" : "××ספת ש××¨× ×××©× ×××¨× ×× ××××ת",
+ "Delete the current row" : "×××קת ×ת ×ש××¨× ×× ××××ת",
+ "Show the Table Properties dialog" : "×צ×× ×ת ×××× ×××-ש×× ×©× ××פ××× × ××××",
+ "Insert a new column before the current one" : "××ספת ××ר ××ש ××¤× × ×× ××××",
+ "Insert a new column after the current one" : "××ספת ××ר ××ש ×××¨× ×× ××××",
+ "Delete the current column" : "×××קת ×ת ×××ר ×× ××××",
+ "Create a link" : "×צ×רת ×§×ש×ר"
+};
Modified: plog/trunk/js/htmlarea/plugins/ContextMenu/lang/nl.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/ContextMenu/lang/nl.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/ContextMenu/lang/nl.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,66 +1,66 @@
-// I18N constants
-
-// LANG: "nl", ENCODING: UTF-8 | ISO-8859-1
-// Author: Michel Weegeerink (info at mmc-shop.nl), http://mmc-shop.nl
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-ContextMenu.I18N = {
- // Items that appear in menu. Please note that an underscore (_)
- // character in the translation (right column) will cause the following
- // letter to become underlined and be shortcut for that menu option.
-
- "Cut" : "Knippen",
- "Copy" : "Kopiëren",
- "Paste" : "Plakken",
- "Image Properties" : "Eigenschappen afbeelding...",
- "Modify Link" : "Hyperlin_k aanpassen...",
- "Check Link" : "Controleer hyperlin_k...",
- "Remove Link" : "Ve_rwijder hyperlink...",
- "Cell Properties" : "C_eleigenschappen...",
- "Row Properties" : "Rijeigenscha_ppen...",
- "Insert Row Before" : "Rij invoegen boven",
- "Insert Row After" : "Rij invoegen onder",
- "Delete Row" : "Rij _verwijderen",
- "Table Properties" : "_Tabeleigenschappen...",
- "Insert Column Before" : "Kolom invoegen voor",
- "Insert Column After" : "Kolom invoegen na",
- "Delete Column" : "Kolom verwijderen",
- "Justify Left" : "Links uitlijnen",
- "Justify Center" : "Centreren",
- "Justify Right" : "Rechts uitlijnen",
- "Justify Full" : "Uitvullen",
- "Make link" : "Maak hyperlin_k...",
- "Remove the" : "Verwijder het",
- "Element" : "element...",
-
- // Other labels (tooltips and alert/confirm box messages)
-
- "Please confirm that you want to remove this element:" : "Is het werkelijk de bedoeling dit element te verwijderen:",
- "Remove this node from the document" : "Verwijder dit punt van het document",
- "How did you get here? (Please report!)" : "Hoe kwam je hier? (A.U.B. doorgeven!)",
- "Show the image properties dialog" : "Laat het afbeeldingseigenschappen dialog zien",
- "Modify URL" : "Aanpassen URL",
- "Current URL is" : "Huidig URL is",
- "Opens this link in a new window" : "Opend deze hyperlink in een nieuw venster",
- "Please confirm that you want to unlink this element." : "Is het werkelijk de bedoeling dit element te unlinken.",
- "Link points to:" : "Hyperlink verwijst naar:",
- "Unlink the current element" : "Unlink het huidige element",
- "Show the Table Cell Properties dialog" : "Laat de tabel celeigenschappen dialog zien",
- "Show the Table Row Properties dialog" : "Laat de tabel rijeigenschappen dialog zien",
- "Insert a new row before the current one" : "Voeg een nieuwe rij in boven de huidige",
- "Insert a new row after the current one" : "Voeg een nieuwe rij in onder de huidige",
- "Delete the current row" : "Verwijder de huidige rij",
- "Show the Table Properties dialog" : "Laat de tabel eigenschappen dialog zien",
- "Insert a new column before the current one" : "Voeg een nieuwe kolom in voor de huidige",
- "Insert a new column after the current one" : "Voeg een nieuwe kolom in na de huidige",
- "Delete the current column" : "Verwijder de huidige kolom",
- "Create a link" : "Maak een hyperlink"
-};
+// I18N constants
+
+// LANG: "nl", ENCODING: UTF-8 | ISO-8859-1
+// Author: Michel Weegeerink (info at mmc-shop.nl), http://mmc-shop.nl
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+ContextMenu.I18N = {
+ // Items that appear in menu. Please note that an underscore (_)
+ // character in the translation (right column) will cause the following
+ // letter to become underlined and be shortcut for that menu option.
+
+ "Cut" : "Knippen",
+ "Copy" : "Kopiëren",
+ "Paste" : "Plakken",
+ "Image Properties" : "Eigenschappen afbeelding...",
+ "Modify Link" : "Hyperlin_k aanpassen...",
+ "Check Link" : "Controleer hyperlin_k...",
+ "Remove Link" : "Ve_rwijder hyperlink...",
+ "Cell Properties" : "C_eleigenschappen...",
+ "Row Properties" : "Rijeigenscha_ppen...",
+ "Insert Row Before" : "Rij invoegen boven",
+ "Insert Row After" : "Rij invoegen onder",
+ "Delete Row" : "Rij _verwijderen",
+ "Table Properties" : "_Tabeleigenschappen...",
+ "Insert Column Before" : "Kolom invoegen voor",
+ "Insert Column After" : "Kolom invoegen na",
+ "Delete Column" : "Kolom verwijderen",
+ "Justify Left" : "Links uitlijnen",
+ "Justify Center" : "Centreren",
+ "Justify Right" : "Rechts uitlijnen",
+ "Justify Full" : "Uitvullen",
+ "Make link" : "Maak hyperlin_k...",
+ "Remove the" : "Verwijder het",
+ "Element" : "element...",
+
+ // Other labels (tooltips and alert/confirm box messages)
+
+ "Please confirm that you want to remove this element:" : "Is het werkelijk de bedoeling dit element te verwijderen:",
+ "Remove this node from the document" : "Verwijder dit punt van het document",
+ "How did you get here? (Please report!)" : "Hoe kwam je hier? (A.U.B. doorgeven!)",
+ "Show the image properties dialog" : "Laat het afbeeldingseigenschappen dialog zien",
+ "Modify URL" : "Aanpassen URL",
+ "Current URL is" : "Huidig URL is",
+ "Opens this link in a new window" : "Opend deze hyperlink in een nieuw venster",
+ "Please confirm that you want to unlink this element." : "Is het werkelijk de bedoeling dit element te unlinken.",
+ "Link points to:" : "Hyperlink verwijst naar:",
+ "Unlink the current element" : "Unlink het huidige element",
+ "Show the Table Cell Properties dialog" : "Laat de tabel celeigenschappen dialog zien",
+ "Show the Table Row Properties dialog" : "Laat de tabel rijeigenschappen dialog zien",
+ "Insert a new row before the current one" : "Voeg een nieuwe rij in boven de huidige",
+ "Insert a new row after the current one" : "Voeg een nieuwe rij in onder de huidige",
+ "Delete the current row" : "Verwijder de huidige rij",
+ "Show the Table Properties dialog" : "Laat de tabel eigenschappen dialog zien",
+ "Insert a new column before the current one" : "Voeg een nieuwe kolom in voor de huidige",
+ "Insert a new column after the current one" : "Voeg een nieuwe kolom in na de huidige",
+ "Delete the current column" : "Verwijder de huidige kolom",
+ "Create a link" : "Maak een hyperlink"
+};
Modified: plog/trunk/js/htmlarea/plugins/ContextMenu/menu.css
===================================================================
--- plog/trunk/js/htmlarea/plugins/ContextMenu/menu.css 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/ContextMenu/menu.css 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,64 +1,65 @@
-/* styles for the ContextMenu /HTMLArea */
-/* The ContextMenu plugin is (c) dynarch.com 2003. */
-/* Distributed under the same terms as HTMLArea itself */
-
-div.htmlarea-context-menu {
- position: absolute;
- border: 1px solid #aca899;
- padding: 2px;
- background-color: #fff;
- cursor: default;
- z-index: 1000;
-}
-
-div.htmlarea-context-menu table {
- font: 11px tahoma,verdana,sans-serif;
- border-collapse: collapse;
-}
-
-div.htmlarea-context-menu tr.item td.icon img {
- width: 18px;
- height: 18px;
-}
-
-div.htmlarea-context-menu tr.item td.icon {
- padding: 0px 3px;
- height: 18px;
- background-color: #cdf;
-}
-
-div.htmlarea-context-menu tr.item td.label {
- padding: 1px 10px 1px 3px;
-}
-
-div.htmlarea-context-menu tr.separator td {
- padding: 2px 0px;
-}
-
-div.htmlarea-context-menu tr.separator td div {
- border-top: 1px solid #aca899;
- overflow: hidden;
- position: relative;
-}
-
-div.htmlarea-context-menu tr.separator td.icon {
- background-color: #cdf;
-}
-
-div.htmlarea-context-menu tr.separator td.icon div {
-/* margin-left: 3px; */
- border-color: #fff;
-}
-
-div.htmlarea-context-menu tr.separator td.label div {
- margin-right: 3px;
-}
-
-div.htmlarea-context-menu tr.item.hover {
- background-color: #316ac5;
- color: #fff;
-}
-
-div.htmlarea-context-menu tr.item.hover td.icon {
- background-color: #619af5;
-}
+/* styles for the ContextMenu /HTMLArea */
+/* The ContextMenu plugin is (c) dynarch.com 2003. */
+/* Distributed under the same terms as HTMLArea itself */
+
+div.htmlarea-context-menu {
+ position: absolute;
+ border: 1px solid #aca899;
+ padding: 2px;
+ background-color: #fff;
+ color: #000;
+ cursor: default;
+ z-index: 1000;
+}
+
+div.htmlarea-context-menu table {
+ font: 11px tahoma,verdana,sans-serif;
+ border-collapse: collapse;
+}
+
+div.htmlarea-context-menu tr.item td.icon img {
+ width: 18px;
+ height: 18px;
+}
+
+div.htmlarea-context-menu tr.item td.icon {
+ padding: 0px 3px;
+ height: 18px;
+ background-color: #cdf;
+}
+
+div.htmlarea-context-menu tr.item td.label {
+ padding: 1px 10px 1px 3px;
+}
+
+div.htmlarea-context-menu tr.separator td {
+ padding: 2px 0px;
+}
+
+div.htmlarea-context-menu tr.separator td div {
+ border-top: 1px solid #aca899;
+ overflow: hidden;
+ position: relative;
+}
+
+div.htmlarea-context-menu tr.separator td.icon {
+ background-color: #cdf;
+}
+
+div.htmlarea-context-menu tr.separator td.icon div {
+/* margin-left: 3px; */
+ border-color: #fff;
+}
+
+div.htmlarea-context-menu tr.separator td.label div {
+ margin-right: 3px;
+}
+
+div.htmlarea-context-menu tr.item.hover {
+ background-color: #316ac5;
+ color: #fff;
+}
+
+div.htmlarea-context-menu tr.item.hover td.icon {
+ background-color: #619af5;
+}
Added: plog/trunk/js/htmlarea/plugins/DynamicCSS/dynamiccss.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/DynamicCSS/dynamiccss.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/DynamicCSS/dynamiccss.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,235 @@
+// Dynamic CSS (className) plugin for HTMLArea
+// Sponsored by http://www.systemconcept.de
+// Implementation by Holger Hees
+//
+// (c) systemconcept.de 2004
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+
+function DynamicCSS(editor, args) {
+ this.editor = editor;
+
+ var cfg = editor.config;
+ var toolbar = cfg.toolbar;
+ var self = this;
+ var i18n = DynamicCSS.I18N;
+
+ /*var cssArray=null;
+ var cssLength=0;
+ var lastTag=null;
+ var lastClass=null;*/
+
+ var css_class = {
+ id : "DynamicCSS-class",
+ tooltip : i18n["DynamicCSSStyleTooltip"],
+ options : {"":""},
+ action : function(editor) { self.onSelect(editor, this); },
+ refresh : function(editor) { self.updateValue(editor, this); }
+ };
+ cfg.registerDropdown(css_class);
+
+ toolbar[0].splice(0, 0, "separator");
+ toolbar[0].splice(0, 0, "DynamicCSS-class");
+ toolbar[0].splice(0, 0, "T[CSS]");
+};
+
+DynamicCSS.parseStyleSheet=function(editor){
+ var i18n = DynamicCSS.I18N;
+ iframe = editor._iframe.contentWindow.document;
+
+ cssArray=DynamicCSS.cssArray;
+ if(!cssArray) cssArray=new Array();
+
+ for(i=0;i<iframe.styleSheets.length;i++){
+ // Mozilla
+ if(HTMLArea.is_gecko){
+ try{
+ cssArray=DynamicCSS.applyCSSRule(i18n,iframe.styleSheets[i].cssRules,cssArray);
+ }
+ catch(e){
+ //alert(e);
+ }
+ }
+ // IE
+ else {
+ try{
+ if(iframe.styleSheets[i].rules){
+ cssArray=DynamicCSS.applyCSSRule(i18n,iframe.styleSheets[i].rules,cssArray);
+ }
+ // @import StyleSheets (IE)
+ if(iframe.styleSheets[i].imports){
+ for(j=0;j<iframe.styleSheets[i].imports.length;j++){
+ cssArray=DynamicCSS.applyCSSRule(i18n,iframe.styleSheets[i].imports[j].rules,cssArray);
+ }
+ }
+ }
+ catch(e){
+ //alert(e);
+ }
+ }
+ }
+ DynamicCSS.cssArray=cssArray;
+}
+
+DynamicCSS.applyCSSRule=function(i18n,cssRules,cssArray){
+ for(rule in cssRules){
+ // StyleRule
+ if(cssRules[rule].selectorText){
+ if(cssRules[rule].selectorText.search(/:+/)==-1){
+
+ // split equal Styles (Mozilla-specific) e.q. head, body {border:0px}
+ // for ie not relevant. returns allways one element
+ cssElements = cssRules[rule].selectorText.split(",");
+ for(k=0;k<cssElements.length;k++){
+ cssElement = cssElements[k].split(".");
+
+ tagName=cssElement[0].toLowerCase().trim();
+ className=cssElement[1];
+
+ if(!tagName) tagName='all';
+ if(!cssArray[tagName]) cssArray[tagName]=new Array();
+
+ if(className){
+ if(tagName=='all') cssName=className;
+ else cssName='<'+className+'>';
+ }
+ else{
+ className='none';
+ if(tagName=='all') cssName=i18n["Default"];
+ else cssName='<'+i18n["Default"]+'>';
+ }
+ cssArray[tagName][className]=cssName;
+ DynamicCSS.cssLength++;
+ }
+ }
+ }
+ // ImportRule (Mozilla)
+ else if(cssRules[rule].styleSheet){
+ cssArray=DynamicCSS.applyCSSRule(i18n,cssRules[rule].styleSheet.cssRules,cssArray);
+ }
+ }
+ return cssArray;
+}
+
+DynamicCSS._pluginInfo = {
+ name : "DynamicCSS",
+ version : "1.5.2",
+ developer : "Holger Hees",
+ developer_url : "http://www.systemconcept.de/",
+ c_owner : "Holger Hees",
+ sponsor : "System Concept GmbH",
+ sponsor_url : "http://www.systemconcept.de/",
+ license : "htmlArea"
+};
+
+DynamicCSS.prototype.onSelect = function(editor, obj) {
+ var tbobj = editor._toolbarObjects[obj.id];
+ var index = tbobj.element.selectedIndex;
+ var className = tbobj.element.value;
+
+ var parent = editor.getParentElement();
+
+ if(className!='none'){
+ parent.className=className;
+ DynamicCSS.lastClass=className;
+ }
+ else{
+ if(HTMLArea.is_gecko) parent.removeAttribute('class');
+ else parent.removeAttribute('className');
+ }
+ editor.updateToolbar();
+};
+
+/*DynamicCSS.prototype.onMode = function(mode) {
+ if(mode=='wysiwyg'){
+ // reparse possible changed css files
+ DynamicCSS.cssArray=null;
+ this.updateValue(this.editor,this.editor.config.customSelects["DynamicCSS-class"]);
+ }
+}*/
+
+DynamicCSS.prototype.reparseTimer = function(editor, obj, instance) {
+ // new attempt of rescan stylesheets in 1,2,4 and 8 second (e.g. for external css-files with longer initialisation)
+ if(DynamicCSS.parseCount<9){
+ setTimeout(function () {
+ DynamicCSS.cssLength=0;
+ DynamicCSS.parseStyleSheet(editor);
+ if(DynamicCSS.cssOldLength!=DynamicCSS.cssLength){
+ DynamicCSS.cssOldLength=DynamicCSS.cssLength;
+ DynamicCSS.lastClass=null;
+ instance.updateValue(editor, obj);
+ }
+ instance.reparseTimer(editor, obj, instance);
+ },DynamicCSS.parseCount*1000);
+ DynamicCSS.parseCount=DynamicCSS.parseCount*2;
+ }
+}
+
+DynamicCSS.prototype.updateValue = function(editor, obj) {
+ cssArray=DynamicCSS.cssArray;
+ // initial style init
+ if(!cssArray){
+ DynamicCSS.cssLength=0;
+ DynamicCSS.parseStyleSheet(editor);
+ cssArray=DynamicCSS.cssArray;
+ DynamicCSS.cssOldLength=DynamicCSS.cssLength;
+ DynamicCSS.parseCount=1;
+ this.reparseTimer(editor,obj,this);
+ }
+
+ var parent = editor.getParentElement();
+ var tagName = parent.tagName.toLowerCase();
+ var className = parent.className;
+
+ if(DynamicCSS.lastTag!=tagName || DynamicCSS.lastClass!=className){
+ DynamicCSS.lastTag=tagName;
+ DynamicCSS.lastClass=className;
+
+ var i18n = DynamicCSS.I18N;
+ var select = editor._toolbarObjects[obj.id].element;
+
+ while(select.length>0){
+ select.options[select.length-1] = null;
+ }
+
+ select.options[0]=new Option(i18n["Default"],'none');
+ if(cssArray){
+ // style class only allowed if parent tag is not body or editor is in fullpage mode
+ if(tagName!='body' || editor.config.fullPage){
+ if(cssArray[tagName]){
+ for(cssClass in cssArray[tagName]){
+ if(cssClass=='none') select.options[0]=new Option(cssArray[tagName][cssClass],cssClass);
+ else select.options[select.length]=new Option(cssArray[tagName][cssClass],cssClass);
+ }
+ }
+
+ if(cssArray['all']){
+ for(cssClass in cssArray['all']){
+ select.options[select.length]=new Option(cssArray['all'][cssClass],cssClass);
+ }
+ }
+ }
+ else if(cssArray[tagName] && cssArray[tagName]['none']) select.options[0]=new Option(cssArray[tagName]['none'],'none');
+ }
+
+ select.selectedIndex = 0;
+
+ if (typeof className != "undefined" && /\S/.test(className)) {
+ var options = select.options;
+ for (var i = options.length; --i >= 0;) {
+ var option = options[i];
+ if (className == option.value) {
+ select.selectedIndex = i;
+ break;
+ }
+ }
+ if(select.selectedIndex == 0){
+ select.options[select.length]=new Option(i18n["Undefined"],className);
+ select.selectedIndex=select.length-1;
+ }
+ }
+
+ if(select.length>1) select.disabled=false;
+ else select.disabled=true;
+ }
+};
Added: plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/de.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/de.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/de.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,15 @@
+// I18N constants
+
+// LANG: "de", ENCODING: UTF-8 | ISO-8859-1
+// Sponsored by http://www.systemconcept.de
+// Author: Holger Hees, <hhees at systemconcept.de>
+//
+// (c) systemconcept.de 2004
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+
+DynamicCSS.I18N = {
+ "Default" : "Standard",
+ "Undefined" : "Nicht definiert",
+ "DynamicCSSStyleTooltip" : "Wählen Sie einen StyleSheet aus"
+};
Added: plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/en.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,15 @@
+// I18N constants
+
+// LANG: "de", ENCODING: UTF-8 | ISO-8859-1
+// Sponsored by http://www.systemconcept.de
+// Author: Holger Hees, <hhees at systemconcept.de>
+//
+// (c) systemconcept.de 2004
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+
+DynamicCSS.I18N = {
+ "Default" : "Default",
+ "Undefined" : "Undefined",
+ "DynamicCSSStyleTooltip" : "Choose stylesheet"
+};
Added: plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/fr.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/fr.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/DynamicCSS/lang/fr.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,15 @@
+// I18N constants
+
+// LANG: "fr", ENCODING: UTF-8 | ISO-8859-1
+// Sponsored by http://www.ebdata.com
+// Author: Cédric Guillemette, <cguillemette at ebdata.com>
+//
+// (c) www.ebdata.com 2004
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+
+DynamicCSS.I18N = {
+ "Default" : "Défaut",
+ "Undefined" : "Non défini",
+ "DynamicCSSStyleTooltip" : "Choisir feuille de style"
+};
Added: plog/trunk/js/htmlarea/plugins/EnterParagraphs/enter-paragraphs.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/EnterParagraphs/enter-paragraphs.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/EnterParagraphs/enter-paragraphs.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,287 @@
+// By Adam Wright, for The University of Western Australia
+//
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+
+function EnterParagraphs(editor) {
+ this.editor = editor;
+
+ // Activate only if we're talking to Gecko
+ if (HTMLArea.is_gecko)
+ this.onKeyPress = this.__onKeyPress;
+};
+
+EnterParagraphs._pluginInfo = {
+ name : "EnterParagraphs",
+ version : "1.0",
+ developer : "Adam Wright",
+ developer_url : "http://www.hipikat.org/",
+ sponsor : "The University of Western Australia",
+ sponsor_url : "http://www.uwa.edu.au/",
+ license : "htmlArea"
+};
+
+// Whitespace Regex
+EnterParagraphs.prototype._whiteSpace = /^\s*$/;
+// The pragmatic list of which elements a paragraph may not contain, and which may contain a paragraph
+EnterParagraphs.prototype._pExclusions = /^(address|blockquote|body|dd|div|dl|dt|fieldset|form|h1|h2|h3|h4|h5|h6|hr|li|noscript|ol|p|pre|table|ul)$/i;
+EnterParagraphs.prototype._pContainers = /^(body|del|div|fieldset|form|ins|map|noscript|object|td|th)$/i;
+// Elements which may not contain paragraphs, and would prefer a break to being split
+EnterParagraphs.prototype._pBreak = /^(address|pre|blockquote)$/i;
+// Elements which may not contain children
+EnterParagraphs.prototype._permEmpty = /^(area|base|basefont|br|col|frame|hr|img|input|isindex|link|meta|param)$/i;
+// Elements which count as content, as distinct from whitespace or containers
+EnterParagraphs.prototype._elemSolid = /^(applet|br|button|hr|img|input|table)$/i;
+// Elements which should get a new P, before or after, when enter is pressed at either end
+EnterParagraphs.prototype._pifySibling = /^(address|blockquote|del|div|dl|fieldset|form|h1|h2|h3|h4|h5|h6|hr|ins|map|noscript|object|ol|p|pre|table|ul|)$/i;
+EnterParagraphs.prototype._pifyForced = /^(ul|ol|dl|table)$/i;
+// Elements which should get a new P, before or after a close parent, when enter is pressed at either end
+EnterParagraphs.prototype._pifyParent = /^(dd|dt|li|td|th|tr)$/i;
+
+// Gecko's a bit lacking in some odd ways...
+EnterParagraphs.prototype.insertAdjacentElement = function(ref,pos,el) {
+
+ if ( pos == 'BeforeBegin' ) ref.parentNode.insertBefore(el,ref);
+ else if ( pos == 'AfterEnd' ) ref.nextSibling ? ref.parentNode.insertBefore(el,ref.nextSibling) : ref.parentNode.appendChild(el);
+ else if ( pos == 'AfterBegin' && ref.firstChild ) ref.insertBefore(el,ref.firstChild);
+ else if ( pos == 'BeforeEnd' || pos == 'AfterBegin' ) ref.appendChild(el);
+};
+
+// Passes a global parent node or document fragment to forEachNode
+EnterParagraphs.prototype.forEachNodeUnder = function (top, fn, ltr, init, parm) {
+
+ // Identify the first and last nodes to deal with
+ var start, end;
+ if ( top.nodeType == 11 && top.firstChild ) {
+ start = top.firstChild;
+ end = top.lastChild;
+ } else start = end = top;
+ while ( end.lastChild ) end = end.lastChild;
+
+ // Pass onto forEachNode
+ return this.forEachNode(start, end, fn, ltr, init, parm);
+};
+
+// Throws each node into a function
+EnterParagraphs.prototype.forEachNode = function (left, right, fn, ltr, init, parm) {
+
+ var xBro = function(elem, ltr) { return ( ltr ? elem.nextSibling : elem.previousSibling ); };
+ var xSon = function(elem, ltr) { return ( ltr ? elem.firstChild : elem.lastChild ); };
+ var walk, lookup, fnVal, ping = init;
+
+ // Until we've hit the last node
+ while ( walk != ltr ? right : left ) {
+
+ // Progress to the next node
+ if ( !walk ) walk = ltr ? left : right;
+ else {
+ if ( xSon(walk,ltr) ) walk = xSon(walk,ltr);
+ else {
+ if ( xBro(walk,ltr) ) walk = xBro(walk,ltr);
+ else {
+ lookup = walk;
+ while ( !xBro(lookup,ltr) && lookup != (ltr ? right : left) ) lookup = lookup.parentNode;
+ walk = ( lookup.nextSibling ? lookup.nextSibling : lookup ) ;
+ if ( walk == right ) break;
+ } } }
+
+ fnVal = fn(this, walk, ping, parm, (walk==(ltr?right:left))); // Throw this node at the wanted function
+ if ( fnVal[0] ) return fnVal[1]; // If this node wants us to return, return pong
+ if ( fnVal[1] ) ping = fnVal[1]; // Otherwise, set pong to ping, to pass to the next node
+ }
+ return false;
+};
+
+// forEachNode fn: Find a post-insertion node, only if all nodes are empty, or the first content
+EnterParagraphs.prototype._fenEmptySet = function (parent, node, pong, getCont, last) {
+
+ // Mark this if it's the first base
+ if ( !pong && !node.firstChild ) pong = node;
+
+ // Check for content
+ if ( (node.nodeType == 1 && parent._elemSolid.test(node.nodeName)) ||
+ (node.nodeType == 3 && !parent._whiteSpace.test(node.nodeValue)) ||
+ (node.nodeType != 1 && node.nodeType != 3) ) {
+
+ return new Array(true, (getCont?node:false));
+ }
+
+ // Only return the 'base' node if we didn't want content
+ if ( last && !getCont ) return new Array(true, pong);
+ return new Array(false, pong);
+};
+
+// forEachNode fn:
+EnterParagraphs.prototype._fenCullIds = function (parent, node, pong, parm, last) {
+
+ // Check for an id, blast it if it's in the store, otherwise add it
+ if ( node.id ) pong[node.id] ? node.id = '' : pong[node.id] = true;
+ return new Array(false,pong);
+};
+
+// Grabs a range suitable for paragraph stuffing
+EnterParagraphs.prototype.processSide = function(rng, left) {
+
+ var next = function(element, left) { return ( left ? element.previousSibling : element.nextSibling ); };
+ var node = left ? rng.startContainer : rng.endContainer;
+ var offset = left ? rng.startOffset : rng.endOffset;
+ var roam, start = node;
+
+ // Never start with an element, because then the first roaming node might
+ // be on the exclusion list and we wouldn't know until it was too late
+ while ( start.nodeType == 1 && !this._permEmpty.test(start.nodeName) ) start = ( offset ? start.lastChild : start.firstChild );
+
+ // Climb the tree, left or right, until our course of action presents itself
+ while ( roam = roam ? ( next(roam,left) ? next(roam,left) : roam.parentNode ) : start ) {
+
+ if ( next(roam,left) ) {
+ // If the next sibling's on the exclusion list, stop before it
+ if ( this._pExclusions.test(next(roam,left).nodeName) ) {
+ return this.processRng(rng, left, roam, next(roam,left), (left?'AfterEnd':'BeforeBegin'), true, false);
+ } } else {
+ // If our parent's on the container list, stop inside it
+ if (this._pContainers.test(roam.parentNode.nodeName)) {
+ return this.processRng(rng, left, roam, roam.parentNode, (left?'AfterBegin':'BeforeEnd'), true, false);
+ }
+ // If our parent's on the exclusion list, chop without wrapping
+ else if (this._pExclusions.test(roam.parentNode.nodeName)) {
+ if (this._pBreak.test(roam.parentNode.nodeName)) {
+ return this.processRng(rng, left, roam, roam.parentNode,
+ (left?'AfterBegin':'BeforeEnd'), false, (left?true:false));
+ } else {
+ return this.processRng(rng, left, (roam = roam.parentNode),
+ (next(roam,left) ? next(roam,left) : roam.parentNode),
+ (next(roam,left) ? (left?'AfterEnd':'BeforeBegin') : (left?'AfterBegin':'BeforeEnd')), false, false);
+} } } } };
+
+// Neighbour and insertion identify where the new node, roam, needs to enter
+// the document; landmarks in our selection will be deleted before insertion
+EnterParagraphs.prototype.processRng = function(rng, left, roam, neighbour, insertion, pWrap, preBr) {
+
+ var node = left ? rng.startContainer : rng.endContainer;
+ var offset = left ? rng.startOffset : rng.endOffset;
+
+ // Define the range to cut, and extend the selection range to the same boundary
+ var newRng = this.editor._doc.createRange();
+ newRng.selectNode(roam);
+ if (left) {
+ newRng.setEnd(node, offset);
+ rng.setStart(newRng.startContainer, newRng.startOffset);
+ } else {
+ newRng.setStart(node, offset);
+ rng.setEnd(newRng.endContainer, newRng.endOffset);
+ }
+
+ // Clone the range and remove duplicate ids it would otherwise produce
+ var cnt = newRng.cloneContents();
+ this.forEachNodeUnder(cnt, this._fenCullIds, true, this.takenIds, false);
+
+ // Special case, for inserting paragraphs before some blocks when caret is at their zero offset
+ var pify, pifyOffset, fill;
+ pify = left ? (newRng.endContainer.nodeType == 3 ? true:false) : (newRng.startContainer.nodeType == 3 ? false:true);
+ pifyOffset = pify ? newRng.startOffset : newRng.endOffset;
+ pify = pify ? newRng.startContainer : newRng.endContainer;
+
+ if ( this._pifyParent.test(pify.nodeName) && pify.parentNode.childNodes.item(0) == pify ) {
+ while ( !this._pifySibling.test(pify.nodeName) ) pify = pify.parentNode;
+ }
+
+ if ( cnt.nodeType == 11 && !cnt.firstChild ) cnt.appendChild(this.editor._doc.createElement(pify.nodeName));
+ fill = this.forEachNodeUnder(cnt,this._fenEmptySet,true,false,false);
+
+ if ( fill && this._pifySibling.test(pify.nodeName) &&
+ ( (pifyOffset == 0) || ( pifyOffset == 1 && this._pifyForced.test(pify.nodeName) ) ) ) {
+
+ roam = this.editor._doc.createElement('p');
+ roam.appendChild(this.editor._doc.createElement('br'));
+
+ if (left && pify.previousSibling) return new Array(pify.previousSibling, 'AfterEnd', roam);
+ else if (!left && pify.nextSibling) return new Array(pify.nextSibling, 'BeforeBegin', roam);
+ else return new Array(pify.parentNode, (left?'AfterBegin':'BeforeEnd'), roam);
+ }
+
+ // If our cloned contents are 'content'-less, shove a break in them
+ if ( fill ) {
+ if ( fill.nodeType == 3 ) fill = fill.parentNode; // Ill-concieved?
+ if ( (fill.nodeType == 1 && !this._elemSolid.test()) || fill.nodeType == 11 ) fill.appendChild(this.editor._doc.createElement('br'));
+ else fill.parentNode.insertBefore(this.editor._doc.createElement('br'),fill);
+ }
+
+ // And stuff a shiny new object with whatever contents we have
+ roam = (pWrap || (cnt.nodeType == 11 && !cnt.firstChild)) ? this.editor._doc.createElement('p') : this.editor._doc.createDocumentFragment();
+ roam.appendChild(cnt);
+ if (preBr) roam.appendChild(this.editor._doc.createElement('br'));
+
+ // Return the nearest relative, relative insertion point and fragment to insert
+ return new Array(neighbour, insertion, roam);
+};
+
+// Called when a key is pressed in the editor
+EnterParagraphs.prototype.__onKeyPress = function(ev) {
+
+ // If they've hit enter and shift is up, take it
+ if (ev.keyCode == 13 && !ev.shiftKey && this.editor._iframe.contentWindow.getSelection)
+ return this.handleEnter(ev);
+};
+
+// Handles the pressing of an unshifted enter for Gecko
+EnterParagraphs.prototype.handleEnter = function(ev) {
+
+ // Grab the selection and associated range
+ var sel = this.editor._getSelection();
+ var rng = this.editor._createRange(sel);
+ this.takenIds = new Object();
+
+ // Grab ranges for document re-stuffing, if appropriate
+ var pStart = this.processSide(rng, true);
+ var pEnd = this.processSide(rng, false);
+
+ // Get rid of everything local to the selection
+ sel.removeAllRanges();
+ rng.deleteContents();
+
+ // Grab a node we'll have after insertion, since fragments will be lost
+ var holdEnd = this.forEachNodeUnder(pEnd[2], this._fenEmptySet, true, false, true);
+
+ // Reinsert our carefully chosen document fragments
+ if ( pStart ) this.insertAdjacentElement(pStart[0], pStart[1], pStart[2]);
+ if ( pEnd.nodeType != 1 ) this.insertAdjacentElement(pEnd[0], pEnd[1], pEnd[2]);
+
+ // Move the caret in front of the first good text element
+ if ( this._permEmpty.test(holdEnd.nodeName) ) {
+ var prodigal = 0;
+ while ( holdEnd.parentNode.childNodes.item(prodigal) != holdEnd ) prodigal++;
+ sel.collapse( holdEnd.parentNode, prodigal);
+ }
+ else sel.collapse(holdEnd, 0);
+ // this.editor.scrollToElement(holdEnd);
+ this.editor.updateToolbar();
+
+ //======================
+ HTMLArea._stopEvent(ev);
+ return true;
+};
+
+// Scroll to the last line, for Gecko only
+HTMLArea.prototype.scrollToElement = function(e)
+{
+ if(HTMLArea.is_gecko)
+ {
+ var top = 0;
+ var left = 0;
+ while(e)
+ {
+ top += e.offsetTop;
+ left += e.offsetLeft;
+ if(e.offsetParent && e.offsetParent.tagName.toLowerCase() != 'body')
+ {
+ e = e.offsetParent;
+ }
+ else
+ {
+ e = null;
+ }
+ }
+ this._iframe.contentWindow.scrollTo(left, top);
+ }
+}
Added: plog/trunk/js/htmlarea/plugins/EnterParagraphs/lang/en.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/EnterParagraphs/lang/en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/EnterParagraphs/lang/en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,5 @@
+// I18N constants
+
+EnterParagraphs.I18N = {
+};
+
Modified: plog/trunk/js/htmlarea/plugins/FullPage/full-page.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/FullPage/full-page.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/FullPage/full-page.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,143 +1,172 @@
-// FullPage Plugin for HTMLArea-3.0
-// Implementation by Mihai Bazon. Sponsored by http://thycotic.com
-//
-// htmlArea v3.0 - Copyright (c) 2002 interactivetools.com, inc.
-// This notice MUST stay intact for use (see license.txt).
-//
-// A free WYSIWYG editor replacement for <textarea> fields.
-// For full source code and docs, visit http://www.interactivetools.com/
-//
-// Version 3.0 developed by Mihai Bazon for InteractiveTools.
-// http://dynarch.com/mishoo
-//
-// $Id: full-page.js,v 1.2 2003/10/24 19:43:51 mishoo Exp $
-
-function FullPage(editor) {
- this.editor = editor;
-
- var cfg = editor.config;
- cfg.fullPage = true;
- var tt = FullPage.I18N;
- var self = this;
-
- cfg.registerButton("FP-docprop", tt["Document properties"], editor.imgURL("docprop.gif", "FullPage"), false,
- function(editor, id) {
- self.buttonPress(editor, id);
- });
-
- // add a new line in the toolbar
- cfg.toolbar[0].splice(0, 0, "separator");
- cfg.toolbar[0].splice(0, 0, "FP-docprop");
-};
-
-FullPage._pluginInfo = {
- name : "FullPage",
- version : "1.0",
- developer : "Mihai Bazon",
- developer_url : "http://dynarch.com/mishoo/",
- c_owner : "Mihai Bazon",
- sponsor : "Thycotic Software Ltd.",
- sponsor_url : "http://thycotic.com",
- license : "htmlArea"
-};
-
-FullPage.prototype.buttonPress = function(editor, id) {
- var self = this;
- switch (id) {
- case "FP-docprop":
- var doc = editor._doc;
- var links = doc.getElementsByTagName("link");
- var style1 = '';
- var style2 = '';
- for (var i = links.length; --i >= 0;) {
- var link = links[i];
- if (/stylesheet/i.test(link.rel)) {
- if (/alternate/i.test(link.rel))
- style2 = link.href;
- else
- style1 = link.href;
- }
- }
- var title = doc.getElementsByTagName("title")[0];
- title = title ? title.innerHTML : '';
- var init = {
- f_doctype : editor.doctype,
- f_title : title,
- f_body_bgcolor : HTMLArea._colorToRgb(doc.body.style.backgroundColor),
- f_body_fgcolor : HTMLArea._colorToRgb(doc.body.style.color),
- f_base_style : style1,
- f_alt_style : style2,
-
- editor : editor
- };
- editor._popupDialog("plugin://FullPage/docprop", function(params) {
- self.setDocProp(params);
- }, init);
- break;
- }
-};
-
-FullPage.prototype.setDocProp = function(params) {
- var txt = "";
- var doc = this.editor._doc;
- var head = doc.getElementsByTagName("head")[0];
- var links = doc.getElementsByTagName("link");
- var style1 = null;
- var style2 = null;
- for (var i = links.length; --i >= 0;) {
- var link = links[i];
- if (/stylesheet/i.test(link.rel)) {
- if (/alternate/i.test(link.rel))
- style2 = link;
- else
- style1 = link;
- }
- }
- function createLink(alt) {
- var link = doc.createElement("link");
- link.rel = alt ? "alternate stylesheet" : "stylesheet";
- head.appendChild(link);
- return link;
- };
-
- if (!style1 && params.f_base_style)
- style1 = createLink(false);
- if (params.f_base_style)
- style1.href = params.f_base_style;
- else if (style1)
- head.removeChild(style1);
-
- if (!style2 && params.f_alt_style)
- style2 = createLink(true);
- if (params.f_alt_style)
- style2.href = params.f_alt_style;
- else if (style2)
- head.removeChild(style2);
-
- for (var i in params) {
- var val = params[i];
- switch (i) {
- case "f_title":
- var title = doc.getElementsByTagName("title")[0];
- if (!title) {
- title = doc.createElement("title");
- head.appendChild(title);
- } else while (node = title.lastChild)
- title.removeChild(node);
- if (!HTMLArea.is_ie)
- title.appendChild(doc.createTextNode(val));
- else
- doc.title = val;
- break;
- case "f_doctype":
- this.editor.setDoctype(val);
- break;
- case "f_body_bgcolor":
- doc.body.style.backgroundColor = val;
- break;
- case "f_body_fgcolor":
- doc.body.style.color = val;
- break;
- }
- }
-};
+// FullPage Plugin for HTMLArea-3.0
+// Implementation by Mihai Bazon. Sponsored by http://thycotic.com
+//
+// (c) dynarch.com 2003-2005.
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+//
+// $Id: full-page.js,v 1.4 2005/01/20 17:49:03 mishoo Exp $
+
+function FullPage(editor) {
+ this.editor = editor;
+
+ var cfg = editor.config;
+ cfg.fullPage = true;
+ var tt = FullPage.I18N;
+ var self = this;
+
+ cfg.registerButton("FP-docprop", tt["Document properties"], editor.imgURL("docprop.gif", "FullPage"), false,
+ function(editor, id) {
+ self.buttonPress(editor, id);
+ });
+
+ // add a new line in the toolbar
+ cfg.toolbar[0].splice(0, 0, "separator");
+ cfg.toolbar[0].splice(0, 0, "FP-docprop");
+};
+
+FullPage._pluginInfo = {
+ name : "FullPage",
+ version : "1.0",
+ developer : "Mihai Bazon",
+ developer_url : "http://dynarch.com/mishoo/",
+ c_owner : "Mihai Bazon",
+ sponsor : "Thycotic Software Ltd.",
+ sponsor_url : "http://thycotic.com",
+ license : "htmlArea"
+};
+
+FullPage.prototype.buttonPress = function(editor, id) {
+ var self = this;
+ switch (id) {
+ case "FP-docprop":
+ var doc = editor._doc;
+ var links = doc.getElementsByTagName("link");
+ var style1 = '';
+ var style2 = '';
+ var charset = '';
+ for (var i = links.length; --i >= 0;) {
+ var link = links[i];
+ if (/stylesheet/i.test(link.rel)) {
+ if (/alternate/i.test(link.rel))
+ style2 = link.href;
+ else
+ style1 = link.href;
+ }
+ }
+ var metas = doc.getElementsByTagName("meta");
+ for (var i = metas.length; --i >= 0;) {
+ var meta = metas[i];
+ if (/content-type/i.test(meta.httpEquiv)) {
+ r = /^text\/html; *charset=(.*)$/i.exec(meta.content);
+ charset = r[1];
+ }
+ }
+ var title = doc.getElementsByTagName("title")[0];
+ title = title ? title.innerHTML : '';
+ var init = {
+ f_doctype : editor.doctype,
+ f_title : title,
+ f_body_bgcolor : HTMLArea._colorToRgb(doc.body.style.backgroundColor),
+ f_body_fgcolor : HTMLArea._colorToRgb(doc.body.style.color),
+ f_base_style : style1,
+ f_alt_style : style2,
+ f_charset : charset,
+ editor : editor
+ };
+ editor._popupDialog("plugin://FullPage/docprop", function(params) {
+ self.setDocProp(params);
+ }, init);
+ break;
+ }
+};
+
+FullPage.prototype.setDocProp = function(params) {
+ var txt = "";
+ var doc = this.editor._doc;
+ var head = doc.getElementsByTagName("head")[0];
+ var links = doc.getElementsByTagName("link");
+ var metas = doc.getElementsByTagName("meta");
+ var style1 = null;
+ var style2 = null;
+ var charset = null;
+ var charset_meta = null;
+ for (var i = links.length; --i >= 0;) {
+ var link = links[i];
+ if (/stylesheet/i.test(link.rel)) {
+ if (/alternate/i.test(link.rel))
+ style2 = link;
+ else
+ style1 = link;
+ }
+ }
+ for (var i = metas.length; --i >= 0;) {
+ var meta = metas[i];
+ if (/content-type/i.test(meta.httpEquiv)) {
+ r = /^text\/html; *charset=(.*)$/i.exec(meta.content);
+ charset = r[1];
+ charset_meta = meta;
+ }
+ }
+ function createLink(alt) {
+ var link = doc.createElement("link");
+ link.rel = alt ? "alternate stylesheet" : "stylesheet";
+ head.appendChild(link);
+ return link;
+ };
+ function createMeta(name, content) {
+ var meta = doc.createElement("meta");
+ meta.httpEquiv = name;
+ meta.content = content;
+ head.appendChild(meta);
+ return meta;
+ };
+
+ if (!style1 && params.f_base_style)
+ style1 = createLink(false);
+ if (params.f_base_style)
+ style1.href = params.f_base_style;
+ else if (style1)
+ head.removeChild(style1);
+
+ if (!style2 && params.f_alt_style)
+ style2 = createLink(true);
+ if (params.f_alt_style)
+ style2.href = params.f_alt_style;
+ else if (style2)
+ head.removeChild(style2);
+
+ if (charset_meta) {
+ head.removeChild(charset_meta);
+ charset_meta = null;
+ }
+ if (!charset_meta && params.f_charset)
+ charset_meta = createMeta("Content-Type", "text/html; charset="+params.f_charset);
+
+ for (var i in params) {
+ var val = params[i];
+ switch (i) {
+ case "f_title":
+ var title = doc.getElementsByTagName("title")[0];
+ if (!title) {
+ title = doc.createElement("title");
+ head.appendChild(title);
+ } else while (node = title.lastChild)
+ title.removeChild(node);
+ if (!HTMLArea.is_ie)
+ title.appendChild(doc.createTextNode(val));
+ else
+ doc.title = val;
+ break;
+ case "f_doctype":
+ this.editor.setDoctype(val);
+ break;
+ case "f_body_bgcolor":
+ doc.body.style.backgroundColor = val;
+ break;
+ case "f_body_fgcolor":
+ doc.body.style.color = val;
+ break;
+ }
+ }
+};
Added: plog/trunk/js/htmlarea/plugins/FullPage/lang/de.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/FullPage/lang/de.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/FullPage/lang/de.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,25 @@
+// I18N for the FullPage plugin
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Holger Hees, http://www.systemconcept.de
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+FullPage.I18N = {
+ "Alternate style-sheet:": "Alternativer Stylesheet:",
+ "Background color:": "Hintergrundfarbe:",
+ "Cancel": "Abbrechen",
+ "DOCTYPE:": "DOCTYPE:",
+ "Document properties": "Dokumenteigenschaften",
+ "Document title:": "Dokumenttitel:",
+ "OK": "OK",
+ "Primary style-sheet:": "Stylesheet:",
+ "Text color:": "Textfarbe:"
+};
Modified: plog/trunk/js/htmlarea/plugins/FullPage/lang/en.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/FullPage/lang/en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/FullPage/lang/en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,25 +1,25 @@
-// I18N for the FullPage plugin
-
-// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
-// Author: Mihai Bazon, http://dynarch.com/mishoo
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-FullPage.I18N = {
- "Alternate style-sheet:": "Alternate style-sheet:",
- "Background color:": "Background color:",
- "Cancel": "Cancel",
- "DOCTYPE:": "DOCTYPE:",
- "Document properties": "Document properties",
- "Document title:": "Document title:",
- "OK": "OK",
- "Primary style-sheet:": "Primary style-sheet:",
- "Text color:": "Text color:"
-};
+// I18N for the FullPage plugin
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+FullPage.I18N = {
+ "Alternate style-sheet:": "Alternate style-sheet:",
+ "Background color:": "Background color:",
+ "Cancel": "Cancel",
+ "DOCTYPE:": "DOCTYPE:",
+ "Document properties": "Document properties",
+ "Document title:": "Document title:",
+ "OK": "OK",
+ "Primary style-sheet:": "Primary style-sheet:",
+ "Text color:": "Text color:"
+};
Added: plog/trunk/js/htmlarea/plugins/FullPage/lang/fr.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/FullPage/lang/fr.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/FullPage/lang/fr.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,25 @@
+// I18N for the FullPage plugin
+
+// LANG: "fr", ENCODING: UTF-8 | ISO-8859-1
+// Author: Cédric Guillemette, http://www.ebdata.com
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+FullPage.I18N = {
+ "Alternate style-sheet:": "Feuille de style alternative:",
+ "Background color:": "Couleur d'arrière plan:",
+ "Cancel": "Annuler",
+ "DOCTYPE:": "DOCTYPE:",
+ "Document properties": "Propriétés de document",
+ "Document title:": "Titre du document:",
+ "OK": "OK",
+ "Primary style-sheet:": "Feuille de style primaire:",
+ "Text color:": "Couleur de texte:"
+};
Added: plog/trunk/js/htmlarea/plugins/FullPage/lang/he.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/FullPage/lang/he.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/FullPage/lang/he.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,25 @@
+// I18N for the FullPage plugin
+
+// LANG: "he", ENCODING: UTF-8
+// Author: Liron Newman, http://www.eesh.net, <plastish at ultinet dot org>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+FullPage.I18N = {
+ "Alternate style-sheet:": "×××××× ×¡×× ×× ××ר:",
+ "Background color:": "צ××¢ רקע:",
+ "Cancel": "×××××",
+ "DOCTYPE:": "DOCTYPE:",
+ "Document properties": "××פ××× × ×ס××",
+ "Document title:": "××תרת ×ס××:",
+ "OK": "××ש×ר",
+ "Primary style-sheet:": "×××××× ×¡×× ×× ×¨×ש×:",
+ "Text color:": "צ××¢ ×קס×:"
+};
Modified: plog/trunk/js/htmlarea/plugins/FullPage/lang/ro.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/FullPage/lang/ro.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/FullPage/lang/ro.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,25 +1,25 @@
-// I18N for the FullPage plugin
-
-// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
-// Author: Mihai Bazon, http://dynarch.com/mishoo
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-FullPage.I18N = {
- "Alternate style-sheet:": "Template CSS alternativ:",
- "Background color:": "Culoare de fundal:",
- "Cancel": "RenunÅ£Ä",
- "DOCTYPE:": "DOCTYPE:",
- "Document properties": "ProprietÄÅ£ile documentului",
- "Document title:": "Titlul documentului:",
- "OK": "AcceptÄ",
- "Primary style-sheet:": "Template CSS principal:",
- "Text color:": "Culoare text:"
-};
+// I18N for the FullPage plugin
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+FullPage.I18N = {
+ "Alternate style-sheet:": "Template CSS alternativ:",
+ "Background color:": "Culoare de fundal:",
+ "Cancel": "RenunÅ£Ä",
+ "DOCTYPE:": "DOCTYPE:",
+ "Document properties": "ProprietÄÅ£ile documentului",
+ "Document title:": "Titlul documentului:",
+ "OK": "AcceptÄ",
+ "Primary style-sheet:": "Template CSS principal:",
+ "Text color:": "Culoare text:"
+};
Modified: plog/trunk/js/htmlarea/plugins/FullPage/popups/docprop.html
===================================================================
--- plog/trunk/js/htmlarea/plugins/FullPage/popups/docprop.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/FullPage/popups/docprop.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,131 +1,143 @@
-<html>
-
-<head>
- <title>Document properties</title>
-
-<script type="text/javascript" src="../../../popups/popup.js"></script>
-
-<script type="text/javascript">
-
-FullPage = window.opener.FullPage; // load the FullPage plugin and lang file ;-)
-window.resizeTo(400, 100);
-
- var accepted = {
- f_doctype : true,
- f_title : true,
- f_body_bgcolor : true,
- f_body_fgcolor : true,
- f_base_style : true,
- f_alt_style : true
- };
-
-var editor = null;
-function Init() {
- __dlg_translate(FullPage.I18N);
- __dlg_init();
- var params = window.dialogArguments;
- for (var i in params) {
- if (i in accepted) {
- var el = document.getElementById(i);
- el.value = params[i];
- }
- }
- editor = params.editor;
- document.getElementById("f_title").focus();
- document.getElementById("f_title").select();
-};
-
-function onOK() {
- var required = {
- };
- for (var i in required) {
- var el = document.getElementById(i);
- if (!el.value) {
- alert(required[i]);
- el.focus();
- return false;
- }
- }
-
- var param = {};
- for (var i in accepted) {
- var el = document.getElementById(i);
- param[i] = el.value;
- }
- __dlg_close(param);
- return false;
-};
-
-function onCancel() {
- __dlg_close(null);
- return false;
-};
-
-</script>
-
-<style type="text/css">
-html, body {
- background: ButtonFace;
- color: ButtonText;
- font: 11px Tahoma,Verdana,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-body { padding: 5px; }
-table {
- font: 11px Tahoma,Verdana,sans-serif;
-}
-select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
-button { width: 70px; }
-table .label { text-align: right; width: 12em; }
-
-.title { background: #ddf; color: #000; font-weight: bold; font-size: 120%; padding: 3px 10px; margin-bottom: 10px;
-border-bottom: 1px solid black; letter-spacing: 2px;
-}
-
-#buttons {
- margin-top: 1em; border-top: 1px solid #999;
- padding: 2px; text-align: right;
-}
-</style>
-
- </head>
-
- <body onload="Init()">
-
- <div class="title"><span>Document properties</span></div>
-
- <table style="width: 100%">
- <tr>
- <td class="label"><span>Document title:</span></td>
- <td><input type="text" id="f_title" style="width: 100%" /></td>
- </tr>
- <tr>
- <td class="label"><span>DOCTYPE:</span></td>
- <td><input type="text" id="f_doctype" style="width: 100%" /></td>
- </tr>
- <tr>
- <td class="label"><span>Primary style-sheet:</span></td>
- <td><input type="text" id="f_base_style" style="width: 100%" /></td>
- </tr>
- <tr>
- <td class="label"><span>Alternate style-sheet:</span></td>
- <td><input type="text" id="f_alt_style" style="width: 100%" /></td>
- </tr>
- <tr>
- <td class="label"><span>Background color:</span></td>
- <td><input type="text" id="f_body_bgcolor" size="7" /></td>
- </tr>
- <tr>
- <td class="label"><span>Text color:</span></td>
- <td><input type="text" id="f_body_fgcolor" size="7" /></td>
- </tr>
- </table>
-
- <div id="buttons">
- <button type="button" name="ok" onclick="return onOK();"><span>OK</span></button>
- <button type="button" name="cancel" onclick="return onCancel();"><span>Cancel</span></button>
- </div>
-
- </body>
-</html>
+<html>
+
+<head>
+ <title>Document properties</title>
+
+<script type="text/javascript" src="../../../popups/popup.js"></script>
+
+<script type="text/javascript">
+
+FullPage = window.opener.FullPage; // load the FullPage plugin and lang file ;-)
+window.resizeTo(400, 100);
+
+ var accepted = {
+ f_doctype : true,
+ f_title : true,
+ f_body_bgcolor : true,
+ f_body_fgcolor : true,
+ f_base_style : true,
+ f_alt_style : true,
+ f_charset : true
+ };
+
+var editor = null;
+function Init() {
+ __dlg_translate(FullPage.I18N);
+ __dlg_init();
+ var params = window.dialogArguments;
+ for (var i in params) {
+ if (i in accepted) {
+ var el = document.getElementById(i);
+ el.value = params[i];
+ }
+ }
+ editor = params.editor;
+ document.getElementById("f_title").focus();
+ document.getElementById("f_title").select();
+};
+
+function onOK() {
+ var required = {
+ };
+ for (var i in required) {
+ var el = document.getElementById(i);
+ if (!el.value) {
+ alert(required[i]);
+ el.focus();
+ return false;
+ }
+ }
+
+ var param = {};
+ for (var i in accepted) {
+ var el = document.getElementById(i);
+ param[i] = el.value;
+ }
+ __dlg_close(param);
+ return false;
+};
+
+function onCancel() {
+ __dlg_close(null);
+ return false;
+};
+
+</script>
+
+<style type="text/css">
+html, body {
+ background: ButtonFace;
+ color: ButtonText;
+ font: 11px Tahoma,Verdana,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+body { padding: 5px; }
+table {
+ font: 11px Tahoma,Verdana,sans-serif;
+}
+select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
+button { width: 70px; }
+table .label { text-align: right; width: 12em; }
+
+.title { background: #ddf; color: #000; font-weight: bold; font-size: 120%; padding: 3px 10px; margin-bottom: 10px;
+border-bottom: 1px solid black; letter-spacing: 2px;
+}
+
+#buttons {
+ margin-top: 1em; border-top: 1px solid #999;
+ padding: 2px; text-align: right;
+}
+</style>
+
+ </head>
+
+ <body onload="Init()">
+
+ <div class="title"><span>Document properties</span></div>
+
+ <table style="width: 100%">
+ <tr>
+ <td class="label"><span>Document title:</span></td>
+ <td><input type="text" id="f_title" style="width: 100%" /></td>
+ </tr>
+ <tr>
+ <td class="label"><span>DOCTYPE:</span></td>
+ <td><input type="text" id="f_doctype" style="width: 100%" /></td>
+ </tr>
+ <tr>
+ <td class="label"><span>Primary style-sheet:</span></td>
+ <td><input type="text" id="f_base_style" style="width: 100%" /></td>
+ </tr>
+ <tr>
+ <td class="label"><span>Alternate style-sheet:</span></td>
+ <td><input type="text" id="f_alt_style" style="width: 100%" /></td>
+ </tr>
+ <tr>
+ <td class="label"><span>Background color:</span></td>
+ <td><input type="text" id="f_body_bgcolor" size="7" /></td>
+ </tr>
+ <tr>
+ <td class="label"><span>Text color:</span></td>
+ <td><input type="text" id="f_body_fgcolor" size="7" /></td>
+ </tr>
+ <tr>
+ <td class="label"><span>Character set:</span></td>
+ <td><select id="f_charset">
+ <option value=""></option>
+ <option value="utf-8">UTF-8 (recommended)</option>
+ <option value="windows-1251">cyrillic (WINDOWS-1251)</option>
+ <option value="koi8-r">cyrillic (KOI8-R)</option>
+ <option value="iso-8859-5">cyrillic (ISO-8859-5)</option>
+ <option value="iso-8859-1">western (ISO-8859-1)</option>
+ </select></td>
+ </tr>
+ </table>
+
+ <div id="buttons">
+ <button type="button" name="ok" onclick="return onOK();"><span>OK</span></button>
+ <button type="button" name="cancel" onclick="return onCancel();"><span>Cancel</span></button>
+ </div>
+
+ </body>
+</html>
Modified: plog/trunk/js/htmlarea/plugins/FullPage/test.html
===================================================================
--- plog/trunk/js/htmlarea/plugins/FullPage/test.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/FullPage/test.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,89 +1,89 @@
-<html>
- <head>
- <title>Test of FullPage plugin</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <script type="text/javascript">
- _editor_url = "../../";
- </script>
-
- <!-- load the main HTMLArea files -->
- <script type="text/javascript" src="../../htmlarea.js"></script>
- <script type="text/javascript" src="../../lang/en.js"></script>
- <script type="text/javascript" src="../../dialog.js"></script>
-
- <!-- <script type="text/javascript" src="popupdiv.js"></script> -->
- <script type="text/javascript" src="../../popupwin.js"></script>
-
- <script type="text/javascript">
- HTMLArea.loadPlugin("TableOperations");
- HTMLArea.loadPlugin("SpellChecker");
- HTMLArea.loadPlugin("FullPage");
-
- function initDocument() {
- var editor = new HTMLArea("editor");
- editor.registerPlugin(TableOperations);
- editor.registerPlugin(SpellChecker);
- editor.registerPlugin(FullPage);
- editor.generate();
- }
- </script>
-
- <style type="text/css">
- @import url(../../htmlarea.css);
- </style>
-
- </head>
-
- <body onload="initDocument()">
- <h1>Test of FullPage plugin</h1>
-
- <textarea id="editor" style="height: 30em; width: 100%;">
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
- <html>
- <head>
- <title>FullPage plugin for HTMLArea</title>
- <link rel="alternate stylesheet" href="http://dynarch.com/mishoo/css/dark.css" />
- <link rel="stylesheet" href="http://dynarch.com/mishoo/css/cool-light.css" />
- </head>
- <body style="background-color: #ddddee; color: #000077;">
- <table style="width:60%; height: 90%; margin: 2% auto 1% auto;" align="center" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td style="background-color: #ddeedd; border: 2px solid #002; height: 1.5em; padding: 2px; font: bold 24px Verdana;">
- FullPage plugin
- </td>
- </tr>
- <tr>
- <td style="background-color: #fff; border: 1px solid #aab; padding: 1em 3em; font: 12px Verdana;">
- <p>
- This plugin enables one to edit a full HTML file in <a
- href="http://dynarch.com/htmlarea/">HTMLArea</a>. This is not
- normally possible with just the core editor since it only
- retrieves the HTML inside the <code>body</code> tag.
- </p>
- <p>
- It provides the ability to change the <code>DOCTYPE</code> of
- the document, <code>body</code> <code>bgcolor</code> and
- <code>fgcolor</code> attributes as well as to add additional
- <code>link</code>-ed stylesheets. Cool, eh?
- </p>
- <p>
- The development of this plugin was initiated and sponsored by
- <a href="http://thycotic.com">Thycotic Software Ltd.</a>.
- That's also cool, isn't it? ;-)
- </p>
- </td>
- </tr>
- </table>
- </body>
- </html>
- </textarea>
-
- <hr />
- <address><a href="http://dynarch.com/mishoo/">Mihai Bazon</a></address>
-<!-- Created: Wed Oct 1 19:55:37 EEST 2003 -->
-<!-- hhmts start -->
-Last modified on Sat Oct 25 01:06:59 2003
-<!-- hhmts end -->
-<!-- doc-lang: English -->
- </body>
-</html>
+<html>
+ <head>
+ <title>Test of FullPage plugin</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <script type="text/javascript">
+ _editor_url = "../../";
+ </script>
+
+ <!-- load the main HTMLArea files -->
+ <script type="text/javascript" src="../../htmlarea.js"></script>
+ <script type="text/javascript" src="../../lang/en.js"></script>
+ <script type="text/javascript" src="../../dialog.js"></script>
+
+ <!-- <script type="text/javascript" src="popupdiv.js"></script> -->
+ <script type="text/javascript" src="../../popupwin.js"></script>
+
+ <script type="text/javascript">
+ HTMLArea.loadPlugin("TableOperations");
+ HTMLArea.loadPlugin("SpellChecker");
+ HTMLArea.loadPlugin("FullPage");
+
+ function initDocument() {
+ var editor = new HTMLArea("editor");
+ editor.registerPlugin(TableOperations);
+ editor.registerPlugin(SpellChecker);
+ editor.registerPlugin(FullPage);
+ editor.generate();
+ }
+ </script>
+
+ <style type="text/css">
+ @import url(../../htmlarea.css);
+ </style>
+
+ </head>
+
+ <body onload="initDocument()">
+ <h1>Test of FullPage plugin</h1>
+
+ <textarea id="editor" style="height: 30em; width: 100%;">
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+ <html>
+ <head>
+ <title>FullPage plugin for HTMLArea</title>
+ <link rel="alternate stylesheet" href="http://dynarch.com/mishoo/css/dark.css" />
+ <link rel="stylesheet" href="http://dynarch.com/mishoo/css/cool-light.css" />
+ </head>
+ <body style="background-color: #ddddee; color: #000077;">
+ <table style="width:60%; height: 90%; margin: 2% auto 1% auto;" align="center" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td style="background-color: #ddeedd; border: 2px solid #002; height: 1.5em; padding: 2px; font: bold 24px Verdana;">
+ FullPage plugin
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: #fff; border: 1px solid #aab; padding: 1em 3em; font: 12px Verdana;">
+ <p>
+ This plugin enables one to edit a full HTML file in <a
+ href="http://dynarch.com/htmlarea/">HTMLArea</a>. This is not
+ normally possible with just the core editor since it only
+ retrieves the HTML inside the <code>body</code> tag.
+ </p>
+ <p>
+ It provides the ability to change the <code>DOCTYPE</code> of
+ the document, <code>body</code> <code>bgcolor</code> and
+ <code>fgcolor</code> attributes as well as to add additional
+ <code>link</code>-ed stylesheets. Cool, eh?
+ </p>
+ <p>
+ The development of this plugin was initiated and sponsored by
+ <a href="http://thycotic.com">Thycotic Software Ltd.</a>.
+ That's also cool, isn't it? ;-)
+ </p>
+ </td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </textarea>
+
+ <hr />
+ <address><a href="http://dynarch.com/mishoo/">Mihai Bazon</a></address>
+<!-- Created: Wed Oct 1 19:55:37 EEST 2003 -->
+<!-- hhmts start -->
+Last modified on Sat Oct 25 01:06:59 2003
+<!-- hhmts end -->
+<!-- doc-lang: English -->
+ </body>
+</html>
Added: plog/trunk/js/htmlarea/plugins/HtmlTidy/README
===================================================================
--- plog/trunk/js/htmlarea/plugins/HtmlTidy/README 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/HtmlTidy/README 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,104 @@
+// Plugin for htmlArea to run code through the server's HTML Tidy
+// By Adam Wright, for The University of Western Australia
+//
+// Email: zeno at ucc.gu.uwa.edu.au
+// Homepage: http://blog.hipikat.org/
+//
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+//
+// Version: 0.5
+// Released to the outside world: 04/03/04
+
+
+HtmlTidy is a plugin for the popular cross-browser TTY WYSIWYG editor,
+htmlArea (http://www.htmlarea.com/). HtmlTidy
+basically queries HTML Tidy (http://tidy.sourceforge.net/) on the
+server side, getting it to make-html-nice, instead of relying on masses
+of javascript, which the client would have to download.
+
+Hi, this is a quick explanation of how to install HtmlTidy. Much better
+documentation is probably required, and you're welcome to write it :)
+
+
+* The HtmlTidy directory you should have found this file in should
+ include the following:
+
+ - README
+ This file, providing help installing the plugin.
+
+ - html-tidy-config.cfg
+ This file contains the configuration options HTML Tidy uses to
+ clean html, and can be modified to suit your organizations
+ requirements.
+
+ - html-tidy-logic.php
+ This is the php script, which is queried with dirty html and is
+ responsible for invoking HTML Tidy, getting nice new html and
+ returning it to the client.
+
+ - html-tidy.js
+ The main htmlArea plugin, providing functionality to tidy html
+ through the htmlArea interface.
+
+ - htmlarea.js.onmode_event.diff
+ At the time of publishing, an extra event handler was required
+ inside the main htmlarea.js file. htmlarea.js may be patched
+ against this file to make the changes reuquired, but be aware
+ that the event handler may either now be in the core or
+ htmlarea.js may have changed enough to invalidate the patch.
+
+ UPDATE: now it exists in the official htmlarea.js; applying
+ this patch is thus no longer necessary.
+
+ - img/html-tidy.gif
+ The HtmlTidy icon, for the htmlArea toolbar. Created by Dan
+ Petty for The University of Western Australia.
+
+ - lang/en.js
+ English language file. Add your own language files here and
+ please contribute back into the htmlArea community!
+
+ The HtmlArea directory should be extracted to your htmlarea/plugins/
+ directory.
+
+
+* Make sure the onMode event handler mentioned above, regarding
+ htmlarea.js.onmode_event.diff, exists in your htmlarea.js
+
+
+* html-tidy-logic.php should be executable, and your web server should
+ be configured to execute php scripts in the directory
+ html-tidy-logic.php exists in.
+
+
+* HTML Tidy needs to be installed on your server, and 'tidy' should be
+ an alias to it, lying in the PATH known to the user executing such
+ web scripts.
+
+
+* In your htmlArea configuration, do something like this:
+
+ HTMLArea.loadPlugin("HtmlTidy");
+
+ editor = new HTMLArea("doc");
+ editor.registerPlugin("HtmlTidy");
+
+
+* Then, in your htmlArea toolbar configuration, use:
+
+ - "HT-html-tidy"
+ This will create the 'tidy broom' icon on the toolbar, which
+ will attempt to tidy html source when clicked, and;
+
+ - "HT-auto-tidy"
+ This will create an "Auto Tidy" / "Don't Tidy" dropdown, to
+ select whether the source should be tidied automatically when
+ entering source view. On by default, if you'd like it otherwise
+ you can do so programatically after generating the toolbar :)
+ (Or just hack it to be otherwise...)
+
+
+Thank you.
+
+Any bugs you find can be emailed to zeno at ucc.gu.uwa.edu.au
Added: plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy-config.cfg
===================================================================
--- plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy-config.cfg 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy-config.cfg 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,29 @@
+// Default configuration file for the htmlArea, HtmlTidy plugin
+// By Adam Wright, for The University of Western Australia
+//
+// Evertything you always wanted to know about HTML Tidy *
+// can be found at http://tidy.sourceforge.net/, and a
+// quick reference to the configuration options exists at
+// http://tidy.sourceforge.net/docs/quickref.html
+//
+// * But were afraid to ask
+//
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+
+word-2000: yes
+clean: no
+drop-font-tags: yes
+doctype: auto
+drop-empty-paras: yes
+drop-proprietary-attributes: yes
+enclose-block-text: yes
+enclose-text: yes
+escape-cdata: yes
+logical-emphasis: yes
+indent: auto
+indent-spaces: 2
+break-before-br: yes
+output-xhtml: yes
+
+force-output: yes
Added: plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy-logic.php
===================================================================
--- plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy-logic.php 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy-logic.php 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,83 @@
+<? ###################################################################
+ ##
+ ## Plugin for htmlArea, to run code through the server's HTML Tidy
+ ## By Adam Wright, for The University of Western Australia
+## This is the server-side script, which dirty code is run through.
+##
+## Distributed under the same terms as HTMLArea itself.
+## This notice MUST stay intact for use (see license.txt).
+##
+
+ // Get the original source
+ $source = $_POST['htisource_name'];
+ $source = stripslashes($source);
+
+ // Open a tidy process - I hope it's installed!
+ $descriptorspec = array(
+ 0 => array("pipe", "r"),
+ 1 => array("pipe", "w"),
+ 2 => array("file", "/dev/null", "a")
+ );
+ $process = proc_open("tidy -config html-tidy-config.cfg", $descriptorspec, $pipes);
+
+ // Make sure the program started and we got the hooks...
+ // Either way, get some source code into $source
+ if (is_resource($process)) {
+
+ // Feed untidy source into the stdin
+ fwrite($pipes[0], $source);
+ fclose($pipes[0]);
+
+ // Read clean source out to the browser
+ while (!feof($pipes[1])) {
+ //echo fgets($pipes[1], 1024);
+ $newsrc .= fgets($pipes[1], 1024);
+ }
+ fclose($pipes[1]);
+
+ // Clean up after ourselves
+ proc_close($process);
+
+ } else {
+ // Better give them back what they came with, so they don't lose it all...
+ $newsrc = "<body>\n" .$source. "\n</body>";
+ }
+
+ // Split our source into an array by lines
+ $srcLines = explode("\n",$newsrc);
+
+ // Get only the lines between the body tags
+ $startLn = 0;
+ while ( strpos( $srcLines[$startLn++], '<body' ) === false && $startLn < sizeof($srcLines) );
+ $endLn = $startLn;
+ while ( strpos( $srcLines[$endLn++], '</body' ) === false && $endLn < sizeof($srcLines) );
+
+ $srcLines = array_slice( $srcLines, $startLn, ($endLn - $startLn - 1) );
+
+ // Create a set of javascript code to compile a new source string
+ foreach ($srcLines as $line) {
+ $jsMakeSrc .= "\tns += '" . str_replace("'","\'",$line) . "\\n';\n";
+ }
+?>
+
+
+<html>
+ <head>
+ <script type="text/javascript">
+
+function setNewHtml() {
+ var htRef = window.parent._editorRef.plugins['HtmlTidy'];
+ htRef.instance.processTidied(tidyString());
+}
+function tidyString() {
+ var ns = '\n';
+ <?=$jsMakeSrc;?>
+ return ns;
+}
+
+ </script>
+ </head>
+
+ <body id="htiNewBody" onload="setNewHtml()">
+ </body>
+</html>
Added: plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/HtmlTidy/html-tidy.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,128 @@
+// Plugin for htmlArea to run code through the server's HTML Tidy
+// By Adam Wright, for The University of Western Australia
+//
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+
+function HtmlTidy(editor) {
+ this.editor = editor;
+
+ var cfg = editor.config;
+ var tt = HtmlTidy.I18N;
+ var bl = HtmlTidy.btnList;
+ var self = this;
+
+ this.onMode = this.__onMode;
+
+ // register the toolbar buttons provided by this plugin
+ var toolbar = [];
+ for (var i = 0; i < bl.length; ++i) {
+ var btn = bl[i];
+ if (btn == "html-tidy") {
+ var id = "HT-html-tidy";
+ cfg.registerButton(id, tt[id], editor.imgURL(btn[0] + ".gif", "HtmlTidy"), true,
+ function(editor, id) {
+ // dispatch button press event
+ self.buttonPress(editor, id);
+ }, btn[1]);
+ toolbar.push(id);
+ } else if (btn == "html-auto-tidy") {
+ var ht_class = {
+ id : "HT-auto-tidy",
+ options : { "Auto-Tidy" : "auto", "Don't Tidy" : "noauto" },
+ action : function (editor) { self.__onSelect(editor, this); },
+ refresh : function (editor) { },
+ context : "body"
+ };
+ cfg.registerDropdown(ht_class);
+ }
+ }
+
+ for (var i in toolbar) {
+ cfg.toolbar[0].push(toolbar[i]);
+ }
+};
+
+HtmlTidy._pluginInfo = {
+ name : "HtmlTidy",
+ version : "1.0",
+ developer : "Adam Wright",
+ developer_url : "http://blog.hipikat.org/",
+ sponsor : "The University of Western Australia",
+ sponsor_url : "http://www.uwa.edu.au/",
+ license : "htmlArea"
+};
+
+HtmlTidy.prototype.__onSelect = function(editor, obj) {
+ // Get the toolbar element object
+ var elem = editor._toolbarObjects[obj.id].element;
+
+ // Set our onMode event appropriately
+ if (elem.value == "auto")
+ this.onMode = this.__onMode;
+ else
+ this.onMode = null;
+};
+
+HtmlTidy.prototype.__onMode = function(mode) {
+ if ( mode == "textmode" ) {
+ this.buttonPress(this.editor, "HT-html-tidy");
+ }
+};
+
+HtmlTidy.btnList = [
+ null, // separator
+ ["html-tidy"],
+ ["html-auto-tidy"]
+];
+
+HtmlTidy.prototype.onGenerateOnce = function() {
+ var editor = this.editor;
+
+ var ifr = document.createElement("iframe");
+ ifr.name = "htiframe_name";
+ var s = ifr.style;
+ s.position = "absolute";
+ s.width = s.height = s.border = s.left = s.top = s.padding = s.margin = "0px";
+ document.body.appendChild(ifr);
+
+ var frm = '<form id="htiform_id" name="htiform_name" method="post" target="htiframe_name" action="';
+ frm += _editor_url + 'plugins/HtmlTidy/html-tidy-logic.php';
+ frm += '"><textarea name="htisource_name" id="htisource_id">';
+ frm += '</textarea></form>';
+
+ var newdiv = document.createElement('div');
+ newdiv.style.display = "none";
+ newdiv.innerHTML = frm;
+ document.body.appendChild(newdiv);
+};
+
+HtmlTidy.prototype.buttonPress = function(editor, id) {
+ var i18n = HtmlTidy.I18N;
+
+ switch (id) {
+ case "HT-html-tidy":
+
+ var oldhtml = editor.getHTML();
+
+ // Ask the server for some nice new html, based on the old...
+ var myform = document.getElementById('htiform_id');
+ var txtarea = document.getElementById('htisource_id');
+ txtarea.value = editor.getHTML();
+
+ // Apply the 'meanwhile' text, e.g. "Tidying HTML, please wait..."
+ editor.setHTML(i18n['tidying']);
+
+ // The returning tidying processing script needs to find the editor
+ window._editorRef = editor;
+
+ // ...And send our old source off for processing!
+ myform.submit();
+ break;
+ }
+};
+
+HtmlTidy.prototype.processTidied = function(newSrc) {
+ editor = this.editor;
+ editor.setHTML(newSrc);
+};
Added: plog/trunk/js/htmlarea/plugins/HtmlTidy/img/html-tidy.gif
===================================================================
(Binary files differ)
Property changes on: plog/trunk/js/htmlarea/plugins/HtmlTidy/img/html-tidy.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: plog/trunk/js/htmlarea/plugins/HtmlTidy/lang/en.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/HtmlTidy/lang/en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/HtmlTidy/lang/en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,18 @@
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Adam Wright, http://blog.hipikat.org/
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+HtmlTidy.I18N = {
+ "tidying" : "\n Tidying up the HTML source, please wait...",
+ "HT-html-tidy" : "HTML Tidy"
+};
Added: plog/trunk/js/htmlarea/plugins/ListType/lang/de.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/ListType/lang/de.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/ListType/lang/de.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,23 @@
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Holger Hees, http://www.systemconcept.de
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+ListType.I18N = {
+ "Decimal" : "1-Zahlen",
+ "Lower roman" : "i-Roemisch",
+ "Upper roman" : "I-Roemisch",
+ "Lower latin" : "a-Zeichen",
+ "Upper latin" : "A-Zeichen",
+ "Lower greek" : "Griechisch",
+ "ListStyleTooltip" : "Wählen Sie einen Typ für die Nummerierung aus"
+};
Added: plog/trunk/js/htmlarea/plugins/ListType/lang/en.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/ListType/lang/en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/ListType/lang/en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,23 @@
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+ListType.I18N = {
+ "Decimal" : "Decimal numbers",
+ "Lower roman" : "Lower roman numbers",
+ "Upper roman" : "Upper roman numbers",
+ "Lower latin" : "Lower latin letters",
+ "Upper latin" : "Upper latin letters",
+ "Lower greek" : "Lower greek letters",
+ "ListStyleTooltip" : "Choose list style type (for ordered lists)"
+};
Added: plog/trunk/js/htmlarea/plugins/ListType/list-type.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/ListType/list-type.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/ListType/list-type.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,89 @@
+// ListType Plugin for HTMLArea-3.0
+// Sponsored by MEdTech Unit - Queen's University
+// Implementation by Mihai Bazon, http://dynarch.com/mishoo/
+//
+// (c) dynarch.com 2003-2005.
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+//
+// $Id: list-type.js,v 1.2 2005/01/20 17:49:03 mishoo Exp $
+
+function ListType(editor) {
+ this.editor = editor;
+ var cfg = editor.config;
+ var toolbar = cfg.toolbar;
+ var self = this;
+ var i18n = ListType.I18N;
+ var options = {};
+ options[i18n["Decimal"]] = "decimal";
+ options[i18n["Lower roman"]] = "lower-roman";
+ options[i18n["Upper roman"]] = "upper-roman";
+ options[i18n["Lower latin"]] = "lower-alpha";
+ options[i18n["Upper latin"]] = "upper-alpha";
+ if (!HTMLArea.is_ie)
+ // IE doesn't support this property; even worse, it complains
+ // with a gross error message when we tried to select it,
+ // therefore let's hide it from the damn "browser".
+ options[i18n["Lower greek"]] = "lower-greek";
+ var obj = {
+ id : "ListType",
+ tooltip : i18n["ListStyleTooltip"],
+ options : options,
+ action : function(editor) { self.onSelect(editor, this); },
+ refresh : function(editor) { self.updateValue(editor, this); },
+ context : "ol"
+ };
+ cfg.registerDropdown(obj);
+ var a, i, j, found = false;
+ for (i = 0; !found && i < toolbar.length; ++i) {
+ a = toolbar[i];
+ for (j = 0; j < a.length; ++j) {
+ if (a[j] == "unorderedlist") {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (found)
+ a.splice(j, 0, "space", "ListType", "space");
+};
+
+ListType._pluginInfo = {
+ name : "ListType",
+ version : "1.0",
+ developer : "Mihai Bazon",
+ developer_url : "http://dynarch.com/mishoo/",
+ c_owner : "dynarch.com",
+ sponsor : "MEdTech Unit - Queen's University",
+ sponsor_url : "http://www.queensu.ca/",
+ license : "htmlArea"
+};
+
+ListType.prototype.onSelect = function(editor, combo) {
+ var tbobj = editor._toolbarObjects[combo.id].element;
+ var parent = editor.getParentElement();
+ while (!/^ol$/i.test(parent.tagName)) {
+ parent = parent.parentNode;
+ }
+ parent.style.listStyleType = tbobj.value;
+};
+
+ListType.prototype.updateValue = function(editor, combo) {
+ var tbobj = editor._toolbarObjects[combo.id].element;
+ var parent = editor.getParentElement();
+ while (parent && !/^ol$/i.test(parent.tagName)) {
+ parent = parent.parentNode;
+ }
+ if (!parent) {
+ tbobj.selectedIndex = 0;
+ return;
+ }
+ var type = parent.style.listStyleType;
+ if (!type) {
+ tbobj.selectedIndex = 0;
+ } else {
+ for (var i = tbobj.firstChild; i; i = i.nextSibling) {
+ i.selected = (type.indexOf(i.value) != -1);
+ }
+ }
+};
Added: plog/trunk/js/htmlarea/plugins/SpellChecker/img/he-spell-check.gif
===================================================================
(Binary files differ)
Property changes on: plog/trunk/js/htmlarea/plugins/SpellChecker/img/he-spell-check.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/lang/cz.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/lang/cz.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/lang/cz.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,37 +1,37 @@
-// I18N constants
-
-// LANG: "cz", ENCODING: UTF-8 | ISO-8859-2
-// Author: Jiri Löw, <jirilow at jirilow.com>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-SpellChecker.I18N = {
- "CONFIRM_LINK_CLICK" : "ProsÃm potvrÄte otevÅenà tohoto odkazu",
- "Cancel" : "Zrušit",
- "Dictionary" : "SlovnÃk",
- "Finished list of mispelled words" : "DokonÄen seznam chybných slov",
- "I will open it in a new page." : "Bude otevÅen jej v nové stránce.",
- "Ignore all" : "Ignorovat vše",
- "Ignore" : "Ignorovat",
- "NO_ERRORS" : "Podle zvoleného slovnÃku nebyla nalezena žádná chybná slova.",
- "NO_ERRORS_CLOSING" : "Kontrola správnosti slov dokonÄena, nebyla nalezena žádná chybná slova. UkonÄovánà ...",
- "OK" : "OK",
- "Original word" : "Původnà slovo",
- "Please wait. Calling spell checker." : "ProsÃm Äekejte. Komunikuace s kontrolou správnosti slov.",
- "Please wait: changing dictionary to" : "ProsÃm Äekejte: zmÄna adresáÅe na",
- "QUIT_CONFIRMATION" : "ZmÄny budou zruÅ¡eny a kontrola správnosti slov ukonÄena. ProsÃm potvrÄte.",
- "Re-check" : "PÅekontrolovat",
- "Replace all" : "ZamÄnit vÅ¡echno",
- "Replace with" : "ZamÄnit za",
- "Replace" : "ZamÄnit",
- "SC-spell-check" : "Kontrola správnosti slov",
- "Suggestions" : "DoporuÄenÃ",
- "pliz weit ;-)" : "strpenà prosÃm ;-)"
-};
+// I18N constants
+
+// LANG: "cz", ENCODING: UTF-8 | ISO-8859-2
+// Author: Jiri Löw, <jirilow at jirilow.com>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+SpellChecker.I18N = {
+ "CONFIRM_LINK_CLICK" : "ProsÃm potvrÄte otevÅenà tohoto odkazu",
+ "Cancel" : "Zrušit",
+ "Dictionary" : "SlovnÃk",
+ "Finished list of mispelled words" : "DokonÄen seznam chybných slov",
+ "I will open it in a new page." : "Bude otevÅen jej v nové stránce.",
+ "Ignore all" : "Ignorovat vše",
+ "Ignore" : "Ignorovat",
+ "NO_ERRORS" : "Podle zvoleného slovnÃku nebyla nalezena žádná chybná slova.",
+ "NO_ERRORS_CLOSING" : "Kontrola správnosti slov dokonÄena, nebyla nalezena žádná chybná slova. UkonÄovánà ...",
+ "OK" : "OK",
+ "Original word" : "Původnà slovo",
+ "Please wait. Calling spell checker." : "ProsÃm Äekejte. Komunikuace s kontrolou správnosti slov.",
+ "Please wait: changing dictionary to" : "ProsÃm Äekejte: zmÄna adresáÅe na",
+ "QUIT_CONFIRMATION" : "ZmÄny budou zruÅ¡eny a kontrola správnosti slov ukonÄena. ProsÃm potvrÄte.",
+ "Re-check" : "PÅekontrolovat",
+ "Replace all" : "ZamÄnit vÅ¡echno",
+ "Replace with" : "ZamÄnit za",
+ "Replace" : "ZamÄnit",
+ "SC-spell-check" : "Kontrola správnosti slov",
+ "Suggestions" : "DoporuÄenÃ",
+ "pliz weit ;-)" : "strpenà prosÃm ;-)"
+};
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/lang/da.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/lang/da.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/lang/da.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,37 +1,37 @@
-// I18N constants
-
-// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
-// Author: Steen Sønderup, <steen at soenderup.com>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-SpellChecker.I18N = {
- "CONFIRM_LINK_CLICK" : "Vil du følge dette link?",
- "Cancel" : "Anuler",
- "Dictionary" : "Ordbog",
- "Finished list of mispelled words" : "Listen med stavefejl er gennemgået",
- "I will open it in a new page." : "Jeg vil åbne det i en ny side.",
- "Ignore all" : "Ignorer alle",
- "Ignore" : "Ignorer",
- "NO_ERRORS" : "Der blev ikke fundet nogle stavefejl med den valgte ordbog.",
- "NO_ERRORS_CLOSING" : "Stavekontrollen er gennemført, der blev ikke fundet nogle stavefejl. Lukker...",
- "OK" : "OK",
- "Original word" : "Oprindeligt ord",
- "Please wait. Calling spell checker." : "Vent venligst. Henter stavekontrol.",
- "Please wait: changing dictionary to" : "Vent venligst: skifter ordbog til",
- "QUIT_CONFIRMATION" : "Alle dine ændringer vil gå tabt, vil du fortsætte?",
- "Re-check" : "Tjek igen",
- "Replace all" : "Erstat alle",
- "Replace with" : "Erstat med",
- "Replace" : "Erstat",
- "SC-spell-check" : "Stavekontrol",
- "Suggestions" : "Forslag",
- "pliz weit ;-)" : "Vent venligst"
-};
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Steen Sønderup, <steen at soenderup.com>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+SpellChecker.I18N = {
+ "CONFIRM_LINK_CLICK" : "Vil du følge dette link?",
+ "Cancel" : "Anuler",
+ "Dictionary" : "Ordbog",
+ "Finished list of mispelled words" : "Listen med stavefejl er gennemgået",
+ "I will open it in a new page." : "Jeg vil åbne det i en ny side.",
+ "Ignore all" : "Ignorer alle",
+ "Ignore" : "Ignorer",
+ "NO_ERRORS" : "Der blev ikke fundet nogle stavefejl med den valgte ordbog.",
+ "NO_ERRORS_CLOSING" : "Stavekontrollen er gennemført, der blev ikke fundet nogle stavefejl. Lukker...",
+ "OK" : "OK",
+ "Original word" : "Oprindeligt ord",
+ "Please wait. Calling spell checker." : "Vent venligst. Henter stavekontrol.",
+ "Please wait: changing dictionary to" : "Vent venligst: skifter ordbog til",
+ "QUIT_CONFIRMATION" : "Alle dine ændringer vil gå tabt, vil du fortsætte?",
+ "Re-check" : "Tjek igen",
+ "Replace all" : "Erstat alle",
+ "Replace with" : "Erstat med",
+ "Replace" : "Erstat",
+ "SC-spell-check" : "Stavekontrol",
+ "Suggestions" : "Forslag",
+ "pliz weit ;-)" : "Vent venligst"
+};
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/lang/de.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/lang/de.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/lang/de.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,28 +1,28 @@
-// I18N constants
-
-// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
-// Author: Broxx, <broxx at broxx.com>
-
-SpellChecker.I18N = {
- "CONFIRM_LINK_CLICK" : "Wollen Sie diesen Link oeffnen",
- "Cancel" : "Abbrechen",
- "Dictionary" : "Woerterbuch",
- "Finished list of mispelled words" : "Liste der nicht bekannten Woerter",
- "I will open it in a new page." : "Wird auf neuer Seite geoeffnet",
- "Ignore all" : "Alle ignorieren",
- "Ignore" : "Ignorieren",
- "NO_ERRORS" : "Keine falschen Woerter mit gewaehlten Woerterbuch gefunden",
- "NO_ERRORS_CLOSING" : "Rechtsschreibpruefung wurde ohne Fehler fertiggestellt. Wird nun geschlossen...",
- "OK" : "OK",
- "Original word" : "Original Wort",
- "Please wait. Calling spell checker." : "Bitte warten. Woerterbuch wird durchsucht.",
- "Please wait: changing dictionary to" : "Bitte warten: Woerterbuch wechseln zu",
- "QUIT_CONFIRMATION" : "Aenderungen werden nicht uebernommen. Bitte bestaettigen.",
- "Re-check" : "Neuueberpruefung",
- "Replace all" : "Alle ersetzen",
- "Replace with" : "Ersetzen mit",
- "Replace" : "Ersetzen",
- "SC-spell-check" : "Ueberpruefung",
- "Suggestions" : "Vorschlag",
- "pliz weit ;-)" : "bittsche wartn ;-)"
-};
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Broxx, <broxx at broxx.com>
+
+SpellChecker.I18N = {
+ "CONFIRM_LINK_CLICK" : "Wollen Sie diesen Link oeffnen",
+ "Cancel" : "Abbrechen",
+ "Dictionary" : "Woerterbuch",
+ "Finished list of mispelled words" : "Liste der nicht bekannten Woerter",
+ "I will open it in a new page." : "Wird auf neuer Seite geoeffnet",
+ "Ignore all" : "Alle ignorieren",
+ "Ignore" : "Ignorieren",
+ "NO_ERRORS" : "Keine falschen Woerter mit gewaehlten Woerterbuch gefunden",
+ "NO_ERRORS_CLOSING" : "Rechtsschreibpruefung wurde ohne Fehler fertiggestellt. Wird nun geschlossen...",
+ "OK" : "OK",
+ "Original word" : "Original Wort",
+ "Please wait. Calling spell checker." : "Bitte warten. Woerterbuch wird durchsucht.",
+ "Please wait: changing dictionary to" : "Bitte warten: Woerterbuch wechseln zu",
+ "QUIT_CONFIRMATION" : "Aenderungen werden nicht uebernommen. Bitte bestaettigen.",
+ "Re-check" : "Neuueberpruefung",
+ "Replace all" : "Alle ersetzen",
+ "Replace with" : "Ersetzen mit",
+ "Replace" : "Ersetzen",
+ "SC-spell-check" : "Ueberpruefung",
+ "Suggestions" : "Vorschlag",
+ "pliz weit ;-)" : "bittsche wartn ;-)"
+};
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/lang/en.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/lang/en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/lang/en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,38 +1,38 @@
-// I18N constants
-
-// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
-// Author: Mihai Bazon, http://dynarch.com/mishoo
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-SpellChecker.I18N = {
- "CONFIRM_LINK_CLICK" : "Please confirm that you want to open this link",
- "Cancel" : "Cancel",
- "Dictionary" : "Dictionary",
- "Finished list of mispelled words" : "Finished list of mispelled words",
- "I will open it in a new page." : "I will open it in a new page.",
- "Ignore all" : "Ignore all",
- "Ignore" : "Ignore",
- "NO_ERRORS" : "No mispelled words found with the selected dictionary.",
- "NO_ERRORS_CLOSING" : "Spell check complete, didn't find any mispelled words. Closing now...",
- "OK" : "OK",
- "Original word" : "Original word",
- "Please wait. Calling spell checker." : "Please wait. Calling spell checker.",
- "Please wait: changing dictionary to" : "Please wait: changing dictionary to",
- "QUIT_CONFIRMATION" : "This will drop changes and quit spell checker. Please confirm.",
- "Re-check" : "Re-check",
- "Replace all" : "Replace all",
- "Replace with" : "Replace with",
- "Replace" : "Replace",
- "Revert" : "Revert",
- "SC-spell-check" : "Spell-check",
- "Suggestions" : "Suggestions",
- "pliz weit ;-)" : "pliz weit ;-)"
-};
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+SpellChecker.I18N = {
+ "CONFIRM_LINK_CLICK" : "Please confirm that you want to open this link",
+ "Cancel" : "Cancel",
+ "Dictionary" : "Dictionary",
+ "Finished list of mispelled words" : "Finished list of mispelled words",
+ "I will open it in a new page." : "I will open it in a new page.",
+ "Ignore all" : "Ignore all",
+ "Ignore" : "Ignore",
+ "NO_ERRORS" : "No mispelled words found with the selected dictionary.",
+ "NO_ERRORS_CLOSING" : "Spell check complete, didn't find any mispelled words. Closing now...",
+ "OK" : "OK",
+ "Original word" : "Original word",
+ "Please wait. Calling spell checker." : "Please wait. Calling spell checker.",
+ "Please wait: changing dictionary to" : "Please wait: changing dictionary to",
+ "QUIT_CONFIRMATION" : "This will drop changes and quit spell checker. Please confirm.",
+ "Re-check" : "Re-check",
+ "Replace all" : "Replace all",
+ "Replace with" : "Replace with",
+ "Replace" : "Replace",
+ "Revert" : "Revert",
+ "SC-spell-check" : "Spell-check",
+ "Suggestions" : "Suggestions",
+ "pliz weit ;-)" : "pliz weit ;-)"
+};
Added: plog/trunk/js/htmlarea/plugins/SpellChecker/lang/he.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/lang/he.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/lang/he.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,38 @@
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+SpellChecker.I18N = {
+ "CONFIRM_LINK_CLICK" : "×× × ×שר ש×רצ×× × ×פת×× ×§×ש×ר ××",
+ "Cancel" : "×××××",
+ "Dictionary" : "×××××",
+ "Finished list of mispelled words" : "×סת×××× ×¨×©××ת ×××××× ×××××ת×ת ××××¤× ×©×××",
+ "I will open it in a new page." : "×× × ××¤×ª× ×ת ×× ××××× ××ש.",
+ "Ignore all" : "×תע×× ××××",
+ "Ignore" : "×תע××",
+ "NO_ERRORS" : "×× × ×צ×× ××××× ××××ת×ת ××××¤× ×©××× ×¢× ×××××× ×× ××ר.",
+ "NO_ERRORS_CLOSING" : "×××קת ××××ת × ×¡×ª××××, ×× × ×צ×× ××××× ××××ת×ת ××××¤× ×©×××. × ×¡×ר ×עת...",
+ "OK" : "××ש×ר",
+ "Original word" : "××××× ×××§×ר×ת",
+ "Please wait. Calling spell checker." : "×× × ××ת×. ×§××¨× ×××××§ ×××ת.",
+ "Please wait: changing dictionary to" : "×× × ××ת×: ×××××£ ××××× ×-",
+ "QUIT_CONFIRMATION" : "×× ×××× ×ת ×ש×× ×××× ×××¦× ×××××§ ××××ת. ×× × ×שר.",
+ "Re-check" : "××××§ ×××ש",
+ "Replace all" : "××××£ ×××",
+ "Replace with" : "××××£ ×-",
+ "Replace" : "××××£",
+ "Revert" : "×××ר ש×× ××××",
+ "SC-spell-check" : "×××קת ×××ת",
+ "Suggestions" : "×צע×ת",
+ "pliz weit ;-)" : "×¢× × ×××× ;-)"
+};
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/lang/hu.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/lang/hu.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/lang/hu.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,37 +1,37 @@
-// I18N constants
-
-// LANG: "hu", ENCODING: UTF-8
-// Author: Miklós Somogyi, <somogyine at vnet.hu>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-SpellChecker.I18N = {
- "CONFIRM_LINK_CLICK" : "MegerÅsÃtés",
- "Cancel" : "Mégsem",
- "Dictionary" : "Szótár",
- "Finished list of mispelled words" : "A tévesztett szavak listájának vége",
- "I will open it in a new page." : "Megnyitás új lapon",
- "Ignore all" : "Minden elvetése",
- "Ignore" : "Elvetés",
- "NO_ERRORS" : "A választott szótár szerint nincs tévesztett szó.",
- "NO_ERRORS_CLOSING" : "A helyesÃrásellenÅrzés kész, tévesztett szó nem fordult elÅ. Bezárás...",
- "OK" : "Rendben",
- "Original word" : "Eredeti szó",
- "Please wait. Calling spell checker." : "Kis türelmet, a helyesÃrásellenÅrzÅ hÃvása folyamatban.",
- "Please wait: changing dictionary to" : "Kis türelmet, szótár cseréje",
- "QUIT_CONFIRMATION" : "Kilépés a változások eldobásával. Jóváhagyja?",
- "Re-check" : "ÃjraellenÅrzés",
- "Replace all" : "Mind cseréje",
- "Replace with" : "Csere a következÅre:",
- "Replace" : "Csere",
- "SC-spell-check" : "HelyesÃrásellenÅrzés",
- "Suggestions" : "Tippek",
- "pliz weit ;-)" : "Kis türelmet ;-)"
-};
+// I18N constants
+
+// LANG: "hu", ENCODING: UTF-8
+// Author: Miklós Somogyi, <somogyine at vnet.hu>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+SpellChecker.I18N = {
+ "CONFIRM_LINK_CLICK" : "MegerÅsÃtés",
+ "Cancel" : "Mégsem",
+ "Dictionary" : "Szótár",
+ "Finished list of mispelled words" : "A tévesztett szavak listájának vége",
+ "I will open it in a new page." : "Megnyitás új lapon",
+ "Ignore all" : "Minden elvetése",
+ "Ignore" : "Elvetés",
+ "NO_ERRORS" : "A választott szótár szerint nincs tévesztett szó.",
+ "NO_ERRORS_CLOSING" : "A helyesÃrásellenÅrzés kész, tévesztett szó nem fordult elÅ. Bezárás...",
+ "OK" : "Rendben",
+ "Original word" : "Eredeti szó",
+ "Please wait. Calling spell checker." : "Kis türelmet, a helyesÃrásellenÅrzÅ hÃvása folyamatban.",
+ "Please wait: changing dictionary to" : "Kis türelmet, szótár cseréje",
+ "QUIT_CONFIRMATION" : "Kilépés a változások eldobásával. Jóváhagyja?",
+ "Re-check" : "ÃjraellenÅrzés",
+ "Replace all" : "Mind cseréje",
+ "Replace with" : "Csere a következÅre:",
+ "Replace" : "Csere",
+ "SC-spell-check" : "HelyesÃrásellenÅrzés",
+ "Suggestions" : "Tippek",
+ "pliz weit ;-)" : "Kis türelmet ;-)"
+};
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/lang/it.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/lang/it.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/lang/it.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,28 +1,28 @@
-// I18N constants
-
-// LANG: "it", ENCODING: UTF-8 | ISO-8859-1
-// Author: Fabio Rotondo, <fabio at rotondo.it>
-
-SpellChecker.I18N = {
- "CONFIRM_LINK_CLICK" : "Devi confermare l'apertura di questo link",
- "Cancel" : "Annulla",
- "Dictionary" : "Dizionario",
- "Finished list of mispelled words" : "La lista delle parole scritte male è terminata",
- "I will open it in a new page." : "Lo aprirò in una nuova pagina.",
- "Ignore all" : "Ignora sempre",
- "Ignore" : "Ignora",
- "NO_ERRORS" : "Non sono state trovate parole scritte male con il dizionario selezionato.",
- "NO_ERRORS_CLOSING" : "Controllo completato, non sono state trovate parole scritte male. Sto chiudendo...",
- "OK" : "OK",
- "Original word" : "Parola originale",
- "Please wait. Calling spell checker." : "Attendere. Sto invocando lo Spell Checker.",
- "Please wait: changing dictionary to" : "Attendere. Cambio il dizionario in",
- "QUIT_CONFIRMATION" : "Questo annullerà le modifiche e chiuderà lo Spell Checker. Conferma.",
- "Re-check" : "Ricontrolla",
- "Replace all" : "Sostituisci sempre",
- "Replace with" : "Stostituisci con",
- "Replace" : "Sostituisci",
- "SC-spell-check" : "Spell-check",
- "Suggestions" : "Suggerimenti",
- "pliz weit ;-)" : "Attendere Prego ;-)"
-};
+// I18N constants
+
+// LANG: "it", ENCODING: UTF-8 | ISO-8859-1
+// Author: Fabio Rotondo, <fabio at rotondo.it>
+
+SpellChecker.I18N = {
+ "CONFIRM_LINK_CLICK" : "Devi confermare l'apertura di questo link",
+ "Cancel" : "Annulla",
+ "Dictionary" : "Dizionario",
+ "Finished list of mispelled words" : "La lista delle parole scritte male è terminata",
+ "I will open it in a new page." : "Lo aprirò in una nuova pagina.",
+ "Ignore all" : "Ignora sempre",
+ "Ignore" : "Ignora",
+ "NO_ERRORS" : "Non sono state trovate parole scritte male con il dizionario selezionato.",
+ "NO_ERRORS_CLOSING" : "Controllo completato, non sono state trovate parole scritte male. Sto chiudendo...",
+ "OK" : "OK",
+ "Original word" : "Parola originale",
+ "Please wait. Calling spell checker." : "Attendere. Sto invocando lo Spell Checker.",
+ "Please wait: changing dictionary to" : "Attendere. Cambio il dizionario in",
+ "QUIT_CONFIRMATION" : "Questo annullerà le modifiche e chiuderà lo Spell Checker. Conferma.",
+ "Re-check" : "Ricontrolla",
+ "Replace all" : "Sostituisci sempre",
+ "Replace with" : "Stostituisci con",
+ "Replace" : "Sostituisci",
+ "SC-spell-check" : "Spell-check",
+ "Suggestions" : "Suggerimenti",
+ "pliz weit ;-)" : "Attendere Prego ;-)"
+};
Added: plog/trunk/js/htmlarea/plugins/SpellChecker/lang/nl.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/lang/nl.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/lang/nl.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,39 @@
+// I18N constants
+
+// LANG: "nl", ENCODING: UTF-8 | ISO-8859-1
+// Author: A.H van den Broek http://www.kontaktfm.nl
+// Email : tonbroek at kontaktfm.nl
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+SpellChecker.I18N = {
+ "CONFIRM_LINK_CLICK" : "Weet u zeker dat u deze link wilt openen?",
+ "Cancel" : "Annuleer",
+ "Dictionary" : "Woordenboek",
+ "Finished list of mispelled words" : "klaar met de lijst van fouten woorden",
+ "I will open it in a new page." : "Ik zal het in een nieuwe pagina openen.",
+ "Ignore all" : "alles overslaan",
+ "Ignore" : "Overslaan",
+ "NO_ERRORS" : "Geen fouten gevonden met dit woordenboek.",
+ "NO_ERRORS_CLOSING" : "Spell checking is klaar, geen fouten gevonden. spell checking word gesloten...",
+ "OK" : "OK",
+ "Original word" : "Originele woord",
+ "Please wait. Calling spell checker." : "Even wachten. spell checker wordt geladen.",
+ "Please wait: changing dictionary to" : "even wachten: woordenboek wordt veranderd naar",
+ "QUIT_CONFIRMATION" : "Dit zal alle veranderingen annuleren en de spell checker sluiten. Weet u het zeker?",
+ "Re-check" : "Opnieuw",
+ "Replace all" : "Alles vervangen",
+ "Replace with" : "Vervangen met",
+ "Replace" : "Vervangen",
+ "Revert" : "Omkeren",
+ "SC-spell-check" : "Spell-check",
+ "Suggestions" : "Suggestie",
+ "pliz weit ;-)" : "Even wachten ;-)"
+};
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/lang/ro.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/lang/ro.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/lang/ro.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,37 +1,37 @@
-// I18N constants
-
-// LANG: "ro", ENCODING: UTF-8
-// Author: Mihai Bazon, http://dynarch.com/mishoo
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-SpellChecker.I18N = {
- "CONFIRM_LINK_CLICK" : "VÄ rog confirmaÅ£i cÄ vreÅ£i sÄ deschideÅ£i acest link",
- "Cancel" : "AnuleazÄ",
- "Dictionary" : "Dicţionar",
- "Finished list of mispelled words" : "Am terminat lista de cuvinte greÅite",
- "I will open it in a new page." : "O voi deschide într-o altÄ fereastrÄ.",
- "Ignore all" : "IgnorÄ toate",
- "Ignore" : "IgnorÄ",
- "NO_ERRORS" : "Nu am gÄsit nici un cuvânt greÅit cu acest dicÅ£ionar.",
- "NO_ERRORS_CLOSING" : "Am terminat, nu am detectat nici o greÅealÄ. Acum închid fereastra...",
- "OK" : "OK",
- "Original word" : "Cuvântul original",
- "Please wait. Calling spell checker." : "VÄ rog aÅteptaÅ£i. Apelez spell-checker-ul.",
- "Please wait: changing dictionary to" : "VÄ rog aÅteptaÅ£i. Schimb dicÅ£ionarul cu",
- "QUIT_CONFIRMATION" : "DoriÅ£i sÄ renunÅ£aÅ£i la modificÄri Åi sÄ Ã®nchid spell-checker-ul?",
- "Re-check" : "ScaneazÄ",
- "Replace all" : "ÃnlocuieÅte toate",
- "Replace with" : "ÃnlocuieÅte cu",
- "Replace" : "ÃnlocuieÅte",
- "SC-spell-check" : "DetecteazÄ greÅeli",
- "Suggestions" : "Sugestii",
- "pliz weit ;-)" : "va rog ashteptatzi ;-)"
-};
+// I18N constants
+
+// LANG: "ro", ENCODING: UTF-8
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+SpellChecker.I18N = {
+ "CONFIRM_LINK_CLICK" : "VÄ rog confirmaÅ£i cÄ vreÅ£i sÄ deschideÅ£i acest link",
+ "Cancel" : "AnuleazÄ",
+ "Dictionary" : "Dicţionar",
+ "Finished list of mispelled words" : "Am terminat lista de cuvinte greÅite",
+ "I will open it in a new page." : "O voi deschide într-o altÄ fereastrÄ.",
+ "Ignore all" : "IgnorÄ toate",
+ "Ignore" : "IgnorÄ",
+ "NO_ERRORS" : "Nu am gÄsit nici un cuvânt greÅit cu acest dicÅ£ionar.",
+ "NO_ERRORS_CLOSING" : "Am terminat, nu am detectat nici o greÅealÄ. Acum închid fereastra...",
+ "OK" : "OK",
+ "Original word" : "Cuvântul original",
+ "Please wait. Calling spell checker." : "VÄ rog aÅteptaÅ£i. Apelez spell-checker-ul.",
+ "Please wait: changing dictionary to" : "VÄ rog aÅteptaÅ£i. Schimb dicÅ£ionarul cu",
+ "QUIT_CONFIRMATION" : "DoriÅ£i sÄ renunÅ£aÅ£i la modificÄri Åi sÄ Ã®nchid spell-checker-ul?",
+ "Re-check" : "ScaneazÄ",
+ "Replace all" : "ÃnlocuieÅte toate",
+ "Replace with" : "ÃnlocuieÅte cu",
+ "Replace" : "ÃnlocuieÅte",
+ "SC-spell-check" : "DetecteazÄ greÅeli",
+ "Suggestions" : "Sugestii",
+ "pliz weit ;-)" : "va rog ashteptatzi ;-)"
+};
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/readme-tech.html
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/readme-tech.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/readme-tech.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,114 +1,114 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
-<html>
- <head>
- <title>HTMLArea Spell Checker</title>
- </head>
-
- <body>
- <h1>HTMLArea Spell Checker</h1>
-
- <p>The HTMLArea Spell Checker subsystem consists of the following
- files:</p>
-
- <ul>
-
- <li>spell-checker.js — the spell checker plugin interface for
- HTMLArea</li>
-
- <li>spell-checker-ui.html — the HTML code for the user
- interface</li>
-
- <li>spell-checker-ui.js — functionality of the user
- interface</li>
-
- <li>spell-checker-logic.cgi — Perl CGI script that checks a text
- given through POST for spelling errors</li>
-
- <li>spell-checker-style.css — style for mispelled words</li>
-
- <li>lang/en.js — main language file (English).</li>
-
- </ul>
-
- <h2>Process overview</h2>
-
- <p>
- When an end-user clicks the "spell-check" button in the HTMLArea
- editor, a new window is opened with the URL of "spell-check-ui.html".
- This window initializes itself with the text found in the editor (uses
- <tt>window.opener.SpellChecker.editor</tt> global variable) and it
- submits the text to the server-side script "spell-check-logic.cgi".
- The target of the FORM is an inline frame which is used both to
- display the text and correcting.
- </p>
-
- <p>
- Further, spell-check-logic.cgi calls Aspell for each portion of plain
- text found in the given HTML. It rebuilds an HTML file that contains
- clear marks of which words are incorrect, along with suggestions for
- each of them. This file is then loaded in the inline frame. Upon
- loading, a JavaScript function from "spell-check-ui.js" is called.
- This function will retrieve all mispelled words from the HTML of the
- iframe and will setup the user interface so that it allows correction.
- </p>
-
- <h2>The server-side script (spell-check-logic.cgi)</h2>
-
- <p>
- <strong>Unicode safety</strong> — the program <em>is</em>
- Unicode safe. HTML entities are expanded into their corresponding
- Unicode characters. These characters will be matched as part of the
- word passed to Aspell. All texts passed to Aspell are in Unicode
- (when appropriate). <strike>However, Aspell seems to not support Unicode
- yet (<a
- href="http://mail.gnu.org/archive/html/aspell-user/2000-11/msg00007.html">thread concerning Aspell and Unicode</a>).
- This mean that words containing Unicode
- characters that are not in 0..255 are likely to be reported as "mispelled" by Aspell.</strike>
- </p>
-
- <p>
- <strong style="font-variant: small-caps; color:
- red;">Update:</strong> though I've never seen it mentioned
- anywhere, it looks that Aspell <em>does</em>, in fact, speak
- Unicode. Or else, maybe <code>Text::Aspell</code> does
- transparent conversion; anyway, this new version of our
- SpellChecker plugin is, as tests show so far, fully
- Unicode-safe... well, probably the <em>only</em> freeware
- Web-based spell-checker which happens to have Unicode support.
- </p>
-
- <p>
- The Perl Unicode manual (man perluniintro) states:
- </p>
-
- <blockquote>
- <em>
- Starting from Perl 5.6.0, Perl has had the capacity to handle Unicode
- natively. Perl 5.8.0, however, is the first recommended release for
- serious Unicode work. The maintenance release 5.6.1 fixed many of the
- problems of the initial Unicode implementation, but for example regular
- expressions still do not work with Unicode in 5.6.1.
- </em>
- </blockquote>
-
- <p>In other words, do <em>not</em> assume that this script is
- Unicode-safe on Perl interpreters older than 5.8.0.</p>
-
- <p>The following Perl modules are required:</p>
-
- <ul>
- <li><a href="http://search.cpan.org/search?query=Text%3A%3AAspell&mode=all" target="_blank">Text::Aspell</a></li>
- <li><a href="http://search.cpan.org/search?query=XML%3A%3ADOM&mode=all" target="_blank">XML::DOM</a></li>
- <li><a href="http://search.cpan.org/search?query=CGI&mode=all" target="_blank">CGI</a></li>
- </ul>
-
- <p>Of these, only Text::Aspell might need to be installed manually. The
- others are likely to be available by default in most Perl distributions.</p>
-
- <hr />
- <address><a href="http://dynarch.com/mishoo/">Mihai Bazon</a></address>
-<!-- Created: Thu Jul 17 13:22:27 EEST 2003 -->
-<!-- hhmts start --> Last modified: Fri Jan 30 19:14:11 EET 2004 <!-- hhmts end -->
-<!-- doc-lang: English -->
- </body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
+<html>
+ <head>
+ <title>HTMLArea Spell Checker</title>
+ </head>
+
+ <body>
+ <h1>HTMLArea Spell Checker</h1>
+
+ <p>The HTMLArea Spell Checker subsystem consists of the following
+ files:</p>
+
+ <ul>
+
+ <li>spell-checker.js — the spell checker plugin interface for
+ HTMLArea</li>
+
+ <li>spell-checker-ui.html — the HTML code for the user
+ interface</li>
+
+ <li>spell-checker-ui.js — functionality of the user
+ interface</li>
+
+ <li>spell-checker-logic.cgi — Perl CGI script that checks a text
+ given through POST for spelling errors</li>
+
+ <li>spell-checker-style.css — style for mispelled words</li>
+
+ <li>lang/en.js — main language file (English).</li>
+
+ </ul>
+
+ <h2>Process overview</h2>
+
+ <p>
+ When an end-user clicks the "spell-check" button in the HTMLArea
+ editor, a new window is opened with the URL of "spell-check-ui.html".
+ This window initializes itself with the text found in the editor (uses
+ <tt>window.opener.SpellChecker.editor</tt> global variable) and it
+ submits the text to the server-side script "spell-check-logic.cgi".
+ The target of the FORM is an inline frame which is used both to
+ display the text and correcting.
+ </p>
+
+ <p>
+ Further, spell-check-logic.cgi calls Aspell for each portion of plain
+ text found in the given HTML. It rebuilds an HTML file that contains
+ clear marks of which words are incorrect, along with suggestions for
+ each of them. This file is then loaded in the inline frame. Upon
+ loading, a JavaScript function from "spell-check-ui.js" is called.
+ This function will retrieve all mispelled words from the HTML of the
+ iframe and will setup the user interface so that it allows correction.
+ </p>
+
+ <h2>The server-side script (spell-check-logic.cgi)</h2>
+
+ <p>
+ <strong>Unicode safety</strong> — the program <em>is</em>
+ Unicode safe. HTML entities are expanded into their corresponding
+ Unicode characters. These characters will be matched as part of the
+ word passed to Aspell. All texts passed to Aspell are in Unicode
+ (when appropriate). <strike>However, Aspell seems to not support Unicode
+ yet (<a
+ href="http://mail.gnu.org/archive/html/aspell-user/2000-11/msg00007.html">thread concerning Aspell and Unicode</a>).
+ This mean that words containing Unicode
+ characters that are not in 0..255 are likely to be reported as "mispelled" by Aspell.</strike>
+ </p>
+
+ <p>
+ <strong style="font-variant: small-caps; color:
+ red;">Update:</strong> though I've never seen it mentioned
+ anywhere, it looks that Aspell <em>does</em>, in fact, speak
+ Unicode. Or else, maybe <code>Text::Aspell</code> does
+ transparent conversion; anyway, this new version of our
+ SpellChecker plugin is, as tests show so far, fully
+ Unicode-safe... well, probably the <em>only</em> freeware
+ Web-based spell-checker which happens to have Unicode support.
+ </p>
+
+ <p>
+ The Perl Unicode manual (man perluniintro) states:
+ </p>
+
+ <blockquote>
+ <em>
+ Starting from Perl 5.6.0, Perl has had the capacity to handle Unicode
+ natively. Perl 5.8.0, however, is the first recommended release for
+ serious Unicode work. The maintenance release 5.6.1 fixed many of the
+ problems of the initial Unicode implementation, but for example regular
+ expressions still do not work with Unicode in 5.6.1.
+ </em>
+ </blockquote>
+
+ <p>In other words, do <em>not</em> assume that this script is
+ Unicode-safe on Perl interpreters older than 5.8.0.</p>
+
+ <p>The following Perl modules are required:</p>
+
+ <ul>
+ <li><a href="http://search.cpan.org/search?query=Text%3A%3AAspell&mode=all" target="_blank">Text::Aspell</a></li>
+ <li><a href="http://search.cpan.org/search?query=XML%3A%3ADOM&mode=all" target="_blank">XML::DOM</a></li>
+ <li><a href="http://search.cpan.org/search?query=CGI&mode=all" target="_blank">CGI</a></li>
+ </ul>
+
+ <p>Of these, only Text::Aspell might need to be installed manually. The
+ others are likely to be available by default in most Perl distributions.</p>
+
+ <hr />
+ <address><a href="http://dynarch.com/mishoo/">Mihai Bazon</a></address>
+<!-- Created: Thu Jul 17 13:22:27 EEST 2003 -->
+<!-- hhmts start --> Last modified: Fri Jan 30 19:14:11 EET 2004 <!-- hhmts end -->
+<!-- doc-lang: English -->
+ </body>
+</html>
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-logic.cgi
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-logic.cgi 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-logic.cgi 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,210 +1,210 @@
-#! /usr/bin/perl -w
-
-# Spell Checker Plugin for HTMLArea-3.0
-# Sponsored by www.americanbible.org
-# Implementation by Mihai Bazon, http://dynarch.com/mishoo/
-#
-# (c) dynarch.com 2003.
-# Distributed under the same terms as HTMLArea itself.
-# This notice MUST stay intact for use (see license.txt).
-#
-# $Id: spell-check-logic.cgi,v 1.10 2004/01/31 13:47:05 mishoo Exp $
-
-use strict;
-use utf8;
-use Encode;
-use Text::Aspell;
-use XML::DOM;
-use CGI;
-
-my $TIMER_start = undef;
-eval {
- use Time::HiRes qw( gettimeofday tv_interval );
- $TIMER_start = [gettimeofday()];
-};
-# use POSIX qw( locale_h );
-
-binmode STDIN, ':utf8';
-binmode STDOUT, ':utf8';
-
-my $debug = 0;
-
-my $speller = new Text::Aspell;
-my $cgi = new CGI;
-
-my $total_words = 0;
-my $total_mispelled = 0;
-my $total_suggestions = 0;
-my $total_words_suggested = 0;
-
-# FIXME: report a nice error...
-die "Can't create speller!" unless $speller;
-
-my $dict = $cgi->param('dictionary') || $cgi->cookie('dictionary') || 'en';
-
-# add configurable option for this
-$speller->set_option('lang', $dict);
-$speller->set_option('encoding', 'UTF-8');
-#setlocale(LC_CTYPE, $dict);
-
-# ultra, fast, normal, bad-spellers
-# bad-spellers seems to cause segmentation fault
-$speller->set_option('sug-mode', 'normal');
-
-my %suggested_words = ();
-keys %suggested_words = 128;
-
-my $file_content = decode('UTF-8', $cgi->param('content'));
-$file_content = parse_with_dom($file_content);
-
-my $ck_dictionary = $cgi->cookie(-name => 'dictionary',
- -value => $dict,
- -expires => '+30d');
-
-print $cgi->header(-type => 'text/html; charset: utf-8',
- -cookie => $ck_dictionary);
-
-my $js_suggested_words = make_js_hash(\%suggested_words);
-my $js_spellcheck_info = make_js_hash_from_array
- ([
- [ 'Total words' , $total_words ],
- [ 'Mispelled words' , $total_mispelled . ' in dictionary \"'.$dict.'\"' ],
- [ 'Total suggestions' , $total_suggestions ],
- [ 'Total words suggested' , $total_words_suggested ],
- [ 'Spell-checked in' , defined $TIMER_start ? (tv_interval($TIMER_start) . ' seconds') : 'n/a' ]
- ]);
-
-print qq^<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<link rel="stylesheet" type="text/css" media="all" href="spell-check-style.css" />
-<script type="text/javascript">
- var suggested_words = { $js_suggested_words };
- var spellcheck_info = { $js_spellcheck_info }; </script>
-</head>
-<body onload="window.parent.finishedSpellChecking();">^;
-
-print $file_content;
-if ($cgi->param('init') eq '1') {
- my @dicts = $speller->dictionary_info();
- my $dictionaries = '';
- foreach my $i (@dicts) {
- next if $i->{jargon};
- my $name = $i->{name};
- if ($name eq $dict) {
- $name = '@'.$name;
- }
- $dictionaries .= ',' . $name;
- }
- $dictionaries =~ s/^,//;
- print qq^<div id="HA-spellcheck-dictionaries">$dictionaries</div>^;
-}
-
-print '</body></html>';
-
-# Perl is beautiful.
-sub spellcheck {
- my $node = shift;
- my $doc = $node->getOwnerDocument;
- my $check = sub { # called for each word in the text
- # input is in UTF-8
- my $word = shift;
- my $already_suggested = defined $suggested_words{$word};
- ++$total_words;
- if (!$already_suggested && $speller->check($word)) {
- return undef;
- } else {
- # we should have suggestions; give them back to browser in UTF-8
- ++$total_mispelled;
- if (!$already_suggested) {
- # compute suggestions for this word
- my @suggestions = $speller->suggest($word);
- my $suggestions = decode($speller->get_option('encoding'), join(',', @suggestions));
- $suggested_words{$word} = $suggestions;
- ++$total_suggestions;
- $total_words_suggested += scalar @suggestions;
- }
- # HA-spellcheck-error
- my $err = $doc->createElement('span');
- $err->setAttribute('class', 'HA-spellcheck-error');
- my $tmp = $doc->createTextNode;
- $tmp->setNodeValue($word);
- $err->appendChild($tmp);
- return $err;
- }
- };
- while ($node->getNodeValue =~ /([\p{IsWord}']+)/) {
- my $word = $1;
- my $before = $`;
- my $after = $';
- my $df = &$check($word);
- if (!$df) {
- $before .= $word;
- }
- {
- my $parent = $node->getParentNode;
- my $n1 = $doc->createTextNode;
- $n1->setNodeValue($before);
- $parent->insertBefore($n1, $node);
- $parent->insertBefore($df, $node) if $df;
- $node->setNodeValue($after);
- }
- }
-};
-
-sub check_inner_text {
- my $node = shift;
- my $text = '';
- for (my $i = $node->getFirstChild; defined $i; $i = $i->getNextSibling) {
- if ($i->getNodeType == TEXT_NODE) {
- spellcheck($i);
- }
- }
-};
-
-sub parse_with_dom {
- my ($text) = @_;
- $text = '<spellchecker>'.$text.'</spellchecker>';
-
- my $parser = new XML::DOM::Parser;
- if ($debug) {
- open(FOO, '>:utf8', '/tmp/foo');
- print FOO $text;
- close FOO;
- }
- my $doc = $parser->parse($text);
- my $nodes = $doc->getElementsByTagName('*');
- my $n = $nodes->getLength;
-
- for (my $i = 0; $i < $n; ++$i) {
- my $node = $nodes->item($i);
- if ($node->getNodeType == ELEMENT_NODE) {
- check_inner_text($node);
- }
- }
-
- my $ret = $doc->toString;
- $ret =~ s{<spellchecker>(.*)</spellchecker>}{$1}sg;
- return $ret;
-};
-
-sub make_js_hash {
- my ($hash) = @_;
- my $js_hash = '';
- while (my ($key, $val) = each %$hash) {
- $js_hash .= ',' if $js_hash;
- $js_hash .= '"'.$key.'":"'.$val.'"';
- }
- return $js_hash;
-};
-
-sub make_js_hash_from_array {
- my ($array) = @_;
- my $js_hash = '';
- foreach my $i (@$array) {
- $js_hash .= ',' if $js_hash;
- $js_hash .= '"'.$i->[0].'":"'.$i->[1].'"';
- }
- return $js_hash;
-};
+#! /usr/bin/perl -w
+
+# Spell Checker Plugin for HTMLArea-3.0
+# Sponsored by www.americanbible.org
+# Implementation by Mihai Bazon, http://dynarch.com/mishoo/
+#
+# (c) dynarch.com 2003.
+# Distributed under the same terms as HTMLArea itself.
+# This notice MUST stay intact for use (see license.txt).
+#
+# $Id: spell-check-logic.cgi,v 1.10 2004/01/31 13:47:05 mishoo Exp $
+
+use strict;
+use utf8;
+use Encode;
+use Text::Aspell;
+use XML::DOM;
+use CGI;
+
+my $TIMER_start = undef;
+eval {
+ use Time::HiRes qw( gettimeofday tv_interval );
+ $TIMER_start = [gettimeofday()];
+};
+# use POSIX qw( locale_h );
+
+binmode STDIN, ':utf8';
+binmode STDOUT, ':utf8';
+
+my $debug = 0;
+
+my $speller = new Text::Aspell;
+my $cgi = new CGI;
+
+my $total_words = 0;
+my $total_mispelled = 0;
+my $total_suggestions = 0;
+my $total_words_suggested = 0;
+
+# FIXME: report a nice error...
+die "Can't create speller!" unless $speller;
+
+my $dict = $cgi->param('dictionary') || $cgi->cookie('dictionary') || 'en';
+
+# add configurable option for this
+$speller->set_option('lang', $dict);
+$speller->set_option('encoding', 'UTF-8');
+#setlocale(LC_CTYPE, $dict);
+
+# ultra, fast, normal, bad-spellers
+# bad-spellers seems to cause segmentation fault
+$speller->set_option('sug-mode', 'normal');
+
+my %suggested_words = ();
+keys %suggested_words = 128;
+
+my $file_content = decode('UTF-8', $cgi->param('content'));
+$file_content = parse_with_dom($file_content);
+
+my $ck_dictionary = $cgi->cookie(-name => 'dictionary',
+ -value => $dict,
+ -expires => '+30d');
+
+print $cgi->header(-type => 'text/html; charset: utf-8',
+ -cookie => $ck_dictionary);
+
+my $js_suggested_words = make_js_hash(\%suggested_words);
+my $js_spellcheck_info = make_js_hash_from_array
+ ([
+ [ 'Total words' , $total_words ],
+ [ 'Mispelled words' , $total_mispelled . ' in dictionary \"'.$dict.'\"' ],
+ [ 'Total suggestions' , $total_suggestions ],
+ [ 'Total words suggested' , $total_words_suggested ],
+ [ 'Spell-checked in' , defined $TIMER_start ? (tv_interval($TIMER_start) . ' seconds') : 'n/a' ]
+ ]);
+
+print qq^<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link rel="stylesheet" type="text/css" media="all" href="spell-check-style.css" />
+<script type="text/javascript">
+ var suggested_words = { $js_suggested_words };
+ var spellcheck_info = { $js_spellcheck_info }; </script>
+</head>
+<body onload="window.parent.finishedSpellChecking();">^;
+
+print $file_content;
+if ($cgi->param('init') eq '1') {
+ my @dicts = $speller->dictionary_info();
+ my $dictionaries = '';
+ foreach my $i (@dicts) {
+ next if $i->{jargon};
+ my $name = $i->{name};
+ if ($name eq $dict) {
+ $name = '@'.$name;
+ }
+ $dictionaries .= ',' . $name;
+ }
+ $dictionaries =~ s/^,//;
+ print qq^<div id="HA-spellcheck-dictionaries">$dictionaries</div>^;
+}
+
+print '</body></html>';
+
+# Perl is beautiful.
+sub spellcheck {
+ my $node = shift;
+ my $doc = $node->getOwnerDocument;
+ my $check = sub { # called for each word in the text
+ # input is in UTF-8
+ my $word = shift;
+ my $already_suggested = defined $suggested_words{$word};
+ ++$total_words;
+ if (!$already_suggested && $speller->check($word)) {
+ return undef;
+ } else {
+ # we should have suggestions; give them back to browser in UTF-8
+ ++$total_mispelled;
+ if (!$already_suggested) {
+ # compute suggestions for this word
+ my @suggestions = $speller->suggest($word);
+ my $suggestions = decode($speller->get_option('encoding'), join(',', @suggestions));
+ $suggested_words{$word} = $suggestions;
+ ++$total_suggestions;
+ $total_words_suggested += scalar @suggestions;
+ }
+ # HA-spellcheck-error
+ my $err = $doc->createElement('span');
+ $err->setAttribute('class', 'HA-spellcheck-error');
+ my $tmp = $doc->createTextNode;
+ $tmp->setNodeValue($word);
+ $err->appendChild($tmp);
+ return $err;
+ }
+ };
+ while ($node->getNodeValue =~ /([\p{IsWord}']+)/) {
+ my $word = $1;
+ my $before = $`;
+ my $after = $';
+ my $df = &$check($word);
+ if (!$df) {
+ $before .= $word;
+ }
+ {
+ my $parent = $node->getParentNode;
+ my $n1 = $doc->createTextNode;
+ $n1->setNodeValue($before);
+ $parent->insertBefore($n1, $node);
+ $parent->insertBefore($df, $node) if $df;
+ $node->setNodeValue($after);
+ }
+ }
+};
+
+sub check_inner_text {
+ my $node = shift;
+ my $text = '';
+ for (my $i = $node->getFirstChild; defined $i; $i = $i->getNextSibling) {
+ if ($i->getNodeType == TEXT_NODE) {
+ spellcheck($i);
+ }
+ }
+};
+
+sub parse_with_dom {
+ my ($text) = @_;
+ $text = '<spellchecker>'.$text.'</spellchecker>';
+
+ my $parser = new XML::DOM::Parser;
+ if ($debug) {
+ open(FOO, '>:utf8', '/tmp/foo');
+ print FOO $text;
+ close FOO;
+ }
+ my $doc = $parser->parse($text);
+ my $nodes = $doc->getElementsByTagName('*');
+ my $n = $nodes->getLength;
+
+ for (my $i = 0; $i < $n; ++$i) {
+ my $node = $nodes->item($i);
+ if ($node->getNodeType == ELEMENT_NODE) {
+ check_inner_text($node);
+ }
+ }
+
+ my $ret = $doc->toString;
+ $ret =~ s{<spellchecker>(.*)</spellchecker>}{$1}sg;
+ return $ret;
+};
+
+sub make_js_hash {
+ my ($hash) = @_;
+ my $js_hash = '';
+ while (my ($key, $val) = each %$hash) {
+ $js_hash .= ',' if $js_hash;
+ $js_hash .= '"'.$key.'":"'.$val.'"';
+ }
+ return $js_hash;
+};
+
+sub make_js_hash_from_array {
+ my ($array) = @_;
+ my $js_hash = '';
+ foreach my $i (@$array) {
+ $js_hash .= ',' if $js_hash;
+ $js_hash .= '"'.$i->[0].'":"'.$i->[1].'"';
+ }
+ return $js_hash;
+};
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-style.css
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-style.css 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-style.css 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,10 +1,10 @@
-.HA-spellcheck-error { border-bottom: 1px dashed #f00; cursor: default; }
-.HA-spellcheck-same { background-color: #cef; color: #000; }
-.HA-spellcheck-hover { background-color: #433; color: white; }
-.HA-spellcheck-fixed { border-bottom: 1px dashed #0b8; }
-.HA-spellcheck-current { background-color: #9be; color: #000; }
-.HA-spellcheck-suggestions { display: none; }
-
-#HA-spellcheck-dictionaries { display: none; }
-
-a:link, a:visited { color: #55e; }
+.HA-spellcheck-error { border-bottom: 1px dashed #f00; cursor: default; }
+.HA-spellcheck-same { background-color: #cef; color: #000; }
+.HA-spellcheck-hover { background-color: #433; color: white; }
+.HA-spellcheck-fixed { border-bottom: 1px dashed #0b8; }
+.HA-spellcheck-current { background-color: #9be; color: #000; }
+.HA-spellcheck-suggestions { display: none; }
+
+#HA-spellcheck-dictionaries { display: none; }
+
+a:link, a:visited { color: #55e; }
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-ui.html
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-ui.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-ui.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,122 +1,122 @@
-<!--
-
- Strangely, IE sucks with or without the DOCTYPE switch.
- I thought it would only suck without it.
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-
- Spell Checker Plugin for HTMLArea-3.0
- Sponsored by www.americanbible.org
- Implementation by Mihai Bazon, http://dynarch.com/mishoo/
-
- (c) dynarch.com 2003.
- Distributed under the same terms as HTMLArea itself.
- This notice MUST stay intact for use (see license.txt).
-
- $Id: spell-check-ui.html,v 1.5 2004/01/31 13:47:05 mishoo Exp $
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml">
-
- <head>
- <title>Spell Checker</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <script type="text/javascript" src="spell-check-ui.js"></script>
-
- <style type="text/css">
- html, body { height: 100%; margin: 0px; padding: 0px; background-color: #fff;
- color: #000; }
- a:link, a:visited { color: #00f; text-decoration: none; }
- a:hover { color: #f00; text-decoration: underline; }
-
- table { background-color: ButtonFace; color: ButtonText;
- font-family: tahoma,verdana,sans-serif; font-size: 11px; }
-
- iframe { background-color: #fff; color: #000; height: 100%; width: 100%; }
-
- .controls { width: 13em; }
- .controls .sectitle { /* background-color: #736c6c; color: #fff;
- border-top: 1px solid #000; border-bottom: 1px solid #fff; */
- text-align: center;
- font-weight: bold; padding: 2px 4px; }
- .controls .secbody { margin-bottom: 10px; }
-
- button, select { font-family: tahoma,verdana,sans-serif; font-size: 11px; }
- button { width: 6em; padding: 0px; }
-
- input, select { font-family: fixed,"andale mono",monospace; }
-
- #v_currentWord { color: #f00; font-weight: bold; }
- #statusbar { padding: 7px 0px 0px 5px; }
- #status { font-weight: bold; }
- </style>
-
- </head>
-
- <body onload="initDocument()">
-
- <form style="display: none;" action="spell-check-logic.cgi"
- method="post" target="framecontent"
- accept-charset="UTF-8"
- ><input type="hidden" name="content" id="f_content"
- /><input type="hidden" name="dictionary" id="f_dictionary"
- /><input type="hidden" name="init" id="f_init" value="1"
- /></form>
-
- <table style="height: 100%; width: 100%; border-collapse: collapse;" cellspacing="0" cellpadding="0">
- <tr>
- <td colspan="2" style="height: 1em; padding: 2px;">
- <div style="float: right; padding: 2px;"><span>Dictionary</span>
- <select id="v_dictionaries" style="width: 10em"></select>
- <button id="b_recheck">Re-check</button>
- </div>
- <span id="status">Please wait. Calling spell checker.</span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="controls">
- <div class="secbody" style="text-align: center">
- <button id="b_info">Info</button>
- </div>
- <div class="sectitle">Original word</div>
- <div class="secbody" id="v_currentWord" style="text-align:
- center; margin-bottom: 0px;">pliz weit ;-)</div>
- <div class="secbody" style="text-align: center">
- <button id="b_revert">Revert</button>
- </div>
- <div class="sectitle">Replace with</div>
- <div class="secbody">
- <input type="text" id="v_replacement" style="width: 94%; margin-left: 3%;" /><br />
- <div style="text-align: center; margin-top: 2px;">
- <button id="b_replace">Replace</button><button
- id="b_replall">Replace all</button><br /><button
- id="b_ignore">Ignore</button><button
- id="b_ignall">Ignore all</button>
- </div>
- </div>
- <div class="sectitle">Suggestions</div>
- <div class="secbody">
- <select size="11" style="width: 94%; margin-left: 3%;" id="v_suggestions"></select>
- </div>
- </td>
-
- <td>
- <iframe src="about:blank" width="100%" height="100%"
- id="i_framecontent" name="framecontent"></iframe>
- </td>
- </tr>
- <tr>
- <td style="height: 1em;" colspan="2">
- <div style="padding: 4px 2px 2px 2px; float: right;">
- <button id="b_ok">OK</button>
- <button id="b_cancel">Cancel</button>
- </div>
- <div id="statusbar"></div>
- </td>
- </tr>
- </table>
-
- </body>
-
-</html>
+<!--
+
+ Strangely, IE sucks with or without the DOCTYPE switch.
+ I thought it would only suck without it.
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+
+ Spell Checker Plugin for HTMLArea-3.0
+ Sponsored by www.americanbible.org
+ Implementation by Mihai Bazon, http://dynarch.com/mishoo/
+
+ (c) dynarch.com 2003-2005.
+ Distributed under the same terms as HTMLArea itself.
+ This notice MUST stay intact for use (see license.txt).
+
+ $Id: spell-check-ui.html,v 1.6 2005/01/20 17:49:03 mishoo Exp $
+
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+ <head>
+ <title>Spell Checker</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <script type="text/javascript" src="spell-check-ui.js"></script>
+
+ <style type="text/css">
+ html, body { height: 100%; margin: 0px; padding: 0px; background-color: #fff;
+ color: #000; }
+ a:link, a:visited { color: #00f; text-decoration: none; }
+ a:hover { color: #f00; text-decoration: underline; }
+
+ table { background-color: ButtonFace; color: ButtonText;
+ font-family: tahoma,verdana,sans-serif; font-size: 11px; }
+
+ iframe { background-color: #fff; color: #000; height: 100%; width: 100%; }
+
+ .controls { width: 13em; }
+ .controls .sectitle { /* background-color: #736c6c; color: #fff;
+ border-top: 1px solid #000; border-bottom: 1px solid #fff; */
+ text-align: center;
+ font-weight: bold; padding: 2px 4px; }
+ .controls .secbody { margin-bottom: 10px; }
+
+ button, select { font-family: tahoma,verdana,sans-serif; font-size: 11px; }
+ button { width: 6em; padding: 0px; }
+
+ input, select { font-family: fixed,"andale mono",monospace; }
+
+ #v_currentWord { color: #f00; font-weight: bold; }
+ #statusbar { padding: 7px 0px 0px 5px; }
+ #status { font-weight: bold; }
+ </style>
+
+ </head>
+
+ <body onload="initDocument()">
+
+ <form style="display: none;" action="spell-check-logic.cgi"
+ method="post" target="framecontent"
+ accept-charset="UTF-8"
+ ><input type="hidden" name="content" id="f_content"
+ /><input type="hidden" name="dictionary" id="f_dictionary"
+ /><input type="hidden" name="init" id="f_init" value="1"
+ /></form>
+
+ <table style="height: 100%; width: 100%; border-collapse: collapse;" cellspacing="0" cellpadding="0">
+ <tr>
+ <td colspan="2" style="height: 1em; padding: 2px;">
+ <div style="float: right; padding: 2px;"><span>Dictionary</span>
+ <select id="v_dictionaries" style="width: 10em"></select>
+ <button id="b_recheck">Re-check</button>
+ </div>
+ <span id="status">Please wait. Calling spell checker.</span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="controls">
+ <div class="secbody" style="text-align: center">
+ <button id="b_info">Info</button>
+ </div>
+ <div class="sectitle">Original word</div>
+ <div class="secbody" id="v_currentWord" style="text-align:
+ center; margin-bottom: 0px;">pliz weit ;-)</div>
+ <div class="secbody" style="text-align: center">
+ <button id="b_revert">Revert</button>
+ </div>
+ <div class="sectitle">Replace with</div>
+ <div class="secbody">
+ <input type="text" id="v_replacement" style="width: 94%; margin-left: 3%;" /><br />
+ <div style="text-align: center; margin-top: 2px;">
+ <button id="b_replace">Replace</button><button
+ id="b_replall">Replace all</button><br /><button
+ id="b_ignore">Ignore</button><button
+ id="b_ignall">Ignore all</button>
+ </div>
+ </div>
+ <div class="sectitle">Suggestions</div>
+ <div class="secbody">
+ <select size="11" style="width: 94%; margin-left: 3%;" id="v_suggestions"></select>
+ </div>
+ </td>
+
+ <td>
+ <iframe src="about:blank" width="100%" height="100%"
+ id="i_framecontent" name="framecontent"></iframe>
+ </td>
+ </tr>
+ <tr>
+ <td style="height: 1em;" colspan="2">
+ <div style="padding: 4px 2px 2px 2px; float: right;">
+ <button id="b_ok">OK</button>
+ <button id="b_cancel">Cancel</button>
+ </div>
+ <div id="statusbar"></div>
+ </td>
+ </tr>
+ </table>
+
+ </body>
+
+</html>
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-ui.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-ui.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/spell-check-ui.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,397 +1,397 @@
-// Spell Checker Plugin for HTMLArea-3.0
-// Sponsored by www.americanbible.org
-// Implementation by Mihai Bazon, http://dynarch.com/mishoo/
-//
-// (c) dynarch.com 2003.
-// Distributed under the same terms as HTMLArea itself.
-// This notice MUST stay intact for use (see license.txt).
-//
-// $Id: spell-check-ui.js,v 1.9 2004/01/31 13:47:05 mishoo Exp $
-
-// internationalization file was already loaded in parent ;-)
-var SpellChecker = window.opener.SpellChecker;
-var i18n = SpellChecker.I18N;
-
-var HTMLArea = window.opener.HTMLArea;
-var is_ie = HTMLArea.is_ie;
-var editor = SpellChecker.editor;
-var frame = null;
-var currentElement = null;
-var wrongWords = null;
-var modified = false;
-var allWords = {};
-var fixedWords = [];
-var suggested_words = {};
-
-function makeCleanDoc(leaveFixed) {
- // document.getElementById("status").innerHTML = 'Please wait: rendering valid HTML';
- var words = wrongWords.concat(fixedWords);
- for (var i = words.length; --i >= 0;) {
- var el = words[i];
- if (!(leaveFixed && /HA-spellcheck-fixed/.test(el.className))) {
- el.parentNode.insertBefore(el.firstChild, el);
- el.parentNode.removeChild(el);
- } else
- el.className = "HA-spellcheck-fixed";
- }
- // we should use innerHTML here, but IE6's implementation fucks up the
- // HTML to such extent that our poor Perl parser doesn't understand it
- // anymore.
- return window.opener.HTMLArea.getHTML(frame.contentWindow.document.body, false, editor);
-};
-
-function recheckClicked() {
- document.getElementById("status").innerHTML = i18n["Please wait: changing dictionary to"] + ': "' + document.getElementById("f_dictionary").value + '".';
- var field = document.getElementById("f_content");
- field.value = makeCleanDoc(true);
- field.form.submit();
-};
-
-function saveClicked() {
- if (modified) {
- editor.setHTML(makeCleanDoc(false));
- }
- window.close();
- return false;
-};
-
-function cancelClicked() {
- var ok = true;
- if (modified) {
- ok = confirm(i18n["QUIT_CONFIRMATION"]);
- }
- if (ok) {
- window.close();
- }
- return false;
-};
-
-function replaceWord(el) {
- var replacement = document.getElementById("v_replacement").value;
- var this_word_modified = (el.innerHTML != replacement);
- if (this_word_modified)
- modified = true;
- if (el) {
- el.className = el.className.replace(/\s*HA-spellcheck-(hover|fixed)\s*/g, " ");
- }
- el.className += " HA-spellcheck-fixed";
- el.__msh_fixed = true;
- if (!this_word_modified) {
- return false;
- }
- el.innerHTML = replacement;
-};
-
-function replaceClicked() {
- replaceWord(currentElement);
- var start = currentElement.__msh_id;
- var index = start;
- do {
- ++index;
- if (index == wrongWords.length) {
- index = 0;
- }
- } while ((index != start) && wrongWords[index].__msh_fixed);
- if (index == start) {
- index = 0;
- alert(i18n["Finished list of mispelled words"]);
- }
- wrongWords[index].__msh_wordClicked(true);
- return false;
-};
-
-function revertClicked() {
- document.getElementById("v_replacement").value = currentElement.__msh_origWord;
- replaceWord(currentElement);
- currentElement.className = "HA-spellcheck-error HA-spellcheck-current";
- return false;
-};
-
-function replaceAllClicked() {
- var replacement = document.getElementById("v_replacement").value;
- var ok = true;
- var spans = allWords[currentElement.__msh_origWord];
- if (spans.length == 0) {
- alert("An impossible condition just happened. Call FBI. ;-)");
- } else if (spans.length == 1) {
- replaceClicked();
- return false;
- }
- /*
- var message = "The word \"" + currentElement.__msh_origWord + "\" occurs " + spans.length + " times.\n";
- if (replacement == currentElement.__msh_origWord) {
- ok = confirm(message + "Ignore all occurrences?");
- } else {
- ok = confirm(message + "Replace all occurrences with \"" + replacement + "\"?");
- }
- */
- if (ok) {
- for (var i in spans) {
- if (spans[i] != currentElement) {
- replaceWord(spans[i]);
- }
- }
- // replace current element the last, so that we jump to the next word ;-)
- replaceClicked();
- }
- return false;
-};
-
-function ignoreClicked() {
- document.getElementById("v_replacement").value = currentElement.__msh_origWord;
- replaceClicked();
- return false;
-};
-
-function ignoreAllClicked() {
- document.getElementById("v_replacement").value = currentElement.__msh_origWord;
- replaceAllClicked();
- return false;
-};
-
-function learnClicked() {
- alert("Not [yet] implemented");
- return false;
-};
-
-function internationalizeWindow() {
- var types = ["div", "span", "button"];
- for (var i in types) {
- var tag = types[i];
- var els = document.getElementsByTagName(tag);
- for (var j = els.length; --j >= 0;) {
- var el = els[j];
- if (el.childNodes.length == 1 && /\S/.test(el.innerHTML)) {
- var txt = el.innerHTML;
- if (typeof i18n[txt] != "undefined") {
- el.innerHTML = i18n[txt];
- }
- }
- }
- }
-};
-
-function initDocument() {
- internationalizeWindow();
- modified = false;
- frame = document.getElementById("i_framecontent");
- var field = document.getElementById("f_content");
- field.value = HTMLArea.getHTML(editor._doc.body, false, editor);
- field.form.submit();
- document.getElementById("f_init").value = "0";
-
- // assign some global event handlers
-
- var select = document.getElementById("v_suggestions");
- select.onchange = function() {
- document.getElementById("v_replacement").value = this.value;
- };
- if (is_ie) {
- select.attachEvent("ondblclick", replaceClicked);
- } else {
- select.addEventListener("dblclick", replaceClicked, true);
- }
-
- document.getElementById("b_replace").onclick = replaceClicked;
- // document.getElementById("b_learn").onclick = learnClicked;
- document.getElementById("b_replall").onclick = replaceAllClicked;
- document.getElementById("b_ignore").onclick = ignoreClicked;
- document.getElementById("b_ignall").onclick = ignoreAllClicked;
- document.getElementById("b_recheck").onclick = recheckClicked;
- document.getElementById("b_revert").onclick = revertClicked;
- document.getElementById("b_info").onclick = displayInfo;
-
- document.getElementById("b_ok").onclick = saveClicked;
- document.getElementById("b_cancel").onclick = cancelClicked;
-
- select = document.getElementById("v_dictionaries");
- select.onchange = function() {
- document.getElementById("f_dictionary").value = this.value;
- };
-};
-
-function getAbsolutePos(el) {
- var r = { x: el.offsetLeft, y: el.offsetTop };
- if (el.offsetParent) {
- var tmp = getAbsolutePos(el.offsetParent);
- r.x += tmp.x;
- r.y += tmp.y;
- }
- return r;
-};
-
-function wordClicked(scroll) {
- var self = this;
- if (scroll) (function() {
- var pos = getAbsolutePos(self);
- var ws = { x: frame.offsetWidth - 4,
- y: frame.offsetHeight - 4 };
- var wp = { x: frame.contentWindow.document.body.scrollLeft,
- y: frame.contentWindow.document.body.scrollTop };
- pos.x -= Math.round(ws.x/2);
- if (pos.x < 0) pos.x = 0;
- pos.y -= Math.round(ws.y/2);
- if (pos.y < 0) pos.y = 0;
- frame.contentWindow.scrollTo(pos.x, pos.y);
- })();
- if (currentElement) {
- var a = allWords[currentElement.__msh_origWord];
- currentElement.className = currentElement.className.replace(/\s*HA-spellcheck-current\s*/g, " ");
- for (var i in a) {
- var el = a[i];
- if (el != currentElement) {
- el.className = el.className.replace(/\s*HA-spellcheck-same\s*/g, " ");
- }
- }
- }
- currentElement = this;
- this.className += " HA-spellcheck-current";
- var a = allWords[currentElement.__msh_origWord];
- for (var i in a) {
- var el = a[i];
- if (el != currentElement) {
- el.className += " HA-spellcheck-same";
- }
- }
- // document.getElementById("b_replall").disabled = (a.length <= 1);
- // document.getElementById("b_ignall").disabled = (a.length <= 1);
- var txt;
- if (a.length == 1) {
- txt = "one occurrence";
- } else if (a.length == 2) {
- txt = "two occurrences";
- } else {
- txt = a.length + " occurrences";
- }
- var suggestions = suggested_words[this.__msh_origWord];
- if (suggestions)
- suggestions = suggestions.split(/,/);
- else
- suggestions = [];
- var select = document.getElementById("v_suggestions");
- document.getElementById("statusbar").innerHTML = "Found " + txt +
- ' for word "<b>' + currentElement.__msh_origWord + '</b>"';
- for (var i = select.length; --i >= 0;) {
- select.remove(i);
- }
- for (var i = 0; i < suggestions.length; ++i) {
- var txt = suggestions[i];
- var option = document.createElement("option");
- option.value = txt;
- option.appendChild(document.createTextNode(txt));
- select.appendChild(option);
- }
- document.getElementById("v_currentWord").innerHTML = this.__msh_origWord;
- if (suggestions.length > 0) {
- select.selectedIndex = 0;
- select.onchange();
- } else {
- document.getElementById("v_replacement").value = this.innerHTML;
- }
- select.style.display = "none";
- select.style.display = "block";
- return false;
-};
-
-function wordMouseOver() {
- this.className += " HA-spellcheck-hover";
-};
-
-function wordMouseOut() {
- this.className = this.className.replace(/\s*HA-spellcheck-hover\s*/g, " ");
-};
-
-function displayInfo() {
- var info = frame.contentWindow.spellcheck_info;
- if (!info)
- alert("No information available");
- else {
- var txt = "** Document information **";
- for (var i in info) {
- txt += "\n" + i + " : " + info[i];
- }
- alert(txt);
- }
- return false;
-};
-
-function finishedSpellChecking() {
- // initialization of global variables
- currentElement = null;
- wrongWords = null;
- allWords = {};
- fixedWords = [];
- suggested_words = frame.contentWindow.suggested_words;
-
- document.getElementById("status").innerHTML = "HTMLArea Spell Checker (<a href='readme-tech.html' target='_blank' title='Technical information'>info</a>)";
- var doc = frame.contentWindow.document;
- var spans = doc.getElementsByTagName("span");
- var sps = [];
- var id = 0;
- for (var i = 0; i < spans.length; ++i) {
- var el = spans[i];
- if (/HA-spellcheck-error/.test(el.className)) {
- sps.push(el);
- el.__msh_wordClicked = wordClicked;
- el.onclick = function(ev) {
- ev || (ev = window.event);
- ev && HTMLArea._stopEvent(ev);
- return this.__msh_wordClicked(false);
- };
- el.onmouseover = wordMouseOver;
- el.onmouseout = wordMouseOut;
- el.__msh_id = id++;
- var txt = (el.__msh_origWord = el.firstChild.data);
- el.__msh_fixed = false;
- if (typeof allWords[txt] == "undefined") {
- allWords[txt] = [el];
- } else {
- allWords[txt].push(el);
- }
- } else if (/HA-spellcheck-fixed/.test(el.className)) {
- fixedWords.push(el);
- }
- }
- wrongWords = sps;
- if (sps.length == 0) {
- if (!modified) {
- alert(i18n["NO_ERRORS_CLOSING"]);
- window.close();
- } else {
- alert(i18n["NO_ERRORS"]);
- }
- return false;
- }
- (currentElement = sps[0]).__msh_wordClicked(true);
- var as = doc.getElementsByTagName("a");
- for (var i = as.length; --i >= 0;) {
- var a = as[i];
- a.onclick = function() {
- if (confirm(i18n["CONFIRM_LINK_CLICK"] + ":\n" +
- this.href + "\n" + i18n["I will open it in a new page."])) {
- window.open(this.href);
- }
- return false;
- };
- }
- var dicts = doc.getElementById("HA-spellcheck-dictionaries");
- if (dicts) {
- dicts.parentNode.removeChild(dicts);
- dicts = dicts.innerHTML.split(/,/);
- var select = document.getElementById("v_dictionaries");
- for (var i = select.length; --i >= 0;) {
- select.remove(i);
- }
- for (var i = 0; i < dicts.length; ++i) {
- var txt = dicts[i];
- var option = document.createElement("option");
- if (/^@(.*)$/.test(txt)) {
- txt = RegExp.$1;
- option.selected = true;
- }
- option.value = txt;
- option.appendChild(document.createTextNode(txt));
- select.appendChild(option);
- }
- }
-};
+// Spell Checker Plugin for HTMLArea-3.0
+// Sponsored by www.americanbible.org
+// Implementation by Mihai Bazon, http://dynarch.com/mishoo/
+//
+// (c) dynarch.com 2003-2005.
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+//
+// $Id: spell-check-ui.js,v 1.11 2005/01/20 17:49:03 mishoo Exp $
+
+// internationalization file was already loaded in parent ;-)
+var SpellChecker = window.opener.SpellChecker;
+var i18n = SpellChecker.I18N;
+
+var HTMLArea = window.opener.HTMLArea;
+var is_ie = HTMLArea.is_ie;
+var editor = SpellChecker.editor;
+var frame = null;
+var currentElement = null;
+var wrongWords = null;
+var modified = false;
+var allWords = {};
+var fixedWords = [];
+var suggested_words = {};
+
+function makeCleanDoc(leaveFixed) {
+ // document.getElementById("status").innerHTML = 'Please wait: rendering valid HTML';
+ var words = wrongWords.concat(fixedWords);
+ for (var i = words.length; --i >= 0;) {
+ var el = words[i];
+ if (!(leaveFixed && /HA-spellcheck-fixed/.test(el.className))) {
+ el.parentNode.insertBefore(el.firstChild, el);
+ el.parentNode.removeChild(el);
+ } else
+ el.className = "HA-spellcheck-fixed";
+ }
+ // we should use innerHTML here, but IE6's implementation fucks up the
+ // HTML to such extent that our poor Perl parser doesn't understand it
+ // anymore.
+ return window.opener.HTMLArea.getHTML(frame.contentWindow.document.body, false, editor);
+};
+
+function recheckClicked() {
+ document.getElementById("status").innerHTML = i18n["Please wait: changing dictionary to"] + ': "' + document.getElementById("f_dictionary").value + '".';
+ var field = document.getElementById("f_content");
+ field.value = makeCleanDoc(true);
+ field.form.submit();
+};
+
+function saveClicked() {
+ if (modified) {
+ editor.setHTML(makeCleanDoc(false));
+ }
+ window.close();
+ return false;
+};
+
+function cancelClicked() {
+ var ok = true;
+ if (modified) {
+ ok = confirm(i18n["QUIT_CONFIRMATION"]);
+ }
+ if (ok) {
+ window.close();
+ }
+ return false;
+};
+
+function replaceWord(el) {
+ var replacement = document.getElementById("v_replacement").value;
+ var this_word_modified = (el.innerHTML != replacement);
+ if (this_word_modified)
+ modified = true;
+ if (el) {
+ el.className = el.className.replace(/\s*HA-spellcheck-(hover|fixed)\s*/g, " ");
+ }
+ el.className += " HA-spellcheck-fixed";
+ el.__msh_fixed = true;
+ if (!this_word_modified) {
+ return false;
+ }
+ el.innerHTML = replacement;
+};
+
+function replaceClicked() {
+ replaceWord(currentElement);
+ var start = currentElement.__msh_id;
+ var index = start;
+ do {
+ ++index;
+ if (index == wrongWords.length) {
+ index = 0;
+ }
+ } while ((index != start) && wrongWords[index].__msh_fixed);
+ if (index == start) {
+ index = 0;
+ alert(i18n["Finished list of mispelled words"]);
+ }
+ wrongWords[index].__msh_wordClicked(true);
+ return false;
+};
+
+function revertClicked() {
+ document.getElementById("v_replacement").value = currentElement.__msh_origWord;
+ replaceWord(currentElement);
+ currentElement.className = "HA-spellcheck-error HA-spellcheck-current";
+ return false;
+};
+
+function replaceAllClicked() {
+ var replacement = document.getElementById("v_replacement").value;
+ var ok = true;
+ var spans = allWords[currentElement.__msh_origWord];
+ if (spans.length == 0) {
+ alert("An impossible condition just happened. Call FBI. ;-)");
+ } else if (spans.length == 1) {
+ replaceClicked();
+ return false;
+ }
+ /*
+ var message = "The word \"" + currentElement.__msh_origWord + "\" occurs " + spans.length + " times.\n";
+ if (replacement == currentElement.__msh_origWord) {
+ ok = confirm(message + "Ignore all occurrences?");
+ } else {
+ ok = confirm(message + "Replace all occurrences with \"" + replacement + "\"?");
+ }
+ */
+ if (ok) {
+ for (var i = 0; i < spans.length; ++i) {
+ if (spans[i] != currentElement) {
+ replaceWord(spans[i]);
+ }
+ }
+ // replace current element the last, so that we jump to the next word ;-)
+ replaceClicked();
+ }
+ return false;
+};
+
+function ignoreClicked() {
+ document.getElementById("v_replacement").value = currentElement.__msh_origWord;
+ replaceClicked();
+ return false;
+};
+
+function ignoreAllClicked() {
+ document.getElementById("v_replacement").value = currentElement.__msh_origWord;
+ replaceAllClicked();
+ return false;
+};
+
+function learnClicked() {
+ alert("Not [yet] implemented");
+ return false;
+};
+
+function internationalizeWindow() {
+ var types = ["div", "span", "button"];
+ for (var i = 0; i < types.length; ++i) {
+ var tag = types[i];
+ var els = document.getElementsByTagName(tag);
+ for (var j = els.length; --j >= 0;) {
+ var el = els[j];
+ if (el.childNodes.length == 1 && /\S/.test(el.innerHTML)) {
+ var txt = el.innerHTML;
+ if (typeof i18n[txt] != "undefined") {
+ el.innerHTML = i18n[txt];
+ }
+ }
+ }
+ }
+};
+
+function initDocument() {
+ internationalizeWindow();
+ modified = false;
+ frame = document.getElementById("i_framecontent");
+ var field = document.getElementById("f_content");
+ field.value = HTMLArea.getHTML(editor._doc.body, false, editor);
+ field.form.submit();
+ document.getElementById("f_init").value = "0";
+
+ // assign some global event handlers
+
+ var select = document.getElementById("v_suggestions");
+ select.onchange = function() {
+ document.getElementById("v_replacement").value = this.value;
+ };
+ if (is_ie) {
+ select.attachEvent("ondblclick", replaceClicked);
+ } else {
+ select.addEventListener("dblclick", replaceClicked, true);
+ }
+
+ document.getElementById("b_replace").onclick = replaceClicked;
+ // document.getElementById("b_learn").onclick = learnClicked;
+ document.getElementById("b_replall").onclick = replaceAllClicked;
+ document.getElementById("b_ignore").onclick = ignoreClicked;
+ document.getElementById("b_ignall").onclick = ignoreAllClicked;
+ document.getElementById("b_recheck").onclick = recheckClicked;
+ document.getElementById("b_revert").onclick = revertClicked;
+ document.getElementById("b_info").onclick = displayInfo;
+
+ document.getElementById("b_ok").onclick = saveClicked;
+ document.getElementById("b_cancel").onclick = cancelClicked;
+
+ select = document.getElementById("v_dictionaries");
+ select.onchange = function() {
+ document.getElementById("f_dictionary").value = this.value;
+ };
+};
+
+function getAbsolutePos(el) {
+ var r = { x: el.offsetLeft, y: el.offsetTop };
+ if (el.offsetParent) {
+ var tmp = getAbsolutePos(el.offsetParent);
+ r.x += tmp.x;
+ r.y += tmp.y;
+ }
+ return r;
+};
+
+function wordClicked(scroll) {
+ var self = this;
+ if (scroll) (function() {
+ var pos = getAbsolutePos(self);
+ var ws = { x: frame.offsetWidth - 4,
+ y: frame.offsetHeight - 4 };
+ var wp = { x: frame.contentWindow.document.body.scrollLeft,
+ y: frame.contentWindow.document.body.scrollTop };
+ pos.x -= Math.round(ws.x/2);
+ if (pos.x < 0) pos.x = 0;
+ pos.y -= Math.round(ws.y/2);
+ if (pos.y < 0) pos.y = 0;
+ frame.contentWindow.scrollTo(pos.x, pos.y);
+ })();
+ if (currentElement) {
+ var a = allWords[currentElement.__msh_origWord];
+ currentElement.className = currentElement.className.replace(/\s*HA-spellcheck-current\s*/g, " ");
+ for (var i = 0; i < a.length; ++i) {
+ var el = a[i];
+ if (el != currentElement) {
+ el.className = el.className.replace(/\s*HA-spellcheck-same\s*/g, " ");
+ }
+ }
+ }
+ currentElement = this;
+ this.className += " HA-spellcheck-current";
+ var a = allWords[currentElement.__msh_origWord];
+ for (var i = 0; i < a.length; ++i) {
+ var el = a[i];
+ if (el != currentElement) {
+ el.className += " HA-spellcheck-same";
+ }
+ }
+ // document.getElementById("b_replall").disabled = (a.length <= 1);
+ // document.getElementById("b_ignall").disabled = (a.length <= 1);
+ var txt;
+ if (a.length == 1) {
+ txt = "one occurrence";
+ } else if (a.length == 2) {
+ txt = "two occurrences";
+ } else {
+ txt = a.length + " occurrences";
+ }
+ var suggestions = suggested_words[this.__msh_origWord];
+ if (suggestions)
+ suggestions = suggestions.split(/,/);
+ else
+ suggestions = [];
+ var select = document.getElementById("v_suggestions");
+ document.getElementById("statusbar").innerHTML = "Found " + txt +
+ ' for word "<b>' + currentElement.__msh_origWord + '</b>"';
+ for (var i = select.length; --i >= 0;) {
+ select.remove(i);
+ }
+ for (var i = 0; i < suggestions.length; ++i) {
+ var txt = suggestions[i];
+ var option = document.createElement("option");
+ option.value = txt;
+ option.appendChild(document.createTextNode(txt));
+ select.appendChild(option);
+ }
+ document.getElementById("v_currentWord").innerHTML = this.__msh_origWord;
+ if (suggestions.length > 0) {
+ select.selectedIndex = 0;
+ select.onchange();
+ } else {
+ document.getElementById("v_replacement").value = this.innerHTML;
+ }
+ select.style.display = "none";
+ select.style.display = "block";
+ return false;
+};
+
+function wordMouseOver() {
+ this.className += " HA-spellcheck-hover";
+};
+
+function wordMouseOut() {
+ this.className = this.className.replace(/\s*HA-spellcheck-hover\s*/g, " ");
+};
+
+function displayInfo() {
+ var info = frame.contentWindow.spellcheck_info;
+ if (!info)
+ alert("No information available");
+ else {
+ var txt = "** Document information **";
+ for (var i in info) {
+ txt += "\n" + i + " : " + info[i];
+ }
+ alert(txt);
+ }
+ return false;
+};
+
+function finishedSpellChecking() {
+ // initialization of global variables
+ currentElement = null;
+ wrongWords = null;
+ allWords = {};
+ fixedWords = [];
+ suggested_words = frame.contentWindow.suggested_words;
+
+ document.getElementById("status").innerHTML = "HTMLArea Spell Checker (<a href='readme-tech.html' target='_blank' title='Technical information'>info</a>)";
+ var doc = frame.contentWindow.document;
+ var spans = doc.getElementsByTagName("span");
+ var sps = [];
+ var id = 0;
+ for (var i = 0; i < spans.length; ++i) {
+ var el = spans[i];
+ if (/HA-spellcheck-error/.test(el.className)) {
+ sps.push(el);
+ el.__msh_wordClicked = wordClicked;
+ el.onclick = function(ev) {
+ ev || (ev = window.event);
+ ev && HTMLArea._stopEvent(ev);
+ return this.__msh_wordClicked(false);
+ };
+ el.onmouseover = wordMouseOver;
+ el.onmouseout = wordMouseOut;
+ el.__msh_id = id++;
+ var txt = (el.__msh_origWord = el.firstChild.data);
+ el.__msh_fixed = false;
+ if (typeof allWords[txt] == "undefined") {
+ allWords[txt] = [el];
+ } else {
+ allWords[txt].push(el);
+ }
+ } else if (/HA-spellcheck-fixed/.test(el.className)) {
+ fixedWords.push(el);
+ }
+ }
+ wrongWords = sps;
+ if (sps.length == 0) {
+ if (!modified) {
+ alert(i18n["NO_ERRORS_CLOSING"]);
+ window.close();
+ } else {
+ alert(i18n["NO_ERRORS"]);
+ }
+ return false;
+ }
+ (currentElement = sps[0]).__msh_wordClicked(true);
+ var as = doc.getElementsByTagName("a");
+ for (var i = as.length; --i >= 0;) {
+ var a = as[i];
+ a.onclick = function() {
+ if (confirm(i18n["CONFIRM_LINK_CLICK"] + ":\n" +
+ this.href + "\n" + i18n["I will open it in a new page."])) {
+ window.open(this.href);
+ }
+ return false;
+ };
+ }
+ var dicts = doc.getElementById("HA-spellcheck-dictionaries");
+ if (dicts) {
+ dicts.parentNode.removeChild(dicts);
+ dicts = dicts.innerHTML.split(/,/);
+ var select = document.getElementById("v_dictionaries");
+ for (var i = select.length; --i >= 0;) {
+ select.remove(i);
+ }
+ for (var i = 0; i < dicts.length; ++i) {
+ var txt = dicts[i];
+ var option = document.createElement("option");
+ if (/^@(.*)$/.test(txt)) {
+ txt = RegExp.$1;
+ option.selected = true;
+ }
+ option.value = txt;
+ option.appendChild(document.createTextNode(txt));
+ select.appendChild(option);
+ }
+ }
+};
Modified: plog/trunk/js/htmlarea/plugins/SpellChecker/spell-checker.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/SpellChecker/spell-checker.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/SpellChecker/spell-checker.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,79 +1,79 @@
-// Spell Checker Plugin for HTMLArea-3.0
-// Sponsored by www.americanbible.org
-// Implementation by Mihai Bazon, http://dynarch.com/mishoo/
-//
-// (c) dynarch.com 2003.
-// Distributed under the same terms as HTMLArea itself.
-// This notice MUST stay intact for use (see license.txt).
-//
-// $Id: spell-checker.js,v 1.7 2004/01/30 00:25:06 mishoo Exp $
-
-function SpellChecker(editor) {
- this.editor = editor;
-
- var cfg = editor.config;
- var tt = SpellChecker.I18N;
- var bl = SpellChecker.btnList;
- var self = this;
-
- // register the toolbar buttons provided by this plugin
- var toolbar = [];
- for (var i in bl) {
- var btn = bl[i];
- if (!btn) {
- toolbar.push("separator");
- } else {
- var id = "SC-" + btn[0];
- cfg.registerButton(id, tt[id], editor.imgURL(btn[0] + ".gif", "SpellChecker"), false,
- function(editor, id) {
- // dispatch button press event
- self.buttonPress(editor, id);
- }, btn[1]);
- toolbar.push(id);
- }
- }
-
- for (var i in toolbar) {
- cfg.toolbar[0].push(toolbar[i]);
- }
-};
-
-SpellChecker._pluginInfo = {
- name : "SpellChecker",
- version : "1.0",
- developer : "Mihai Bazon",
- developer_url : "http://dynarch.com/mishoo/",
- c_owner : "Mihai Bazon",
- sponsor : "American Bible Society",
- sponsor_url : "http://www.americanbible.org",
- license : "htmlArea"
-};
-
-SpellChecker.btnList = [
- null, // separator
- ["spell-check"]
- ];
-
-SpellChecker.prototype.buttonPress = function(editor, id) {
- switch (id) {
- case "SC-spell-check":
- SpellChecker.editor = editor;
- SpellChecker.init = true;
- var uiurl = _editor_url + "plugins/SpellChecker/spell-check-ui.html";
- var win;
- if (HTMLArea.is_ie) {
- win = window.open(uiurl, "SC_spell_checker",
- "toolbar=no,location=no,directories=no,status=no,menubar=no," +
- "scrollbars=no,resizable=yes,width=600,height=450");
- } else {
- win = window.open(uiurl, "SC_spell_checker",
- "toolbar=no,menubar=no,personalbar=no,width=600,height=450," +
- "scrollbars=no,resizable=yes");
- }
- win.focus();
- break;
- }
-};
-
-// this needs to be global, it's accessed from spell-check-ui.html
-SpellChecker.editor = null;
+// Spell Checker Plugin for HTMLArea-3.0
+// Sponsored by www.americanbible.org
+// Implementation by Mihai Bazon, http://dynarch.com/mishoo/
+//
+// (c) dynarch.com 2003-2005.
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+//
+// $Id: spell-checker.js,v 1.9 2005/01/20 17:49:02 mishoo Exp $
+
+function SpellChecker(editor) {
+ this.editor = editor;
+
+ var cfg = editor.config;
+ var tt = SpellChecker.I18N;
+ var bl = SpellChecker.btnList;
+ var self = this;
+
+ // register the toolbar buttons provided by this plugin
+ var toolbar = [];
+ for (var i = 0; i < bl.length; ++i) {
+ var btn = bl[i];
+ if (!btn) {
+ toolbar.push("separator");
+ } else {
+ var id = "SC-" + btn[0];
+ cfg.registerButton(id, tt[id], editor.imgURL(btn[0] + ".gif", "SpellChecker"), false,
+ function(editor, id) {
+ // dispatch button press event
+ self.buttonPress(editor, id);
+ }, btn[1]);
+ toolbar.push(id);
+ }
+ }
+
+ for (var i = 0; i < toolbar.length; ++i) {
+ cfg.toolbar[0].push(toolbar[i]);
+ }
+};
+
+SpellChecker._pluginInfo = {
+ name : "SpellChecker",
+ version : "1.0",
+ developer : "Mihai Bazon",
+ developer_url : "http://dynarch.com/mishoo/",
+ c_owner : "Mihai Bazon",
+ sponsor : "American Bible Society",
+ sponsor_url : "http://www.americanbible.org",
+ license : "htmlArea"
+};
+
+SpellChecker.btnList = [
+ null, // separator
+ ["spell-check"]
+ ];
+
+SpellChecker.prototype.buttonPress = function(editor, id) {
+ switch (id) {
+ case "SC-spell-check":
+ SpellChecker.editor = editor;
+ SpellChecker.init = true;
+ var uiurl = _editor_url + "plugins/SpellChecker/spell-check-ui.html";
+ var win;
+ if (HTMLArea.is_ie) {
+ win = window.open(uiurl, "SC_spell_checker",
+ "toolbar=no,location=no,directories=no,status=no,menubar=no," +
+ "scrollbars=no,resizable=yes,width=600,height=450");
+ } else {
+ win = window.open(uiurl, "SC_spell_checker",
+ "toolbar=no,menubar=no,personalbar=no,width=600,height=450," +
+ "scrollbars=no,resizable=yes");
+ }
+ win.focus();
+ break;
+ }
+};
+
+// this needs to be global, it's accessed from spell-check-ui.html
+SpellChecker.editor = null;
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/lang/cz.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/cz.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/cz.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,90 +1,90 @@
-// I18N constants
-
-// LANG: "cz", ENCODING: UTF-8 | ISO-8859-2
-// Author: Jiri Löw, <jirilow at jirilow.com>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-TableOperations.I18N = {
- "Align": "ZarovnánÃ",
- "All four sides": "VÅ¡echny ÄtyÅi strany",
- "Background": "PozadÃ",
- "Baseline": "Základnà linka",
- "Border": "Obrys",
- "Borders": "Obrysy",
- "Bottom": "Dolů",
- "CSS Style": "Kaskádové styly (CSS)",
- "Caption": "Titulek",
- "Cell Properties": "Vlastnosti buÅky",
- "Center": "Na stÅed",
- "Char": "Znak",
- "Collapsed borders": "StlaÄené okraje",
- "Color": "Barva",
- "Description": "Popis",
- "FG Color": "Barva popÅedÃ",
- "Float": "ObtékánÃ",
- "Frames": "RámeÄky",
- "Height": "Výška",
- "How many columns would you like to merge?": "Kolik sloupců si pÅejete spojit?",
- "How many rows would you like to merge?": "Kolik Åádků si pÅejete spojit?",
- "Image URL": "Adresa obrázku",
- "Justify": "Do stran",
- "Layout": "RozloženÃ",
- "Left": "Vlevo",
- "Margin": "Okraj",
- "Middle": "Na stÅed",
- "No rules": "Žádné Äáry",
- "No sides": "Žádné strany",
- "None": "Žádné",
- "Padding": "OdsazovánÃ",
- "Please click into some cell": "ProsÃm kliknÄte do nÄkteré buÅky",
- "Right": "Vpravo",
- "Row Properties": "Vlastnosti Åádku",
- "Rules will appear between all rows and columns": "Äáry mezi vÅ¡emi Åádky i sloupci",
- "Rules will appear between columns only": "Äáry pouze mezi sloupci",
- "Rules will appear between rows only": "Äáry pouze mezi Åádky",
- "Rules": "Äáry",
- "Spacing and padding": "Mezery a odsazovánÃ",
- "Spacing": "Mezery",
- "Summary": "ShrnutÃ",
- "TO-cell-delete": "Smazat buÅku",
- "TO-cell-insert-after": "Vložit buÅku za",
- "TO-cell-insert-before": "Vložit buÅku pÅed",
- "TO-cell-merge": "Spojit buÅky",
- "TO-cell-prop": "Vlastnosti buÅky",
- "TO-cell-split": "RozdÄlit buÅku",
- "TO-col-delete": "Smazat sloupec",
- "TO-col-insert-after": "Vložit sloupec za",
- "TO-col-insert-before": "Vložit sloupec pÅed",
- "TO-col-split": "RozdÄlit sloupec",
- "TO-row-delete": "Smazat Åádek",
- "TO-row-insert-above": "Smazat Åádek nad",
- "TO-row-insert-under": "Smazat Åádek pod",
- "TO-row-prop": "Vlastnosti Åádku",
- "TO-row-split": "RozdÄlit Åádek",
- "TO-table-prop": "Vlastnosti tabulky",
- "Table Properties": "Vlastnosti tabulky",
- "Text align": "Zarovnánà textu",
- "The bottom side only": "Pouze spodnà strana",
- "The left-hand side only": "Pouze levá strana",
- "The right and left sides only": "Pouze levá a pravá strana",
- "The right-hand side only": "Pouze pravá strana",
- "The top and bottom sides only": "Pouze hornà a dolnà strana",
- "The top side only": "Pouze hornà strana",
- "Top": "Nahoru",
- "Unset color": "Zrušit barvu",
- "Vertical align": "Svislé zarovnánÃ",
- "Width": "Å ÃÅka",
- "not-del-last-cell": "HTMLArea zbabÄle odmÃtá smazat poslednà buÅku v Åádku.",
- "not-del-last-col": "HTMLArea zbabÄle odmÃtá smazat poslednà sloupec v tabulce.",
- "not-del-last-row": "HTMLArea zbabÄle odmÃtá smazat poslednà Åádek v tabulce.",
- "percent": "procent",
- "pixels": "pixelů"
-};
+// I18N constants
+
+// LANG: "cz", ENCODING: UTF-8 | ISO-8859-2
+// Author: Jiri Löw, <jirilow at jirilow.com>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+TableOperations.I18N = {
+ "Align": "ZarovnánÃ",
+ "All four sides": "VÅ¡echny ÄtyÅi strany",
+ "Background": "PozadÃ",
+ "Baseline": "Základnà linka",
+ "Border": "Obrys",
+ "Borders": "Obrysy",
+ "Bottom": "Dolů",
+ "CSS Style": "Kaskádové styly (CSS)",
+ "Caption": "Titulek",
+ "Cell Properties": "Vlastnosti buÅky",
+ "Center": "Na stÅed",
+ "Char": "Znak",
+ "Collapsed borders": "StlaÄené okraje",
+ "Color": "Barva",
+ "Description": "Popis",
+ "FG Color": "Barva popÅedÃ",
+ "Float": "ObtékánÃ",
+ "Frames": "RámeÄky",
+ "Height": "Výška",
+ "How many columns would you like to merge?": "Kolik sloupců si pÅejete spojit?",
+ "How many rows would you like to merge?": "Kolik Åádků si pÅejete spojit?",
+ "Image URL": "Adresa obrázku",
+ "Justify": "Do stran",
+ "Layout": "RozloženÃ",
+ "Left": "Vlevo",
+ "Margin": "Okraj",
+ "Middle": "Na stÅed",
+ "No rules": "Žádné Äáry",
+ "No sides": "Žádné strany",
+ "None": "Žádné",
+ "Padding": "OdsazovánÃ",
+ "Please click into some cell": "ProsÃm kliknÄte do nÄkteré buÅky",
+ "Right": "Vpravo",
+ "Row Properties": "Vlastnosti Åádku",
+ "Rules will appear between all rows and columns": "Äáry mezi vÅ¡emi Åádky i sloupci",
+ "Rules will appear between columns only": "Äáry pouze mezi sloupci",
+ "Rules will appear between rows only": "Äáry pouze mezi Åádky",
+ "Rules": "Äáry",
+ "Spacing and padding": "Mezery a odsazovánÃ",
+ "Spacing": "Mezery",
+ "Summary": "ShrnutÃ",
+ "TO-cell-delete": "Smazat buÅku",
+ "TO-cell-insert-after": "Vložit buÅku za",
+ "TO-cell-insert-before": "Vložit buÅku pÅed",
+ "TO-cell-merge": "Spojit buÅky",
+ "TO-cell-prop": "Vlastnosti buÅky",
+ "TO-cell-split": "RozdÄlit buÅku",
+ "TO-col-delete": "Smazat sloupec",
+ "TO-col-insert-after": "Vložit sloupec za",
+ "TO-col-insert-before": "Vložit sloupec pÅed",
+ "TO-col-split": "RozdÄlit sloupec",
+ "TO-row-delete": "Smazat Åádek",
+ "TO-row-insert-above": "Smazat Åádek nad",
+ "TO-row-insert-under": "Smazat Åádek pod",
+ "TO-row-prop": "Vlastnosti Åádku",
+ "TO-row-split": "RozdÄlit Åádek",
+ "TO-table-prop": "Vlastnosti tabulky",
+ "Table Properties": "Vlastnosti tabulky",
+ "Text align": "Zarovnánà textu",
+ "The bottom side only": "Pouze spodnà strana",
+ "The left-hand side only": "Pouze levá strana",
+ "The right and left sides only": "Pouze levá a pravá strana",
+ "The right-hand side only": "Pouze pravá strana",
+ "The top and bottom sides only": "Pouze hornà a dolnà strana",
+ "The top side only": "Pouze hornà strana",
+ "Top": "Nahoru",
+ "Unset color": "Zrušit barvu",
+ "Vertical align": "Svislé zarovnánÃ",
+ "Width": "Å ÃÅka",
+ "not-del-last-cell": "HTMLArea zbabÄle odmÃtá smazat poslednà buÅku v Åádku.",
+ "not-del-last-col": "HTMLArea zbabÄle odmÃtá smazat poslednà sloupec v tabulce.",
+ "not-del-last-row": "HTMLArea zbabÄle odmÃtá smazat poslednà Åádek v tabulce.",
+ "percent": "procent",
+ "pixels": "pixelů"
+};
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/lang/da.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/da.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/da.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,90 +1,90 @@
-// I18N constants
-
-// LANG: "da", ENCODING: UTF-8 | ISO-8859-1
-// Author: Steen Sønderup, <steen at soenderup.com>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-TableOperations.I18N = {
- "Align": "Placer",
- "All four sides": "Alle fire sider",
- "Background": "Baggrund",
- "Baseline": "Bundlinie",
- "Border": "Kant",
- "Borders": "Kanter",
- "Bottom": "Bund",
- "CSS Style": "Stil [CSS]",
- "Caption": "Titel",
- "Cell Properties": "Celle egenskaber",
- "Center": "Centrer",
- "Char": "Plads",
- "Collapsed borders": "Sammensmelt rammer",
- "Color": "Farve",
- "Description": "Beskrivelse",
- "FG Color": "Font farve",
- "Float": "Justering",
- "Frames": "Udvendig",
- "Height": "Højde",
- "How many columns would you like to merge?": "Hvor mange kollonner vil du samle?",
- "How many rows would you like to merge?": "Hvor mange rækker vil du samle?",
- "Image URL": "Billede URL",
- "Justify": "Lige margener",
- "Layout": "Opsætning",
- "Left": "Venstre",
- "Margin": "Margen",
- "Middle": "Centrer",
- "No rules": "Ingen rammer",
- "No sides": "Ingen sider",
- "None": "Ingen",
- "Padding": "Margen",
- "Please click into some cell": "Klik på en celle",
- "Right": "Højre",
- "Row Properties": "Række egenskaber",
- "Rules will appear between all rows and columns": "Rammer mellem rækker og kolonner",
- "Rules will appear between columns only": "Kun rammer mellem kolonner",
- "Rules will appear between rows only": "Kun rammer mellem rækker",
- "Rules": "Invendig",
- "Spacing and padding": "Afstand og margen",
- "Spacing": "Afstand",
- "Summary": "Beskrivelse",
- "TO-cell-delete": "Slet celle",
- "TO-cell-insert-after": "Indsæt celle efter",
- "TO-cell-insert-before": "Indsæt celle før",
- "TO-cell-merge": "Sammensæt celler",
- "TO-cell-prop": "Celle egenskaber",
- "TO-cell-split": "Opdel celle",
- "TO-col-delete": "Slet kollonne",
- "TO-col-insert-after": "Indsæt kolonne efter",
- "TO-col-insert-before": "Indsæt kolonne før",
- "TO-col-split": "Opdel kolonne",
- "TO-row-delete": "Slet række",
- "TO-row-insert-above": "Indsæt række før",
- "TO-row-insert-under": "Indsæt række efter",
- "TO-row-prop": "Række egenskaber",
- "TO-row-split": "Opdel række",
- "TO-table-prop": "Tabel egenskaber",
- "Table Properties": "Tabel egenskaber",
- "Text align": "Tekst",
- "The bottom side only": "Kun i bunden",
- "The left-hand side only": "Kun i højre side",
- "The right and left sides only": "Kun i siderne",
- "The right-hand side only": "Kun i venstre side",
- "The top and bottom sides only": "Kun i top og bund",
- "The top side only": "Kun i toppen",
- "Top": "Top",
- "Unset color": "Farve ikke valgt",
- "Vertical align": "Vertikal placering",
- "Width": "Bredde",
- "not-del-last-cell": "Du kan ikke slette den sidste celle i en række.",
- "not-del-last-col": "Du kan ikke slette den sidste kolonne i en tabel.",
- "not-del-last-row": "Du kan ikke slette den sidste række i en tabel.",
- "percent": "procent",
- "pixels": "pixel"
-};
+// I18N constants
+
+// LANG: "da", ENCODING: UTF-8 | ISO-8859-1
+// Author: Steen Sønderup, <steen at soenderup.com>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+TableOperations.I18N = {
+ "Align": "Placer",
+ "All four sides": "Alle fire sider",
+ "Background": "Baggrund",
+ "Baseline": "Bundlinie",
+ "Border": "Kant",
+ "Borders": "Kanter",
+ "Bottom": "Bund",
+ "CSS Style": "Stil [CSS]",
+ "Caption": "Titel",
+ "Cell Properties": "Celle egenskaber",
+ "Center": "Centrer",
+ "Char": "Plads",
+ "Collapsed borders": "Sammensmelt rammer",
+ "Color": "Farve",
+ "Description": "Beskrivelse",
+ "FG Color": "Font farve",
+ "Float": "Justering",
+ "Frames": "Udvendig",
+ "Height": "Højde",
+ "How many columns would you like to merge?": "Hvor mange kollonner vil du samle?",
+ "How many rows would you like to merge?": "Hvor mange rækker vil du samle?",
+ "Image URL": "Billede URL",
+ "Justify": "Lige margener",
+ "Layout": "Opsætning",
+ "Left": "Venstre",
+ "Margin": "Margen",
+ "Middle": "Centrer",
+ "No rules": "Ingen rammer",
+ "No sides": "Ingen sider",
+ "None": "Ingen",
+ "Padding": "Margen",
+ "Please click into some cell": "Klik på en celle",
+ "Right": "Højre",
+ "Row Properties": "Række egenskaber",
+ "Rules will appear between all rows and columns": "Rammer mellem rækker og kolonner",
+ "Rules will appear between columns only": "Kun rammer mellem kolonner",
+ "Rules will appear between rows only": "Kun rammer mellem rækker",
+ "Rules": "Invendig",
+ "Spacing and padding": "Afstand og margen",
+ "Spacing": "Afstand",
+ "Summary": "Beskrivelse",
+ "TO-cell-delete": "Slet celle",
+ "TO-cell-insert-after": "Indsæt celle efter",
+ "TO-cell-insert-before": "Indsæt celle før",
+ "TO-cell-merge": "Sammensæt celler",
+ "TO-cell-prop": "Celle egenskaber",
+ "TO-cell-split": "Opdel celle",
+ "TO-col-delete": "Slet kollonne",
+ "TO-col-insert-after": "Indsæt kolonne efter",
+ "TO-col-insert-before": "Indsæt kolonne før",
+ "TO-col-split": "Opdel kolonne",
+ "TO-row-delete": "Slet række",
+ "TO-row-insert-above": "Indsæt række før",
+ "TO-row-insert-under": "Indsæt række efter",
+ "TO-row-prop": "Række egenskaber",
+ "TO-row-split": "Opdel række",
+ "TO-table-prop": "Tabel egenskaber",
+ "Table Properties": "Tabel egenskaber",
+ "Text align": "Tekst",
+ "The bottom side only": "Kun i bunden",
+ "The left-hand side only": "Kun i højre side",
+ "The right and left sides only": "Kun i siderne",
+ "The right-hand side only": "Kun i venstre side",
+ "The top and bottom sides only": "Kun i top og bund",
+ "The top side only": "Kun i toppen",
+ "Top": "Top",
+ "Unset color": "Farve ikke valgt",
+ "Vertical align": "Vertikal placering",
+ "Width": "Bredde",
+ "not-del-last-cell": "Du kan ikke slette den sidste celle i en række.",
+ "not-del-last-col": "Du kan ikke slette den sidste kolonne i en tabel.",
+ "not-del-last-row": "Du kan ikke slette den sidste række i en tabel.",
+ "percent": "procent",
+ "pixels": "pixel"
+};
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/lang/de.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/de.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/de.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,81 +1,81 @@
-// I18N constants
-
-// LANG: "de", ENCODING: UTF-8 | ISO-8859-1
-// Author: broxx, <broxx at broxx.com>
-
-TableOperations.I18N = {
- "Align": "Ausrichten",
- "All four sides": "Alle 4 Seiten",
- "Background": "Hintergrund",
- "Baseline": "Basislinie",
- "Border": "Rand",
- "Borders": "Raender",
- "Bottom": "Unten",
- "CSS Style": "Style [CSS]",
- "Caption": "Ueberschrift",
- "Cell Properties": "Zellen",
- "Center": "Zentrieren",
- "Char": "Zeichen",
- "Collapsed borders": "Collapsed borders",
- "Color": "Farbe",
- "Description": "Beschreibung",
- "FG Color": "FG Farbe",
- "Float": "Ausrichtung",
- "Frames": "Rahmen",
- "Height": "Hoehe",
- "How many columns would you like to merge?": "Wieviele Spalten willst du verbinden?",
- "How many rows would you like to merge?": "Wieviele Zeilen willst du verbinden?",
- "Image URL": "Bild URL",
- "Justify": "Justieren",
- "Layout": "Layout",
- "Left": "Links",
- "Margin": "Rand",
- "Middle": "Mitte",
- "No rules": "Keine Balken",
- "No sides": "Keine Seiten",
- "None": "Keine",
- "Padding": "Auffuellung",
- "Please click into some cell": "Waehle eine Zelle",
- "Right": "Rechts",
- "Row Properties": "Reihen",
- "Rules will appear between all rows and columns": "Balken zwischen Reihen und Spalten",
- "Rules will appear between columns only": "Balken zwischen Spalten",
- "Rules will appear between rows only": "Balken zwischen Reihen",
- "Rules": "Balken",
- "Spacing and padding": "Abstaende",
- "Spacing": "Abstand",
- "Summary": "Zusammenfassung",
- "TO-cell-delete": "Zelle loeschen",
- "TO-cell-insert-after": "Zelle einfuegen nach",
- "TO-cell-insert-before": "Zelle einfuegen bevor",
- "TO-cell-merge": "Zellen zusammenfuegen",
- "TO-cell-prop": "Zelleinstellungen",
- "TO-cell-split": "Zellen aufteilen",
- "TO-col-delete": "Spalte loeschen",
- "TO-col-insert-after": "Spalte einfuegen nach",
- "TO-col-insert-before": "Spalte einfuegen bevor",
- "TO-col-split": "Spalte aufteilen",
- "TO-row-delete": "Reihe loeschen",
- "TO-row-insert-above": "Reihe einfuegen vor",
- "TO-row-insert-under": "Reihe einfuegen nach",
- "TO-row-prop": "Reiheneinstellungen",
- "TO-row-split": "Reihen aufteilen",
- "TO-table-prop": "Tabelle",
- "Table Properties": "Tabelle",
- "Text align": "Ausrichtung",
- "The bottom side only": "Nur untere Seite",
- "The left-hand side only": "Nur linke Seite",
- "The right and left sides only": "Nur linke und rechte Seite",
- "The right-hand side only": "Nur rechte Seite",
- "The top and bottom sides only": "Nur obere und untere Seite",
- "The top side only": "Nur obere Seite",
- "Top": "Oben",
- "Unset color": "Farbe",
- "Vertical align": "Ausrichtung",
- "Width": "Breite",
- "not-del-last-cell": "Letzte Zelle in dieser Reihe!",
- "not-del-last-col": "Letzte Spalte in dieser Tabelle!",
- "not-del-last-row": "Letzte Reihe in dieser Tabelle",
- "percent": "%",
- "pixels": "pixels"
-};
+// I18N constants
+
+// LANG: "de", ENCODING: UTF-8 | ISO-8859-1
+// Author: broxx, <broxx at broxx.com>
+
+TableOperations.I18N = {
+ "Align": "Ausrichten",
+ "All four sides": "Alle 4 Seiten",
+ "Background": "Hintergrund",
+ "Baseline": "Basislinie",
+ "Border": "Rand",
+ "Borders": "Raender",
+ "Bottom": "Unten",
+ "CSS Style": "Style [CSS]",
+ "Caption": "Ueberschrift",
+ "Cell Properties": "Zellen",
+ "Center": "Zentrieren",
+ "Char": "Zeichen",
+ "Collapsed borders": "Collapsed borders",
+ "Color": "Farbe",
+ "Description": "Beschreibung",
+ "FG Color": "FG Farbe",
+ "Float": "Ausrichtung",
+ "Frames": "Rahmen",
+ "Height": "Hoehe",
+ "How many columns would you like to merge?": "Wieviele Spalten willst du verbinden?",
+ "How many rows would you like to merge?": "Wieviele Zeilen willst du verbinden?",
+ "Image URL": "Bild URL",
+ "Justify": "Justieren",
+ "Layout": "Layout",
+ "Left": "Links",
+ "Margin": "Rand",
+ "Middle": "Mitte",
+ "No rules": "Keine Balken",
+ "No sides": "Keine Seiten",
+ "None": "Keine",
+ "Padding": "Auffuellung",
+ "Please click into some cell": "Waehle eine Zelle",
+ "Right": "Rechts",
+ "Row Properties": "Reihen",
+ "Rules will appear between all rows and columns": "Balken zwischen Reihen und Spalten",
+ "Rules will appear between columns only": "Balken zwischen Spalten",
+ "Rules will appear between rows only": "Balken zwischen Reihen",
+ "Rules": "Balken",
+ "Spacing and padding": "Abstaende",
+ "Spacing": "Abstand",
+ "Summary": "Zusammenfassung",
+ "TO-cell-delete": "Zelle loeschen",
+ "TO-cell-insert-after": "Zelle einfuegen nach",
+ "TO-cell-insert-before": "Zelle einfuegen bevor",
+ "TO-cell-merge": "Zellen zusammenfuegen",
+ "TO-cell-prop": "Zelleinstellungen",
+ "TO-cell-split": "Zellen aufteilen",
+ "TO-col-delete": "Spalte loeschen",
+ "TO-col-insert-after": "Spalte einfuegen nach",
+ "TO-col-insert-before": "Spalte einfuegen bevor",
+ "TO-col-split": "Spalte aufteilen",
+ "TO-row-delete": "Reihe loeschen",
+ "TO-row-insert-above": "Reihe einfuegen vor",
+ "TO-row-insert-under": "Reihe einfuegen nach",
+ "TO-row-prop": "Reiheneinstellungen",
+ "TO-row-split": "Reihen aufteilen",
+ "TO-table-prop": "Tabelle",
+ "Table Properties": "Tabelle",
+ "Text align": "Ausrichtung",
+ "The bottom side only": "Nur untere Seite",
+ "The left-hand side only": "Nur linke Seite",
+ "The right and left sides only": "Nur linke und rechte Seite",
+ "The right-hand side only": "Nur rechte Seite",
+ "The top and bottom sides only": "Nur obere und untere Seite",
+ "The top side only": "Nur obere Seite",
+ "Top": "Oben",
+ "Unset color": "Farbe",
+ "Vertical align": "Ausrichtung",
+ "Width": "Breite",
+ "not-del-last-cell": "Letzte Zelle in dieser Reihe!",
+ "not-del-last-col": "Letzte Spalte in dieser Tabelle!",
+ "not-del-last-row": "Letzte Reihe in dieser Tabelle",
+ "percent": "%",
+ "pixels": "pixels"
+};
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/lang/el.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/el.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/el.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,81 +1,81 @@
-// I18N constants
-
-// LANG: "el", ENCODING: UTF-8 | ISO-8859-7
-// Author: Dimitris Glezos, dimitris at glezos.com
-
-TableOperations.I18N = {
- "Align": "ΣÏοίÏηÏη",
- "All four sides": "Îαι οι 4 ÏλεÏ
ÏÎÏ",
- "Background": "ΦÏνÏο",
- "Baseline": "Baseline",
- "Border": "ΠεÏίγÏαμμα",
- "Borders": "ΠεÏιγÏάμμαÏα",
- "Bottom": "ÎάÏÏ Î¼ÎÏοÏ",
- "CSS Style": "ΣÏÏ
λ [CSS]",
- "Caption": "ÎεζάνÏα",
- "Cell Properties": "ÎδιÏÏηÏÎµÏ ÎελιοÏ",
- "Center": "ÎÎνÏÏο",
- "Char": "ΧαÏακÏήÏαÏ",
- "Collapsed borders": "ΣÏ
μÏÏÏ
γμÎνα ÏεÏιγÏάμμαÏα",
- "Color": "ΧÏÏμα",
- "Description": "ΠεÏιγÏαÏή",
- "FG Color": "ΧÏÏμα ανÏικειμÎνÏν",
- "Float": "Float",
- "Frames": "Frames",
- "Height": "ÎÏοÏ",
- "How many columns would you like to merge?": "Î ÏÏÎµÏ ÏÏÎ®Î»ÎµÏ Î¸ÎλεÏε να ενÏÏεÏε;",
- "How many rows would you like to merge?": "Î ÏÏÎµÏ Î³ÏαμμÎÏ Î¸ÎλεÏε να ενÏÏεÏε;",
- "Image URL": "URL εικÏναÏ",
- "Justify": "ΠλήÏÎ·Ï ÏÏοίÏηÏη",
- "Layout": "ÎιάÏαξη",
- "Left": "ÎÏιÏÏεÏά",
- "Margin": "ΠεÏιθÏÏιο",
- "Middle": "ÎÎνÏÏο",
- "No rules": "ΧÏÏÎ¯Ï ÎÏαμμÎÏ",
- "No sides": "No sides",
- "None": "ΤίÏοÏα",
- "Padding": "ÎÏοÏή",
- "Please click into some cell": "ÎάνÏε κλικ μÎÏα Ïε κάÏοιο κελί",
- "Right": "Îεξιά",
- "Row Properties": "ÎδιÏÏηÏÎµÏ ÎÏαμμήÏ",
- "Rules will appear between all rows and columns": "ÎÏαμμÎÏ Î¸Î± εμÏανίζονÏαι μεÏÎ±Î¾Ï ÏλÏν ÏÏν γÏαμμÏν και ÏÏηλÏν",
- "Rules will appear between columns only": "ÎÏαμμÎÏ Î¸Î± εμÏανίζονÏαι μÏνο μεÏÎ±Î¾Ï ÏÏηλÏν",
- "Rules will appear between rows only": "ÎÏαμμÎÏ Î¸Î± εμÏανίζονÏαι μÏνο μεÏÎ±Î¾Ï Î³ÏαμμÏν",
- "Rules": "ÎÏαμμÎÏ",
- "Spacing and padding": "ÎÏοÏÏάÏÎµÎ¹Ï ÎºÎ±Î¹ εÏοÏÎÏ",
- "Spacing": "ÎÏοÏÏάÏειÏ",
- "Summary": "ΣÏνοÏη",
- "TO-cell-delete": "ÎιαγÏαÏή κελιοÏ",
- "TO-cell-insert-after": "ÎιÏαγÏγή ÎºÎµÎ»Î¹Î¿Ï Î¼ÎµÏά",
- "TO-cell-insert-before": "ÎιÏαγÏγή ÎºÎµÎ»Î¹Î¿Ï ÏÏιν",
- "TO-cell-merge": "ΣÏ
γÏÏνεÏ
Ïη κελιÏν",
- "TO-cell-prop": "ÎδιÏÏηÏÎµÏ ÎºÎµÎ»Î¹Î¿Ï",
- "TO-cell-split": "ÎιαίÏεÏη κελιοÏ",
- "TO-col-delete": "ÎιαγÏαÏή ÏÏήληÏ",
- "TO-col-insert-after": "ÎιÏαγÏγή ÏÏÎ®Î»Î·Ï Î¼ÎµÏά",
- "TO-col-insert-before": "ÎιÏαγÏγή ÏÏÎ®Î»Î·Ï ÏÏιν",
- "TO-col-split": "ÎιαίÏεÏη ÏÏήληÏ",
- "TO-row-delete": "ÎιαγÏαÏή γÏαμμήÏ",
- "TO-row-insert-above": "ÎιÏαγÏγή γÏÎ±Î¼Î¼Î®Ï Î¼ÎµÏά",
- "TO-row-insert-under": "ÎιÏαγÏγή γÏÎ±Î¼Î¼Î®Ï ÏÏιν",
- "TO-row-prop": "ÎδιÏÏηÏÎµÏ Î³ÏαμμήÏ",
- "TO-row-split": "ÎιαίÏεÏη γÏαμμήÏ",
- "TO-table-prop": "ÎδιÏÏηÏÎµÏ Ïίνακα",
- "Table Properties": "ÎδιÏÏηÏÎµÏ Ïίνακα",
- "Text align": "ΣÏοίÏηÏη κειμÎνοÏ
",
- "The bottom side only": "ΠκάÏÏ ÏλεÏ
Ïά μÏνο",
- "The left-hand side only": "ΠαÏιÏÏεÏή ÏλεÏ
Ïά μÏνο",
- "The right and left sides only": "Îι δεξιÎÏ ÎºÎ±Î¹ αÏιÏÏεÏÎÏ ÏλεÏ
ÏÎÏ Î¼Ïνο",
- "The right-hand side only": "Πδεξιά ÏλεÏ
Ïά μÏνο",
- "The top and bottom sides only": "Îι ÏÎ¬Î½Ï ÎºÎ±Î¹ κάÏÏ ÏλεÏ
ÏÎÏ Î¼Ïνο",
- "The top side only": "Î ÏÎ¬Î½Ï ÏλεÏ
Ïά μÏνο",
- "Top": "ΠάνÏ",
- "Unset color": "ÎναίÏεÏη ÏÏÏμαÏοÏ",
- "Vertical align": "ÎαÏακÏÏÏ
Ïη ÏÏοίÏηÏη",
- "Width": "ΠλάÏοÏ",
- "not-del-last-cell": "Îεν μÏοÏεί να διαγÏαÏεί Ïο ÏελεÏ
Ïαίο κελί Ïε μια γÏαμμή.",
- "not-del-last-col": "Îεν μÏοÏεί να διαγÏαÏεί η ÏελεÏ
Ïαία ÏÏήλη Ïε Îνα Ïίνακα.",
- "not-del-last-row": "Îεν μÏοÏεί να διαγÏαÏεί η ÏελεÏ
Ïαία γÏαμμή Ïε Îνα Ïίνακα.",
- "percent": "ÏÎ¿Î¹Ï ÎµÎºÎ±ÏÏν",
- "pixels": "pixels"
-};
+// I18N constants
+
+// LANG: "el", ENCODING: UTF-8 | ISO-8859-7
+// Author: Dimitris Glezos, dimitris at glezos.com
+
+TableOperations.I18N = {
+ "Align": "ΣÏοίÏηÏη",
+ "All four sides": "Îαι οι 4 ÏλεÏ
ÏÎÏ",
+ "Background": "ΦÏνÏο",
+ "Baseline": "Baseline",
+ "Border": "ΠεÏίγÏαμμα",
+ "Borders": "ΠεÏιγÏάμμαÏα",
+ "Bottom": "ÎάÏÏ Î¼ÎÏοÏ",
+ "CSS Style": "ΣÏÏ
λ [CSS]",
+ "Caption": "ÎεζάνÏα",
+ "Cell Properties": "ÎδιÏÏηÏÎµÏ ÎελιοÏ",
+ "Center": "ÎÎνÏÏο",
+ "Char": "ΧαÏακÏήÏαÏ",
+ "Collapsed borders": "ΣÏ
μÏÏÏ
γμÎνα ÏεÏιγÏάμμαÏα",
+ "Color": "ΧÏÏμα",
+ "Description": "ΠεÏιγÏαÏή",
+ "FG Color": "ΧÏÏμα ανÏικειμÎνÏν",
+ "Float": "Float",
+ "Frames": "Frames",
+ "Height": "ÎÏοÏ",
+ "How many columns would you like to merge?": "Î ÏÏÎµÏ ÏÏÎ®Î»ÎµÏ Î¸ÎλεÏε να ενÏÏεÏε;",
+ "How many rows would you like to merge?": "Î ÏÏÎµÏ Î³ÏαμμÎÏ Î¸ÎλεÏε να ενÏÏεÏε;",
+ "Image URL": "URL εικÏναÏ",
+ "Justify": "ΠλήÏÎ·Ï ÏÏοίÏηÏη",
+ "Layout": "ÎιάÏαξη",
+ "Left": "ÎÏιÏÏεÏά",
+ "Margin": "ΠεÏιθÏÏιο",
+ "Middle": "ÎÎνÏÏο",
+ "No rules": "ΧÏÏÎ¯Ï ÎÏαμμÎÏ",
+ "No sides": "No sides",
+ "None": "ΤίÏοÏα",
+ "Padding": "ÎÏοÏή",
+ "Please click into some cell": "ÎάνÏε κλικ μÎÏα Ïε κάÏοιο κελί",
+ "Right": "Îεξιά",
+ "Row Properties": "ÎδιÏÏηÏÎµÏ ÎÏαμμήÏ",
+ "Rules will appear between all rows and columns": "ÎÏαμμÎÏ Î¸Î± εμÏανίζονÏαι μεÏÎ±Î¾Ï ÏλÏν ÏÏν γÏαμμÏν και ÏÏηλÏν",
+ "Rules will appear between columns only": "ÎÏαμμÎÏ Î¸Î± εμÏανίζονÏαι μÏνο μεÏÎ±Î¾Ï ÏÏηλÏν",
+ "Rules will appear between rows only": "ÎÏαμμÎÏ Î¸Î± εμÏανίζονÏαι μÏνο μεÏÎ±Î¾Ï Î³ÏαμμÏν",
+ "Rules": "ÎÏαμμÎÏ",
+ "Spacing and padding": "ÎÏοÏÏάÏÎµÎ¹Ï ÎºÎ±Î¹ εÏοÏÎÏ",
+ "Spacing": "ÎÏοÏÏάÏειÏ",
+ "Summary": "ΣÏνοÏη",
+ "TO-cell-delete": "ÎιαγÏαÏή κελιοÏ",
+ "TO-cell-insert-after": "ÎιÏαγÏγή ÎºÎµÎ»Î¹Î¿Ï Î¼ÎµÏά",
+ "TO-cell-insert-before": "ÎιÏαγÏγή ÎºÎµÎ»Î¹Î¿Ï ÏÏιν",
+ "TO-cell-merge": "ΣÏ
γÏÏνεÏ
Ïη κελιÏν",
+ "TO-cell-prop": "ÎδιÏÏηÏÎµÏ ÎºÎµÎ»Î¹Î¿Ï",
+ "TO-cell-split": "ÎιαίÏεÏη κελιοÏ",
+ "TO-col-delete": "ÎιαγÏαÏή ÏÏήληÏ",
+ "TO-col-insert-after": "ÎιÏαγÏγή ÏÏÎ®Î»Î·Ï Î¼ÎµÏά",
+ "TO-col-insert-before": "ÎιÏαγÏγή ÏÏÎ®Î»Î·Ï ÏÏιν",
+ "TO-col-split": "ÎιαίÏεÏη ÏÏήληÏ",
+ "TO-row-delete": "ÎιαγÏαÏή γÏαμμήÏ",
+ "TO-row-insert-above": "ÎιÏαγÏγή γÏÎ±Î¼Î¼Î®Ï Î¼ÎµÏά",
+ "TO-row-insert-under": "ÎιÏαγÏγή γÏÎ±Î¼Î¼Î®Ï ÏÏιν",
+ "TO-row-prop": "ÎδιÏÏηÏÎµÏ Î³ÏαμμήÏ",
+ "TO-row-split": "ÎιαίÏεÏη γÏαμμήÏ",
+ "TO-table-prop": "ÎδιÏÏηÏÎµÏ Ïίνακα",
+ "Table Properties": "ÎδιÏÏηÏÎµÏ Ïίνακα",
+ "Text align": "ΣÏοίÏηÏη κειμÎνοÏ
",
+ "The bottom side only": "ΠκάÏÏ ÏλεÏ
Ïά μÏνο",
+ "The left-hand side only": "ΠαÏιÏÏεÏή ÏλεÏ
Ïά μÏνο",
+ "The right and left sides only": "Îι δεξιÎÏ ÎºÎ±Î¹ αÏιÏÏεÏÎÏ ÏλεÏ
ÏÎÏ Î¼Ïνο",
+ "The right-hand side only": "Πδεξιά ÏλεÏ
Ïά μÏνο",
+ "The top and bottom sides only": "Îι ÏÎ¬Î½Ï ÎºÎ±Î¹ κάÏÏ ÏλεÏ
ÏÎÏ Î¼Ïνο",
+ "The top side only": "Î ÏÎ¬Î½Ï ÏλεÏ
Ïά μÏνο",
+ "Top": "ΠάνÏ",
+ "Unset color": "ÎναίÏεÏη ÏÏÏμαÏοÏ",
+ "Vertical align": "ÎαÏακÏÏÏ
Ïη ÏÏοίÏηÏη",
+ "Width": "ΠλάÏοÏ",
+ "not-del-last-cell": "Îεν μÏοÏεί να διαγÏαÏεί Ïο ÏελεÏ
Ïαίο κελί Ïε μια γÏαμμή.",
+ "not-del-last-col": "Îεν μÏοÏεί να διαγÏαÏεί η ÏελεÏ
Ïαία ÏÏήλη Ïε Îνα Ïίνακα.",
+ "not-del-last-row": "Îεν μÏοÏεί να διαγÏαÏεί η ÏελεÏ
Ïαία γÏαμμή Ïε Îνα Ïίνακα.",
+ "percent": "ÏÎ¿Î¹Ï ÎµÎºÎ±ÏÏν",
+ "pixels": "pixels"
+};
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/lang/en.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/en.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/en.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,90 +1,90 @@
-// I18N constants
-
-// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
-// Author: Mihai Bazon, http://dynarch.com/mishoo
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-TableOperations.I18N = {
- "Align": "Align",
- "All four sides": "All four sides",
- "Background": "Background",
- "Baseline": "Baseline",
- "Border": "Border",
- "Borders": "Borders",
- "Bottom": "Bottom",
- "CSS Style": "Style [CSS]",
- "Caption": "Caption",
- "Cell Properties": "Cell Properties",
- "Center": "Center",
- "Char": "Char",
- "Collapsed borders": "Collapsed borders",
- "Color": "Color",
- "Description": "Description",
- "FG Color": "FG Color",
- "Float": "Float",
- "Frames": "Frames",
- "Height": "Height",
- "How many columns would you like to merge?": "How many columns would you like to merge?",
- "How many rows would you like to merge?": "How many rows would you like to merge?",
- "Image URL": "Image URL",
- "Justify": "Justify",
- "Layout": "Layout",
- "Left": "Left",
- "Margin": "Margin",
- "Middle": "Middle",
- "No rules": "No rules",
- "No sides": "No sides",
- "None": "None",
- "Padding": "Padding",
- "Please click into some cell": "Please click into some cell",
- "Right": "Right",
- "Row Properties": "Row Properties",
- "Rules will appear between all rows and columns": "Rules will appear between all rows and columns",
- "Rules will appear between columns only": "Rules will appear between columns only",
- "Rules will appear between rows only": "Rules will appear between rows only",
- "Rules": "Rules",
- "Spacing and padding": "Spacing and padding",
- "Spacing": "Spacing",
- "Summary": "Summary",
- "TO-cell-delete": "Delete cell",
- "TO-cell-insert-after": "Insert cell after",
- "TO-cell-insert-before": "Insert cell before",
- "TO-cell-merge": "Merge cells",
- "TO-cell-prop": "Cell properties",
- "TO-cell-split": "Split cell",
- "TO-col-delete": "Delete column",
- "TO-col-insert-after": "Insert column after",
- "TO-col-insert-before": "Insert column before",
- "TO-col-split": "Split column",
- "TO-row-delete": "Delete row",
- "TO-row-insert-above": "Insert row before",
- "TO-row-insert-under": "Insert row after",
- "TO-row-prop": "Row properties",
- "TO-row-split": "Split row",
- "TO-table-prop": "Table properties",
- "Table Properties": "Table Properties",
- "Text align": "Text align",
- "The bottom side only": "The bottom side only",
- "The left-hand side only": "The left-hand side only",
- "The right and left sides only": "The right and left sides only",
- "The right-hand side only": "The right-hand side only",
- "The top and bottom sides only": "The top and bottom sides only",
- "The top side only": "The top side only",
- "Top": "Top",
- "Unset color": "Unset color",
- "Vertical align": "Vertical align",
- "Width": "Width",
- "not-del-last-cell": "HTMLArea cowardly refuses to delete the last cell in row.",
- "not-del-last-col": "HTMLArea cowardly refuses to delete the last column in table.",
- "not-del-last-row": "HTMLArea cowardly refuses to delete the last row in table.",
- "percent": "percent",
- "pixels": "pixels"
-};
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+TableOperations.I18N = {
+ "Align": "Align",
+ "All four sides": "All four sides",
+ "Background": "Background",
+ "Baseline": "Baseline",
+ "Border": "Border",
+ "Borders": "Borders",
+ "Bottom": "Bottom",
+ "CSS Style": "Style [CSS]",
+ "Caption": "Caption",
+ "Cell Properties": "Cell Properties",
+ "Center": "Center",
+ "Char": "Char",
+ "Collapsed borders": "Collapsed borders",
+ "Color": "Color",
+ "Description": "Description",
+ "FG Color": "FG Color",
+ "Float": "Float",
+ "Frames": "Frames",
+ "Height": "Height",
+ "How many columns would you like to merge?": "How many columns would you like to merge?",
+ "How many rows would you like to merge?": "How many rows would you like to merge?",
+ "Image URL": "Image URL",
+ "Justify": "Justify",
+ "Layout": "Layout",
+ "Left": "Left",
+ "Margin": "Margin",
+ "Middle": "Middle",
+ "No rules": "No rules",
+ "No sides": "No sides",
+ "None": "None",
+ "Padding": "Padding",
+ "Please click into some cell": "Please click into some cell",
+ "Right": "Right",
+ "Row Properties": "Row Properties",
+ "Rules will appear between all rows and columns": "Rules will appear between all rows and columns",
+ "Rules will appear between columns only": "Rules will appear between columns only",
+ "Rules will appear between rows only": "Rules will appear between rows only",
+ "Rules": "Rules",
+ "Spacing and padding": "Spacing and padding",
+ "Spacing": "Spacing",
+ "Summary": "Summary",
+ "TO-cell-delete": "Delete cell",
+ "TO-cell-insert-after": "Insert cell after",
+ "TO-cell-insert-before": "Insert cell before",
+ "TO-cell-merge": "Merge cells",
+ "TO-cell-prop": "Cell properties",
+ "TO-cell-split": "Split cell",
+ "TO-col-delete": "Delete column",
+ "TO-col-insert-after": "Insert column after",
+ "TO-col-insert-before": "Insert column before",
+ "TO-col-split": "Split column",
+ "TO-row-delete": "Delete row",
+ "TO-row-insert-above": "Insert row before",
+ "TO-row-insert-under": "Insert row after",
+ "TO-row-prop": "Row properties",
+ "TO-row-split": "Split row",
+ "TO-table-prop": "Table properties",
+ "Table Properties": "Table Properties",
+ "Text align": "Text align",
+ "The bottom side only": "The bottom side only",
+ "The left-hand side only": "The left-hand side only",
+ "The right and left sides only": "The right and left sides only",
+ "The right-hand side only": "The right-hand side only",
+ "The top and bottom sides only": "The top and bottom sides only",
+ "The top side only": "The top side only",
+ "Top": "Top",
+ "Unset color": "Unset color",
+ "Vertical align": "Vertical align",
+ "Width": "Width",
+ "not-del-last-cell": "HTMLArea cowardly refuses to delete the last cell in row.",
+ "not-del-last-col": "HTMLArea cowardly refuses to delete the last column in table.",
+ "not-del-last-row": "HTMLArea cowardly refuses to delete the last row in table.",
+ "percent": "percent",
+ "pixels": "pixels"
+};
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/lang/fi.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/fi.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/fi.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,66 +1,66 @@
-TableOperations.I18N = {
- "Align": "Kohdistus",
- "All four sides": "Kaikki neljä sivua",
- "Background": "Tausta",
- "Baseline": "Takaraja",
- "Border": "Reuna",
- "Borders": "Reunat",
- "Bottom": "Alle",
- "CSS Style": "Tyyli [CSS]",
- "Caption": "Otsikko",
- "Cell Properties": "Solun asetukset",
- "Center": "Keskelle",
- "Char": "Merkki",
- "Collapsed borders": "Luhistetut reunat",
- "Color": "Väri",
- "Description": "Kuvaus",
- "FG Color": "FG Väri",
- "Frames": "Kehykset",
- "Image URL": "Kuvan osoite",
- "Layout": "Sommittelu",
- "Left": "Vasen",
- "Margin": "Marginaali",
- "Middle": "Keskelle",
- "No rules": "Ei viivoja",
- "No sides": "Ei sivuja",
- "Padding": "Palstantäyte",
- "Right": "Oikea",
- "Row Properties": "Rivin asetukset",
- "Rules will appear between all rows and columns": "Viivat jokaisen rivin ja sarakkeen välillä",
- "Rules will appear between columns only": "Viivat ainoastaan sarakkeiden välillä",
- "Rules will appear between rows only": "Viivat ainoastaan rivien välillä",
- "Rules": "Viivat",
- "Spacing": "Palstatila",
- "Summary": "Yhteenveto",
- "TO-cell-delete": "Poista solu",
- "TO-cell-insert-after": "Lisää solu perään",
- "TO-cell-insert-before": "Lisää solu ennen",
- "TO-cell-merge": "Yhdistä solut",
- "TO-cell-prop": "Solun asetukset",
- "TO-cell-split": "Jaa solu",
- "TO-col-delete": "Poista sarake",
- "TO-col-insert-after": "Lisää sarake perään",
- "TO-col-insert-before": "Lisää sarake ennen",
- "TO-col-split": "Jaa sarake",
- "TO-row-delete": "Poista rivi",
- "TO-row-insert-above": "Lisää rivi yläpuolelle",
- "TO-row-insert-under": "Lisää rivi alapuolelle",
- "TO-row-prop": "Rivin asetukset",
- "TO-row-split": "Jaa rivi",
- "TO-table-prop": "Taulukon asetukset",
- "Top": "Ylös",
- "Table Properties": "Taulukon asetukset",
- "The bottom side only": "Ainoastaan alapuolelle",
- "The left-hand side only": "Ainoastaan vasenreuna",
- "The right and left sides only": "Oikea- ja vasenreuna",
- "The right-hand side only": "Ainoastaan oikeareuna",
- "The top and bottom sides only": "Ylä- ja alapuoli.",
- "The top side only": "Ainoastaan yläpuoli",
- "Vertical align": "Vertikaali kohdistus",
- "Width": "Leveys",
- "not-del-last-cell": "Ei voida poistaa viimeistä solua rivistä.",
- "not-del-last-col": "Ei voida poistaa viimeistä saraketta taulusta.",
- "not-del-last-row": "Ei voida poistaa viimeistä riviä taulusta.",
- "percent": "prosenttia",
- "pixels": "pikseliä"
-};
+TableOperations.I18N = {
+ "Align": "Kohdistus",
+ "All four sides": "Kaikki neljä sivua",
+ "Background": "Tausta",
+ "Baseline": "Takaraja",
+ "Border": "Reuna",
+ "Borders": "Reunat",
+ "Bottom": "Alle",
+ "CSS Style": "Tyyli [CSS]",
+ "Caption": "Otsikko",
+ "Cell Properties": "Solun asetukset",
+ "Center": "Keskelle",
+ "Char": "Merkki",
+ "Collapsed borders": "Luhistetut reunat",
+ "Color": "Väri",
+ "Description": "Kuvaus",
+ "FG Color": "FG Väri",
+ "Frames": "Kehykset",
+ "Image URL": "Kuvan osoite",
+ "Layout": "Sommittelu",
+ "Left": "Vasen",
+ "Margin": "Marginaali",
+ "Middle": "Keskelle",
+ "No rules": "Ei viivoja",
+ "No sides": "Ei sivuja",
+ "Padding": "Palstantäyte",
+ "Right": "Oikea",
+ "Row Properties": "Rivin asetukset",
+ "Rules will appear between all rows and columns": "Viivat jokaisen rivin ja sarakkeen välillä",
+ "Rules will appear between columns only": "Viivat ainoastaan sarakkeiden välillä",
+ "Rules will appear between rows only": "Viivat ainoastaan rivien välillä",
+ "Rules": "Viivat",
+ "Spacing": "Palstatila",
+ "Summary": "Yhteenveto",
+ "TO-cell-delete": "Poista solu",
+ "TO-cell-insert-after": "Lisää solu perään",
+ "TO-cell-insert-before": "Lisää solu ennen",
+ "TO-cell-merge": "Yhdistä solut",
+ "TO-cell-prop": "Solun asetukset",
+ "TO-cell-split": "Jaa solu",
+ "TO-col-delete": "Poista sarake",
+ "TO-col-insert-after": "Lisää sarake perään",
+ "TO-col-insert-before": "Lisää sarake ennen",
+ "TO-col-split": "Jaa sarake",
+ "TO-row-delete": "Poista rivi",
+ "TO-row-insert-above": "Lisää rivi yläpuolelle",
+ "TO-row-insert-under": "Lisää rivi alapuolelle",
+ "TO-row-prop": "Rivin asetukset",
+ "TO-row-split": "Jaa rivi",
+ "TO-table-prop": "Taulukon asetukset",
+ "Top": "Ylös",
+ "Table Properties": "Taulukon asetukset",
+ "The bottom side only": "Ainoastaan alapuolelle",
+ "The left-hand side only": "Ainoastaan vasenreuna",
+ "The right and left sides only": "Oikea- ja vasenreuna",
+ "The right-hand side only": "Ainoastaan oikeareuna",
+ "The top and bottom sides only": "Ylä- ja alapuoli.",
+ "The top side only": "Ainoastaan yläpuoli",
+ "Vertical align": "Vertikaali kohdistus",
+ "Width": "Leveys",
+ "not-del-last-cell": "Ei voida poistaa viimeistä solua rivistä.",
+ "not-del-last-col": "Ei voida poistaa viimeistä saraketta taulusta.",
+ "not-del-last-row": "Ei voida poistaa viimeistä riviä taulusta.",
+ "percent": "prosenttia",
+ "pixels": "pikseliä"
+};
Added: plog/trunk/js/htmlarea/plugins/TableOperations/lang/fr.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/fr.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/fr.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,90 @@
+// I18N constants
+
+// LANG: "fr", ENCODING: UTF-8 | ISO-8859-1
+// Author: Cédric Guillemette, http://www.ebdata.com
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+TableOperations.I18N = {
+ "Align": "Aligner",
+ "All four sides": "Quatre cotés",
+ "Background": "Arrière plan",
+ "Baseline": "Ligne de base",
+ "Border": "Bordure",
+ "Borders": "Bordures",
+ "Bottom": "Bas",
+ "CSS Style": "Style [CSS]",
+ "Caption": "Ãtiquette",
+ "Cell Properties": "Propriétés de cellule",
+ "Center": "Centre",
+ "Char": "Charactère",
+ "Collapsed borders": "Bordure effondrés",
+ "Color": "Couleur",
+ "Description": "Description",
+ "FG Color": "Couleur de face",
+ "Float": "Flotteur",
+ "Frames": "Vues",
+ "Height": "Largeur",
+ "How many columns would you like to merge?": "Combien de colonnes voulez-vous fusionner?",
+ "How many rows would you like to merge?": "Combien de rangées voulez-vous fusionner?",
+ "Image URL": "URL pour l'image",
+ "Justify": "Justifié",
+ "Layout": "Arrangement",
+ "Left": "Gauche",
+ "Margin": "Marge",
+ "Middle": "Milieu",
+ "No rules": "Aucun règlement",
+ "No sides": "Aucun côtés",
+ "None": "Aucun",
+ "Padding": "Remplissage",
+ "Please click into some cell": "Cliquer sur une cellule",
+ "Right": "Droit",
+ "Row Properties": "Propriétés de rangée",
+ "Rules will appear between all rows and columns": "Les règles vont apparaître entre les rangées et les cellules",
+ "Rules will appear between columns only": "Les règles vont apparaître entre les colonnes seulement",
+ "Rules will appear between rows only": "Les règles vont apparaître entre les rangées seulement",
+ "Rules": "Les règles",
+ "Spacing and padding": "Espacement et remplissage",
+ "Spacing": "Espacement",
+ "Summary": "Sommaire",
+ "TO-cell-delete": "Supprimer une cellule",
+ "TO-cell-insert-after": "Insérer une cellule après",
+ "TO-cell-insert-before": "Insérer une cellule avant",
+ "TO-cell-merge": "Fusionner les cellules",
+ "TO-cell-prop": "Cell properties",
+ "TO-cell-split": "Diviser la cellule",
+ "TO-col-delete": "Supprimer la colonne",
+ "TO-col-insert-after": "Insérer une colonne après",
+ "TO-col-insert-before": "Insérer une colonne avant",
+ "TO-col-split": "Diviser une colonne",
+ "TO-row-delete": "Supprimer une rangée",
+ "TO-row-insert-above": "Insérer une rangée avant",
+ "TO-row-insert-under": "Insérer une rangée après",
+ "TO-row-prop": "Propriétés de rangée",
+ "TO-row-split": "Diviser la rangée",
+ "TO-table-prop": "Propriétés de table",
+ "Table Properties": "Propriétés de table",
+ "Text align": "Aligner le texte",
+ "The bottom side only": "Côté du bas seulement",
+ "The left-hand side only": "Côté gauche seulement",
+ "The right and left sides only": "Côté gauche et droit seulement",
+ "The right-hand side only": "Côté droit seulement",
+ "The top and bottom sides only": "Côté haut et bas seulement",
+ "The top side only": "Côté haut seulement",
+ "Top": "Haut",
+ "Unset color": "Enlever la couleur",
+ "Vertical align": "Alignement vertical",
+ "Width": "Longeur",
+ "not-del-last-cell": "HTMLArea refuse de supprimer la dernière cellule de la rangée.",
+ "not-del-last-col": "HTMLArea refuse de supprimer la dernière colonne de la table.",
+ "not-del-last-row": "HTMLArea refuse de supprimer la dernière rangée de la table",
+ "percent": "pourcentage",
+ "pixels": "pixels"
+};
Added: plog/trunk/js/htmlarea/plugins/TableOperations/lang/he.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/he.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/he.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -0,0 +1,90 @@
+// I18N constants
+
+// LANG: "he", ENCODING: UTF-8
+// Author: Liron Newman, http://www.eesh.net, <plastish at ultinet dot org>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+TableOperations.I18N = {
+ "Align": "×ש×ר",
+ "All four sides": "×× ×ר×עת ×צ××××",
+ "Background": "רקע",
+ "Baseline": "×§× ×ס×ס",
+ "Border": "××××",
+ "Borders": "×××××ת",
+ "Bottom": "ת×ת××",
+ "CSS Style": "ס×× ×× [CSS]",
+ "Caption": "××תרת",
+ "Cell Properties": "××פ××× × ×ª×",
+ "Center": "×ר××",
+ "Char": "ת×",
+ "Collapsed borders": "×××××ת ×§×רס××",
+ "Color": "צ××¢",
+ "Description": "ת×××ר",
+ "FG Color": "צ××¢ ×§××××",
+ "Float": "×ר××£",
+ "Frames": "×ס×ר×ת",
+ "Height": "××××",
+ "How many columns would you like to merge?": "××× ××ר×× ×רצ×× × ××××?",
+ "How many rows would you like to merge?": "××× ×©×ר×ת ×רצ×× × ××××?",
+ "Image URL": "URL ×ת××× ×",
+ "Justify": "×ש×ר",
+ "Layout": "פר×ס×",
+ "Left": "ש×××",
+ "Margin": "ש×××××",
+ "Middle": "××צע",
+ "No rules": "××× ×§××××",
+ "No sides": "××× ×¦××××",
+ "None": "×××",
+ "Padding": "ר×××× ×ש×××××",
+ "Please click into some cell": "×× × ×××¥ ×¢× ×ª× ××ש××",
+ "Right": "××××",
+ "Row Properties": "××פ××× × ×©×ר×",
+ "Rules will appear between all rows and columns": "×§×××× ××פ××¢× ××× ×× ×ש×ר×ת ××××ר××",
+ "Rules will appear between columns only": "×§×××× ××פ××¢× ××× ××ר×× ××××",
+ "Rules will appear between rows only": "×§×××× ××פ××¢× ××× ×©×ר×ת ××××",
+ "Rules": "×§××××",
+ "Spacing and padding": "ר×××× ×ש×××××",
+ "Spacing": "ר××××",
+ "Summary": "ס××××",
+ "TO-cell-delete": "×××§ ת×",
+ "TO-cell-insert-after": "××× ×¡ ×ª× ××ר×",
+ "TO-cell-insert-before": "××× ×¡ ×ª× ××¤× ×",
+ "TO-cell-merge": "××× ×ª×××",
+ "TO-cell-prop": "××פ××× × ×ª×",
+ "TO-cell-split": "×¤×¦× ×ª×",
+ "TO-col-delete": "×××§ ××ר",
+ "TO-col-insert-after": "××× ×¡ ××ר ××ר×",
+ "TO-col-insert-before": "××× ×¡ ××ר ××¤× ×",
+ "TO-col-split": "×¤×¦× ××ר",
+ "TO-row-delete": "×××§ ש×ר×",
+ "TO-row-insert-above": "××× ×¡ ש××¨× ××¤× ×",
+ "TO-row-insert-under": "××× ×¡ ש××¨× ××ר×",
+ "TO-row-prop": "××פ××× × ×©×ר×",
+ "TO-row-split": "×¤×¦× ×©×ר×",
+ "TO-table-prop": "××פ××× × ××××",
+ "Table Properties": "××פ××× × ××××",
+ "Text align": "×ש×ר ×קס×",
+ "The bottom side only": "××¦× ×ת×ת×× ××××",
+ "The left-hand side only": "××¦× ×ש×××× ××××",
+ "The right and left sides only": "×צ×××× ×××× × ××ש×××× ××××",
+ "The right-hand side only": "××¦× ×××× × ××××",
+ "The top and bottom sides only": "×צ×××× ××¢×××× ××ת×ת×× ××××",
+ "The top side only": "××¦× ××¢×××× ××××",
+ "Top": "×¢××××",
+ "Unset color": "צ××¢ ×× × ××ר",
+ "Vertical align": "××ש×ר ×× ××",
+ "Width": "ר×××",
+ "not-del-last-cell": "HTMLArea ××¡×¨× ×פ××× ×ת ×××××§ ×ת ××ª× ×××ר×× ×ש×ר×.",
+ "not-del-last-col": "HTMLArea ××¡×¨× ×פ××× ×ת ×××××§ ×ת ×××ר ×××ר×× ×××××.",
+ "not-del-last-row": "HTMLArea ××¡×¨× ×פ××× ×ת ×××××§ ×ת ×ש××¨× ×××ר×× × ×××××.",
+ "percent": "××××",
+ "pixels": "פ×קס×××"
+};
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/lang/hu.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/hu.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/hu.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,63 +1,63 @@
-// I18N constants
-
-// LANG: "hu", ENCODING: UTF-8
-// Author: Miklós Somogyi, <somogyine at vnet.hu>
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-HTMLArea.I18N = {
-
- // the following should be the filename without .js extension
- // it will be used for automatically load plugin language.
- lang: "hu",
-
- tooltips: {
- bold: "Félkövér",
- italic: "DÅlt",
- underline: "Aláhúzott",
- strikethrough: "Ãthúzott",
- subscript: "Alsó index",
- superscript: "FelsÅ index",
- justifyleft: "Balra zárt",
- justifycenter: "Középre zárt",
- justifyright: "Jobbra zárt",
- justifyfull: "Sorkizárt",
- orderedlist: "Számozott lista",
- unorderedlist: "Számozatlan lista",
- outdent: "Behúzás csökkentése",
- indent: "Behúzás növelése",
- forecolor: "KarakterszÃn",
- hilitecolor: "HáttérszÃn",
- horizontalrule: "Elválasztó vonal",
- createlink: "Hiperhivatkozás beszúrása",
- insertimage: "Kép beszúrása",
- inserttable: "Táblázat beszúrása",
- htmlmode: "HTML forrás be/ki",
- popupeditor: "SzerkesztŠkülön ablakban",
- about: "Névjegy",
- showhelp: "Súgó",
- textindicator: "Aktuális stÃlus",
- undo: "Visszavonás",
- redo: "Ãjra végrehajtás",
- cut: "Kivágás",
- copy: "Másolás",
- paste: "Beillesztés"
- },
-
- buttons: {
- "ok": "Rendben",
- "cancel": "Mégsem"
- },
-
- msg: {
- "Path": "Hierarchia",
- "TEXT_MODE": "Forrás mód. Visszaváltás [<>] gomb"
- }
-};
+// I18N constants
+
+// LANG: "hu", ENCODING: UTF-8
+// Author: Miklós Somogyi, <somogyine at vnet.hu>
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+HTMLArea.I18N = {
+
+ // the following should be the filename without .js extension
+ // it will be used for automatically load plugin language.
+ lang: "hu",
+
+ tooltips: {
+ bold: "Félkövér",
+ italic: "DÅlt",
+ underline: "Aláhúzott",
+ strikethrough: "Ãthúzott",
+ subscript: "Alsó index",
+ superscript: "FelsÅ index",
+ justifyleft: "Balra zárt",
+ justifycenter: "Középre zárt",
+ justifyright: "Jobbra zárt",
+ justifyfull: "Sorkizárt",
+ orderedlist: "Számozott lista",
+ unorderedlist: "Számozatlan lista",
+ outdent: "Behúzás csökkentése",
+ indent: "Behúzás növelése",
+ forecolor: "KarakterszÃn",
+ hilitecolor: "HáttérszÃn",
+ horizontalrule: "Elválasztó vonal",
+ createlink: "Hiperhivatkozás beszúrása",
+ insertimage: "Kép beszúrása",
+ inserttable: "Táblázat beszúrása",
+ htmlmode: "HTML forrás be/ki",
+ popupeditor: "SzerkesztŠkülön ablakban",
+ about: "Névjegy",
+ showhelp: "Súgó",
+ textindicator: "Aktuális stÃlus",
+ undo: "Visszavonás",
+ redo: "Ãjra végrehajtás",
+ cut: "Kivágás",
+ copy: "Másolás",
+ paste: "Beillesztés"
+ },
+
+ buttons: {
+ "ok": "Rendben",
+ "cancel": "Mégsem"
+ },
+
+ msg: {
+ "Path": "Hierarchia",
+ "TEXT_MODE": "Forrás mód. Visszaváltás [<>] gomb"
+ }
+};
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/lang/it.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/it.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/it.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,81 +1,81 @@
-// I18N constants
-
-// LANG: "it", ENCODING: UTF-8 | ISO-8859-1
-// Author: Fabio Rotondo <fabio at rotondo.it>
-
-TableOperations.I18N = {
- "Align": "Allinea",
- "All four sides": "Tutti e quattro i lati",
- "Background": "Sfondo",
- "Baseline": "Allineamento",
- "Border": "Bordo",
- "Borders": "Bordi",
- "Bottom": "Basso",
- "CSS Style": "Stile [CSS]",
- "Caption": "Titolo",
- "Cell Properties": "Proprietà della Cella",
- "Center": "Centra",
- "Char": "Carattere",
- "Collapsed borders": "Bordi chiusi",
- "Color": "Colore",
- "Description": "Descrizione",
- "FG Color": "Colore Principale",
- "Float": "Fluttuante",
- "Frames": "Frames",
- "Height": "Altezza",
- "How many columns would you like to merge?": "Quante colonne vuoi unire?",
- "How many rows would you like to merge?": "Quante righe vuoi unire?",
- "Image URL": "URL dell'Immagine",
- "Justify": "Justifica",
- "Layout": "Layout",
- "Left": "Sinistra",
- "Margin": "Margine",
- "Middle": "Centrale",
- "No rules": "Nessun righello",
- "No sides": "Nessun lato",
- "None": "Nulla",
- "Padding": "Padding",
- "Please click into some cell": "Per favore, clicca in una cella",
- "Right": "Destra",
- "Row Properties": "Proprietà della Riga",
- "Rules will appear between all rows and columns": "Le linee appariranno tra tutte le righe e colonne",
- "Rules will appear between columns only": "Le linee appariranno solo tra le colonne",
- "Rules will appear between rows only": "Le linee appariranno solo tra le righe",
- "Rules": "Linee",
- "Spacing and padding": "Spaziatura e Padding",
- "Spacing": "Spaziatura",
- "Summary": "Sommario",
- "TO-cell-delete": "Cancella cella",
- "TO-cell-insert-after": "Inserisci cella dopo",
- "TO-cell-insert-before": "Inserisci cella prima",
- "TO-cell-merge": "Unisci celle",
- "TO-cell-prop": "Proprietà della cella",
- "TO-cell-split": "Dividi cella",
- "TO-col-delete": "Cancella colonna",
- "TO-col-insert-after": "Inserisci colonna dopo",
- "TO-col-insert-before": "Inserisci colonna prima",
- "TO-col-split": "Dividi colonna",
- "TO-row-delete": "Cancella riga",
- "TO-row-insert-above": "Inserisci riga prima",
- "TO-row-insert-under": "Inserisci riga dopo",
- "TO-row-prop": "Proprietà della riga",
- "TO-row-split": "Dividi riga",
- "TO-table-prop": "Proprietà della Tabella",
- "Table Properties": "Proprietà della Tabella",
- "Text align": "Allineamento del Testo",
- "The bottom side only": "Solo la parte inferiore",
- "The left-hand side only": "Solo la parte sinistra",
- "The right and left sides only": "Solo destra e sinistra",
- "The right-hand side only": "Solo la parte destra",
- "The top and bottom sides only": "Solo sopra e sotto",
- "The top side only": "Solo la parte sopra",
- "Top": "Alto",
- "Unset color": "Rimuovi colore",
- "Vertical align": "Allineamento verticale",
- "Width": "Larghezza",
- "not-del-last-cell": "HTMLArea si rifiuta codardamente di cancellare l'ultima cella nella riga.",
- "not-del-last-col": "HTMLArea si rifiuta codardamente di cancellare l'ultima colonna nella tabella.",
- "not-del-last-row": "HTMLArea si rifiuta codardamente di cancellare l'ultima riga nella tabella.",
- "percent": "percento",
- "pixels": "pixels"
-};
+// I18N constants
+
+// LANG: "it", ENCODING: UTF-8 | ISO-8859-1
+// Author: Fabio Rotondo <fabio at rotondo.it>
+
+TableOperations.I18N = {
+ "Align": "Allinea",
+ "All four sides": "Tutti e quattro i lati",
+ "Background": "Sfondo",
+ "Baseline": "Allineamento",
+ "Border": "Bordo",
+ "Borders": "Bordi",
+ "Bottom": "Basso",
+ "CSS Style": "Stile [CSS]",
+ "Caption": "Titolo",
+ "Cell Properties": "Proprietà della Cella",
+ "Center": "Centra",
+ "Char": "Carattere",
+ "Collapsed borders": "Bordi chiusi",
+ "Color": "Colore",
+ "Description": "Descrizione",
+ "FG Color": "Colore Principale",
+ "Float": "Fluttuante",
+ "Frames": "Frames",
+ "Height": "Altezza",
+ "How many columns would you like to merge?": "Quante colonne vuoi unire?",
+ "How many rows would you like to merge?": "Quante righe vuoi unire?",
+ "Image URL": "URL dell'Immagine",
+ "Justify": "Justifica",
+ "Layout": "Layout",
+ "Left": "Sinistra",
+ "Margin": "Margine",
+ "Middle": "Centrale",
+ "No rules": "Nessun righello",
+ "No sides": "Nessun lato",
+ "None": "Nulla",
+ "Padding": "Padding",
+ "Please click into some cell": "Per favore, clicca in una cella",
+ "Right": "Destra",
+ "Row Properties": "Proprietà della Riga",
+ "Rules will appear between all rows and columns": "Le linee appariranno tra tutte le righe e colonne",
+ "Rules will appear between columns only": "Le linee appariranno solo tra le colonne",
+ "Rules will appear between rows only": "Le linee appariranno solo tra le righe",
+ "Rules": "Linee",
+ "Spacing and padding": "Spaziatura e Padding",
+ "Spacing": "Spaziatura",
+ "Summary": "Sommario",
+ "TO-cell-delete": "Cancella cella",
+ "TO-cell-insert-after": "Inserisci cella dopo",
+ "TO-cell-insert-before": "Inserisci cella prima",
+ "TO-cell-merge": "Unisci celle",
+ "TO-cell-prop": "Proprietà della cella",
+ "TO-cell-split": "Dividi cella",
+ "TO-col-delete": "Cancella colonna",
+ "TO-col-insert-after": "Inserisci colonna dopo",
+ "TO-col-insert-before": "Inserisci colonna prima",
+ "TO-col-split": "Dividi colonna",
+ "TO-row-delete": "Cancella riga",
+ "TO-row-insert-above": "Inserisci riga prima",
+ "TO-row-insert-under": "Inserisci riga dopo",
+ "TO-row-prop": "Proprietà della riga",
+ "TO-row-split": "Dividi riga",
+ "TO-table-prop": "Proprietà della Tabella",
+ "Table Properties": "Proprietà della Tabella",
+ "Text align": "Allineamento del Testo",
+ "The bottom side only": "Solo la parte inferiore",
+ "The left-hand side only": "Solo la parte sinistra",
+ "The right and left sides only": "Solo destra e sinistra",
+ "The right-hand side only": "Solo la parte destra",
+ "The top and bottom sides only": "Solo sopra e sotto",
+ "The top side only": "Solo la parte sopra",
+ "Top": "Alto",
+ "Unset color": "Rimuovi colore",
+ "Vertical align": "Allineamento verticale",
+ "Width": "Larghezza",
+ "not-del-last-cell": "HTMLArea si rifiuta codardamente di cancellare l'ultima cella nella riga.",
+ "not-del-last-col": "HTMLArea si rifiuta codardamente di cancellare l'ultima colonna nella tabella.",
+ "not-del-last-row": "HTMLArea si rifiuta codardamente di cancellare l'ultima riga nella tabella.",
+ "percent": "percento",
+ "pixels": "pixels"
+};
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/lang/nl.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/nl.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/nl.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,90 +1,90 @@
-// I18N constants
-
-// LANG: "nl", ENCODING: UTF-8 | ISO-8859-1
-// Author: Michel Weegeerink (info at mmc-shop.nl), http://mmc-shop.nl
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-TableOperations.I18N = {
- "Align": "Uitlijning",
- "All four sides": "Alle 4 zijden",
- "Background": "Achtergrond",
- "Baseline": "Basis",
- "Border": "Rand",
- "Borders": "Randen",
- "Bottom": "Onder",
- "CSS Style": "CSS Style",
- "Caption": "Opmerking",
- "Cell Properties": "Celeigenschappen",
- "Center": "Centreren",
- "Char": "Karakter",
- "Collapsed borders": "Geen randen",
- "Color": "Kleur",
- "Description": "Omschrijving",
- "FG Color": "Voorgrond",
- "Float": "Zwevend",
- "Frames": "Frames",
- "Height": "Hoogte",
- "How many columns would you like to merge?": "Hoeveel kolommen wilt u samenvoegen?",
- "How many rows would you like to merge?": "Hoeveel rijen wilt u samenvoegen?",
- "Image URL": "Afbeelding URL",
- "Justify": "Uitvullen",
- "Layout": "Opmaak",
- "Left": "Links",
- "Margin": "Marge",
- "Middle": "Midden",
- "No rules": "Geen regels",
- "No sides": "Geen zijlijnen",
- "None": "Geen",
- "Padding": "Celmarge",
- "Please click into some cell": "Klik in een cel a.u.b.",
- "Right": "Rechts",
- "Row Properties": "Rijeigenschappen",
- "Rules will appear between all rows and columns": "Regels verschijnen tussen alle rijen en kolommen",
- "Rules will appear between columns only": "Regels verschijnen enkel tussen de kolommen",
- "Rules will appear between rows only": "Regels verschijnen enkel tussen de rijen",
- "Rules": "Regels",
- "Spacing and padding": "Celmarge en afstand tussen cellen",
- "Spacing": "marge",
- "Summary": "Overzicht",
- "TO-cell-delete": "Cel verwijderen",
- "TO-cell-insert-after": "Voeg cel toe achter",
- "TO-cell-insert-before": "Voeg cel toe voor",
- "TO-cell-merge": "Cellen samenvoegen",
- "TO-cell-prop": "Celeigenschappen",
- "TO-cell-split": "Cel splitsen",
- "TO-col-delete": "Kolom verwijderen",
- "TO-col-insert-after": "Kolom invoegen achter",
- "TO-col-insert-before": "Kolom invoegen voor",
- "TO-col-split": "Kolom splitsen",
- "TO-row-delete": "Rij verwijderen",
- "TO-row-insert-above": "Rij invoegen boven",
- "TO-row-insert-under": "Rij invoegen onder",
- "TO-row-prop": "Rij eigenschappen",
- "TO-row-split": "Rij splitsen",
- "TO-table-prop": "Tabel eigenschappen",
- "Table Properties": "Tabel eigenschappen",
- "Text align": "Text uitlijning",
- "The bottom side only": "Enkel aan de onderkant",
- "The left-hand side only": "Enkel aan de linkerkant",
- "The right and left sides only": "Enkel aan de linker en rechterkant",
- "The right-hand side only": "Enkel aan de rechterkant",
- "The top and bottom sides only": "Enkel aan de bovenen onderkant",
- "The top side only": "Enkel aan de bovenkant",
- "Top": "Boven",
- "Unset color": "Wis kleur",
- "Vertical align": "Vertikale uitlijning",
- "Width": "Breedte",
- "not-del-last-cell": "HTMLArea kan de laatste cel in deze tabel niet verwijderen.",
- "not-del-last-col": "HTMLArea kan de laatste kolom in deze tabel niet verwijderen.",
- "not-del-last-row": "HTMLArea kan de laatste rij in deze tabel niet verwijderen.",
- "percent": "procent",
- "pixels": "pixels"
-};
+// I18N constants
+
+// LANG: "nl", ENCODING: UTF-8 | ISO-8859-1
+// Author: Michel Weegeerink (info at mmc-shop.nl), http://mmc-shop.nl
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+TableOperations.I18N = {
+ "Align": "Uitlijning",
+ "All four sides": "Alle 4 zijden",
+ "Background": "Achtergrond",
+ "Baseline": "Basis",
+ "Border": "Rand",
+ "Borders": "Randen",
+ "Bottom": "Onder",
+ "CSS Style": "CSS Style",
+ "Caption": "Opmerking",
+ "Cell Properties": "Celeigenschappen",
+ "Center": "Centreren",
+ "Char": "Karakter",
+ "Collapsed borders": "Geen randen",
+ "Color": "Kleur",
+ "Description": "Omschrijving",
+ "FG Color": "Voorgrond",
+ "Float": "Zwevend",
+ "Frames": "Frames",
+ "Height": "Hoogte",
+ "How many columns would you like to merge?": "Hoeveel kolommen wilt u samenvoegen?",
+ "How many rows would you like to merge?": "Hoeveel rijen wilt u samenvoegen?",
+ "Image URL": "Afbeelding URL",
+ "Justify": "Uitvullen",
+ "Layout": "Opmaak",
+ "Left": "Links",
+ "Margin": "Marge",
+ "Middle": "Midden",
+ "No rules": "Geen regels",
+ "No sides": "Geen zijlijnen",
+ "None": "Geen",
+ "Padding": "Celmarge",
+ "Please click into some cell": "Klik in een cel a.u.b.",
+ "Right": "Rechts",
+ "Row Properties": "Rijeigenschappen",
+ "Rules will appear between all rows and columns": "Regels verschijnen tussen alle rijen en kolommen",
+ "Rules will appear between columns only": "Regels verschijnen enkel tussen de kolommen",
+ "Rules will appear between rows only": "Regels verschijnen enkel tussen de rijen",
+ "Rules": "Regels",
+ "Spacing and padding": "Celmarge en afstand tussen cellen",
+ "Spacing": "marge",
+ "Summary": "Overzicht",
+ "TO-cell-delete": "Cel verwijderen",
+ "TO-cell-insert-after": "Voeg cel toe achter",
+ "TO-cell-insert-before": "Voeg cel toe voor",
+ "TO-cell-merge": "Cellen samenvoegen",
+ "TO-cell-prop": "Celeigenschappen",
+ "TO-cell-split": "Cel splitsen",
+ "TO-col-delete": "Kolom verwijderen",
+ "TO-col-insert-after": "Kolom invoegen achter",
+ "TO-col-insert-before": "Kolom invoegen voor",
+ "TO-col-split": "Kolom splitsen",
+ "TO-row-delete": "Rij verwijderen",
+ "TO-row-insert-above": "Rij invoegen boven",
+ "TO-row-insert-under": "Rij invoegen onder",
+ "TO-row-prop": "Rij eigenschappen",
+ "TO-row-split": "Rij splitsen",
+ "TO-table-prop": "Tabel eigenschappen",
+ "Table Properties": "Tabel eigenschappen",
+ "Text align": "Text uitlijning",
+ "The bottom side only": "Enkel aan de onderkant",
+ "The left-hand side only": "Enkel aan de linkerkant",
+ "The right and left sides only": "Enkel aan de linker en rechterkant",
+ "The right-hand side only": "Enkel aan de rechterkant",
+ "The top and bottom sides only": "Enkel aan de bovenen onderkant",
+ "The top side only": "Enkel aan de bovenkant",
+ "Top": "Boven",
+ "Unset color": "Wis kleur",
+ "Vertical align": "Vertikale uitlijning",
+ "Width": "Breedte",
+ "not-del-last-cell": "HTMLArea kan de laatste cel in deze tabel niet verwijderen.",
+ "not-del-last-col": "HTMLArea kan de laatste kolom in deze tabel niet verwijderen.",
+ "not-del-last-row": "HTMLArea kan de laatste rij in deze tabel niet verwijderen.",
+ "percent": "procent",
+ "pixels": "pixels"
+};
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/lang/no.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/no.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/no.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,91 +1,91 @@
-// I18N constants
-
-// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
-// Author: Mihai Bazon, <mishoo at infoiasi.ro>
-// translated into Norwegia: ses at online.no 11.11.03
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-TableOperations.I18N = {
- "Align": "Juster",
- "All four sides": "Alle fire sider",
- "Background": "Bakgrund",
- "Baseline": "Grunnlinje",
- "Border": "Kantlinje",
- "Borders": "Kantlinjer",
- "Bottom": "Bunn",
- "CSS Style": "Stil [CSS]",
- "Caption": "Overskrift",
- "Cell Properties": "Celleegenskaper",
- "Center": "Sentrer",
- "Char": "Tegn",
- "Collapsed borders": "Fjern kantlinjer",
- "Color": "Farge",
- "Description": "Beskrivelse",
- "FG Color": "FG farge",
- "Float": "Flytende",
- "Frames": "rammer",
- "Height": "Høyde",
- "How many columns would you like to merge?": "Hvor mange kolonner vil du slå sammen?",
- "How many rows would you like to merge?": "Hvor mange rader vil du slå sammen?",
- "Image URL": "Bildets URL",
- "Justify": "Juster",
- "Layout": "Layout",
- "Left": "Venstre",
- "Margin": "Marg",
- "Middle": "Midten",
- "No rules": "Ingen linjal",
- "No sides": "Ingen sider",
- "None": "Ingen",
- "Padding": "Luft",
- "Please click into some cell": "Klikk i en eller annen celle",
- "Right": "Høyre",
- "Row Properties": "Egenskaper for rad",
- "Rules will appear between all rows and columns": "Linjer vil synes mellom alle rader og kolonner",
- "Rules will appear between columns only": "Linjer vil synes kun mellom kolonner",
- "Rules will appear between rows only": "Linjer vil synes kun mellom rader",
- "Rules": "Linjer",
- "Spacing and padding": "Luft",
- "Spacing": "Luft",
- "Summary": "Sammendrag",
- "TO-cell-delete": "Slett celle",
- "TO-cell-insert-after": "Sett inn celle etter",
- "TO-cell-insert-before": "Sett inn celle foran",
- "TO-cell-merge": "Slå sammen celler",
- "TO-cell-prop": "Egenskaper for celle",
- "TO-cell-split": "Del celle",
- "TO-col-delete": "Slett kolonne",
- "TO-col-insert-after": "Skyt inn kolonne etter",
- "TO-col-insert-before": "Skyt inn kolonne før",
- "TO-col-split": "Del kolonne",
- "TO-row-delete": "Slett rad",
- "TO-row-insert-above": "Skyt inn rad foran",
- "TO-row-insert-under": "Skyt inn rad etter",
- "TO-row-prop": "Egenskaper for rad",
- "TO-row-split": "Del rad",
- "TO-table-prop": "Tabellegenskaper",
- "Table Properties": "Tabellegenskaper",
- "Text align": "Juster tekst",
- "The bottom side only": "Bunnen kun",
- "The left-hand side only": "Venstresiden kun",
- "The right and left sides only": "Høyre- og venstresiden kun",
- "The right-hand side only": "Høyresiden kun",
- "The top and bottom sides only": "The top and bottom sides only",
- "The top side only": "Overkanten kun",
- "Top": "Overkant",
- "Unset color": "Ikke-bestemt farge",
- "Vertical align": "Vertikal justering",
- "Width": "Bredde",
- "not-del-last-cell": "HTMLArea nekter å slette siste cellen i tabellen.",
- "not-del-last-col": "HTMLArea nekter å slette siste kolonnen i tabellen.",
- "not-del-last-row": "HTMLArea nekter å slette siste raden i tabellen.",
- "percent": "prosent",
- "pixels": "billedpunkter"
-};
+// I18N constants
+
+// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
+// Author: Mihai Bazon, <mihai_bazon at yahoo.com>
+// translated into Norwegia: ses at online.no 11.11.03
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+TableOperations.I18N = {
+ "Align": "Juster",
+ "All four sides": "Alle fire sider",
+ "Background": "Bakgrund",
+ "Baseline": "Grunnlinje",
+ "Border": "Kantlinje",
+ "Borders": "Kantlinjer",
+ "Bottom": "Bunn",
+ "CSS Style": "Stil [CSS]",
+ "Caption": "Overskrift",
+ "Cell Properties": "Celleegenskaper",
+ "Center": "Sentrer",
+ "Char": "Tegn",
+ "Collapsed borders": "Fjern kantlinjer",
+ "Color": "Farge",
+ "Description": "Beskrivelse",
+ "FG Color": "FG farge",
+ "Float": "Flytende",
+ "Frames": "rammer",
+ "Height": "Høyde",
+ "How many columns would you like to merge?": "Hvor mange kolonner vil du slå sammen?",
+ "How many rows would you like to merge?": "Hvor mange rader vil du slå sammen?",
+ "Image URL": "Bildets URL",
+ "Justify": "Juster",
+ "Layout": "Layout",
+ "Left": "Venstre",
+ "Margin": "Marg",
+ "Middle": "Midten",
+ "No rules": "Ingen linjal",
+ "No sides": "Ingen sider",
+ "None": "Ingen",
+ "Padding": "Luft",
+ "Please click into some cell": "Klikk i en eller annen celle",
+ "Right": "Høyre",
+ "Row Properties": "Egenskaper for rad",
+ "Rules will appear between all rows and columns": "Linjer vil synes mellom alle rader og kolonner",
+ "Rules will appear between columns only": "Linjer vil synes kun mellom kolonner",
+ "Rules will appear between rows only": "Linjer vil synes kun mellom rader",
+ "Rules": "Linjer",
+ "Spacing and padding": "Luft",
+ "Spacing": "Luft",
+ "Summary": "Sammendrag",
+ "TO-cell-delete": "Slett celle",
+ "TO-cell-insert-after": "Sett inn celle etter",
+ "TO-cell-insert-before": "Sett inn celle foran",
+ "TO-cell-merge": "Slå sammen celler",
+ "TO-cell-prop": "Egenskaper for celle",
+ "TO-cell-split": "Del celle",
+ "TO-col-delete": "Slett kolonne",
+ "TO-col-insert-after": "Skyt inn kolonne etter",
+ "TO-col-insert-before": "Skyt inn kolonne før",
+ "TO-col-split": "Del kolonne",
+ "TO-row-delete": "Slett rad",
+ "TO-row-insert-above": "Skyt inn rad foran",
+ "TO-row-insert-under": "Skyt inn rad etter",
+ "TO-row-prop": "Egenskaper for rad",
+ "TO-row-split": "Del rad",
+ "TO-table-prop": "Tabellegenskaper",
+ "Table Properties": "Tabellegenskaper",
+ "Text align": "Juster tekst",
+ "The bottom side only": "Bunnen kun",
+ "The left-hand side only": "Venstresiden kun",
+ "The right and left sides only": "Høyre- og venstresiden kun",
+ "The right-hand side only": "Høyresiden kun",
+ "The top and bottom sides only": "The top and bottom sides only",
+ "The top side only": "Overkanten kun",
+ "Top": "Overkant",
+ "Unset color": "Ikke-bestemt farge",
+ "Vertical align": "Vertikal justering",
+ "Width": "Bredde",
+ "not-del-last-cell": "HTMLArea nekter å slette siste cellen i tabellen.",
+ "not-del-last-col": "HTMLArea nekter å slette siste kolonnen i tabellen.",
+ "not-del-last-row": "HTMLArea nekter å slette siste raden i tabellen.",
+ "percent": "prosent",
+ "pixels": "billedpunkter"
+};
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/lang/ro.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/lang/ro.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/lang/ro.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,90 +1,90 @@
-// I18N constants
-
-// LANG: "ro", ENCODING: UTF-8
-// Author: Mihai Bazon, http://dynarch.com/mishoo
-
-// FOR TRANSLATORS:
-//
-// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
-// (at least a valid email address)
-//
-// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
-// (if this is not possible, please include a comment
-// that states what encoding is necessary.)
-
-TableOperations.I18N = {
- "Align": "Aliniere",
- "All four sides": "Toate pÄrÅ£ile",
- "Background": "Fundal",
- "Baseline": "Baseline",
- "Border": "Chenar",
- "Borders": "Chenare",
- "Bottom": "Jos",
- "CSS Style": "Stil [CSS]",
- "Caption": "Titlu de tabel",
- "Cell Properties": "ProprietÄÅ£ile celulei",
- "Center": "Centru",
- "Char": "Caracter",
- "Collapsed borders": "Chenare asimilate",
- "Color": "Culoare",
- "Description": "Descriere",
- "FG Color": "Culoare text",
- "Float": "Poziţie",
- "Frames": "Chenare",
- "Height": "ÃnÄlÅ£imea",
- "How many columns would you like to merge?": "Câte coloane vrei sÄ uneÅti?",
- "How many rows would you like to merge?": "Câte linii vrei sÄ uneÅti?",
- "Image URL": "URL-ul imaginii",
- "Justify": "Justify",
- "Layout": "Aranjament",
- "Left": "Stânga",
- "Margin": "Margine",
- "Middle": "Mijloc",
- "No rules": "FÄrÄ linii",
- "No sides": "FÄrÄ pÄrÅ£i",
- "None": "Nimic",
- "Padding": "Spaţiere",
- "Please click into some cell": "VÄ rog sÄ daÅ£i click într-o celulÄ",
- "Right": "Dreapta",
- "Row Properties": "ProprietÄÅ£ile liniei",
- "Rules will appear between all rows and columns": "Vor apÄrea linii între toate rândurile Åi coloanele",
- "Rules will appear between columns only": "Vor apÄrea doar linii verticale",
- "Rules will appear between rows only": "Vor apÄrea doar linii orizontale",
- "Rules": "Linii",
- "Spacing and padding": "Spaţierea",
- "Spacing": "Ãntre celule",
- "Summary": "Sumar",
- "TO-cell-delete": "Återge celula",
- "TO-cell-insert-after": "InsereazÄ o celulÄ la dreapta",
- "TO-cell-insert-before": "InsereazÄ o celulÄ la stânga",
- "TO-cell-merge": "UneÅte celulele",
- "TO-cell-prop": "ProprietÄÅ£ile celulei",
- "TO-cell-split": "Ãmparte celula",
- "TO-col-delete": "Återge coloana",
- "TO-col-insert-after": "InsereazÄ o coloanÄ la dreapta",
- "TO-col-insert-before": "InsereazÄ o coloanÄ la stânga",
- "TO-col-split": "Ãmparte coloana",
- "TO-row-delete": "Återge rândul",
- "TO-row-insert-above": "InsereazÄ un rând înainte",
- "TO-row-insert-under": "InsereazÄ un rând dupÄ",
- "TO-row-prop": "ProprietÄÅ£ile rândului",
- "TO-row-split": "Ãmparte rândul",
- "TO-table-prop": "ProprietÄÅ£ile tabelei",
- "Table Properties": "ProprietÄÅ£ile tabelei",
- "Text align": "Aliniere",
- "The bottom side only": "Doar partea de jos",
- "The left-hand side only": "Doar partea din stânga",
- "The right and left sides only": "Partea din stânga Åi cea din dreapta",
- "The right-hand side only": "Doar partea din dreapta",
- "The top and bottom sides only": "Partea de sus si cea de jos",
- "The top side only": "Doar partea de sus",
- "Top": "Sus",
- "Unset color": "DezactiveazÄ culoarea",
- "Vertical align": "Aliniere pe verticalÄ",
- "Width": "LÄÅ£ime",
- "not-del-last-cell": "HTMLArea refuzÄ cu laÅitate sÄ ÅteargÄ ultima celulÄ din rând.",
- "not-del-last-col": "HTMLArea refuzÄ cu laÅitate sÄ ÅteargÄ ultima coloamÄ din tabela.",
- "not-del-last-row": "HTMLArea refuzÄ cu laÅitate sÄ ÅteargÄ ultimul rând din tabela.",
- "percent": "procente",
- "pixels": "pixeli"
-};
+// I18N constants
+
+// LANG: "ro", ENCODING: UTF-8
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+
+// FOR TRANSLATORS:
+//
+// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
+// (at least a valid email address)
+//
+// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
+// (if this is not possible, please include a comment
+// that states what encoding is necessary.)
+
+TableOperations.I18N = {
+ "Align": "Aliniere",
+ "All four sides": "Toate pÄrÅ£ile",
+ "Background": "Fundal",
+ "Baseline": "Baseline",
+ "Border": "Chenar",
+ "Borders": "Chenare",
+ "Bottom": "Jos",
+ "CSS Style": "Stil [CSS]",
+ "Caption": "Titlu de tabel",
+ "Cell Properties": "ProprietÄÅ£ile celulei",
+ "Center": "Centru",
+ "Char": "Caracter",
+ "Collapsed borders": "Chenare asimilate",
+ "Color": "Culoare",
+ "Description": "Descriere",
+ "FG Color": "Culoare text",
+ "Float": "Poziţie",
+ "Frames": "Chenare",
+ "Height": "ÃnÄlÅ£imea",
+ "How many columns would you like to merge?": "Câte coloane vrei sÄ uneÅti?",
+ "How many rows would you like to merge?": "Câte linii vrei sÄ uneÅti?",
+ "Image URL": "URL-ul imaginii",
+ "Justify": "Justify",
+ "Layout": "Aranjament",
+ "Left": "Stânga",
+ "Margin": "Margine",
+ "Middle": "Mijloc",
+ "No rules": "FÄrÄ linii",
+ "No sides": "FÄrÄ pÄrÅ£i",
+ "None": "Nimic",
+ "Padding": "Spaţiere",
+ "Please click into some cell": "VÄ rog sÄ daÅ£i click într-o celulÄ",
+ "Right": "Dreapta",
+ "Row Properties": "ProprietÄÅ£ile liniei",
+ "Rules will appear between all rows and columns": "Vor apÄrea linii între toate rândurile Åi coloanele",
+ "Rules will appear between columns only": "Vor apÄrea doar linii verticale",
+ "Rules will appear between rows only": "Vor apÄrea doar linii orizontale",
+ "Rules": "Linii",
+ "Spacing and padding": "Spaţierea",
+ "Spacing": "Ãntre celule",
+ "Summary": "Sumar",
+ "TO-cell-delete": "Återge celula",
+ "TO-cell-insert-after": "InsereazÄ o celulÄ la dreapta",
+ "TO-cell-insert-before": "InsereazÄ o celulÄ la stânga",
+ "TO-cell-merge": "UneÅte celulele",
+ "TO-cell-prop": "ProprietÄÅ£ile celulei",
+ "TO-cell-split": "Ãmparte celula",
+ "TO-col-delete": "Återge coloana",
+ "TO-col-insert-after": "InsereazÄ o coloanÄ la dreapta",
+ "TO-col-insert-before": "InsereazÄ o coloanÄ la stânga",
+ "TO-col-split": "Ãmparte coloana",
+ "TO-row-delete": "Återge rândul",
+ "TO-row-insert-above": "InsereazÄ un rând înainte",
+ "TO-row-insert-under": "InsereazÄ un rând dupÄ",
+ "TO-row-prop": "ProprietÄÅ£ile rândului",
+ "TO-row-split": "Ãmparte rândul",
+ "TO-table-prop": "ProprietÄÅ£ile tabelei",
+ "Table Properties": "ProprietÄÅ£ile tabelei",
+ "Text align": "Aliniere",
+ "The bottom side only": "Doar partea de jos",
+ "The left-hand side only": "Doar partea din stânga",
+ "The right and left sides only": "Partea din stânga Åi cea din dreapta",
+ "The right-hand side only": "Doar partea din dreapta",
+ "The top and bottom sides only": "Partea de sus si cea de jos",
+ "The top side only": "Doar partea de sus",
+ "Top": "Sus",
+ "Unset color": "DezactiveazÄ culoarea",
+ "Vertical align": "Aliniere pe verticalÄ",
+ "Width": "LÄÅ£ime",
+ "not-del-last-cell": "HTMLArea refuzÄ cu laÅitate sÄ ÅteargÄ ultima celulÄ din rând.",
+ "not-del-last-col": "HTMLArea refuzÄ cu laÅitate sÄ ÅteargÄ ultima coloamÄ din tabela.",
+ "not-del-last-row": "HTMLArea refuzÄ cu laÅitate sÄ ÅteargÄ ultimul rând din tabela.",
+ "percent": "procente",
+ "pixels": "pixeli"
+};
Modified: plog/trunk/js/htmlarea/plugins/TableOperations/table-operations.js
===================================================================
--- plog/trunk/js/htmlarea/plugins/TableOperations/table-operations.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/plugins/TableOperations/table-operations.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,1160 +1,1113 @@
-// Table Operations Plugin for HTMLArea-3.0
-// Implementation by Mihai Bazon. Sponsored by http://www.bloki.com
-//
-// htmlArea v3.0 - Copyright (c) 2002 interactivetools.com, inc.
-// This notice MUST stay intact for use (see license.txt).
-//
-// A free WYSIWYG editor replacement for <textarea> fields.
-// For full source code and docs, visit http://www.interactivetools.com/
-//
-// Version 3.0 developed by Mihai Bazon for InteractiveTools.
-// http://dynarch.com/mishoo
-//
-// $Id: table-operations.js,v 1.5 2003/10/06 11:47:42 mishoo Exp $
-
-// Object that will encapsulate all the table operations provided by
-// HTMLArea-3.0 (except "insert table" which is included in the main file)
-function TableOperations(editor) {
- this.editor = editor;
-
- var cfg = editor.config;
- var tt = TableOperations.I18N;
- var bl = TableOperations.btnList;
- var self = this;
-
- // register the toolbar buttons provided by this plugin
- var toolbar = ["linebreak"];
- for (var i in bl) {
- var btn = bl[i];
- if (!btn) {
- toolbar.push("separator");
- } else {
- var id = "TO-" + btn[0];
- cfg.registerButton(id, tt[id], editor.imgURL(btn[0] + ".gif", "TableOperations"), false,
- function(editor, id) {
- // dispatch button press event
- self.buttonPress(editor, id);
- }, btn[1]);
- toolbar.push(id);
- }
- }
-
- // add a new line in the toolbar
- cfg.toolbar.push(toolbar);
-};
-
-TableOperations._pluginInfo = {
- name : "TableOperations",
- version : "1.0",
- developer : "Mihai Bazon",
- developer_url : "http://dynarch.com/mishoo/",
- c_owner : "Mihai Bazon",
- sponsor : "Zapatec Inc.",
- sponsor_url : "http://www.bloki.com",
- license : "htmlArea"
-};
-
-/************************
- * UTILITIES
- ************************/
-
-// retrieves the closest element having the specified tagName in the list of
-// ancestors of the current selection/caret.
-TableOperations.prototype.getClosest = function(tagName) {
- var editor = this.editor;
- var ancestors = editor.getAllAncestors();
- var ret = null;
- tagName = ("" + tagName).toLowerCase();
- for (var i in ancestors) {
- var el = ancestors[i];
- if (el.tagName.toLowerCase() == tagName) {
- ret = el;
- break;
- }
- }
- return ret;
-};
-
-// this function requires the file PopupDiv/PopupWin to be loaded from browser
-TableOperations.prototype.dialogTableProperties = function() {
- var i18n = TableOperations.I18N;
- // retrieve existing values
- var table = this.getClosest("table");
- // this.editor.selectNodeContents(table);
- // this.editor.updateToolbar();
-
- var dialog = new PopupWin(this.editor, i18n["Table Properties"], function(dialog, params) {
- TableOperations.processStyle(params, table);
- for (var i in params) {
- var val = params[i];
- switch (i) {
- case "f_caption":
- if (/\S/.test(val)) {
- // contains non white-space characters
- var caption = table.getElementsByTagName("caption")[0];
- if (!caption) {
- caption = dialog.editor._doc.createElement("caption");
- table.insertBefore(caption, table.firstChild);
- }
- caption.innerHTML = val;
- } else {
- // search for caption and delete it if found
- var caption = table.getElementsByTagName("caption")[0];
- if (caption) {
- caption.parentNode.removeChild(caption);
- }
- }
- break;
- case "f_summary":
- table.summary = val;
- break;
- case "f_width":
- table.style.width = ("" + val) + params.f_unit;
- break;
- case "f_align":
- table.align = val;
- break;
- case "f_spacing":
- table.cellSpacing = val;
- break;
- case "f_padding":
- table.cellPadding = val;
- break;
- case "f_borders":
- table.border = val;
- break;
- case "f_frames":
- table.frame = val;
- break;
- case "f_rules":
- table.rules = val;
- break;
- }
- }
- // various workarounds to refresh the table display (Gecko,
- // what's going on?! do not disappoint me!)
- dialog.editor.forceRedraw();
- dialog.editor.focusEditor();
- dialog.editor.updateToolbar();
- var save_collapse = table.style.borderCollapse;
- table.style.borderCollapse = "collapse";
- table.style.borderCollapse = "separate";
- table.style.borderCollapse = save_collapse;
- },
-
- // this function gets called when the dialog needs to be initialized
- function (dialog) {
-
- var f_caption = "";
- var capel = table.getElementsByTagName("caption")[0];
- if (capel) {
- f_caption = capel.innerHTML;
- }
- var f_summary = table.summary;
- var f_width = parseInt(table.style.width);
- isNaN(f_width) && (f_width = "");
- var f_unit = /%/.test(table.style.width) ? 'percent' : 'pixels';
- var f_align = table.align;
- var f_spacing = table.cellSpacing;
- var f_padding = table.cellPadding;
- var f_borders = table.border;
- var f_frames = table.frame;
- var f_rules = table.rules;
-
- function selected(val) {
- return val ? " selected" : "";
- };
-
- // dialog contents
- dialog.content.style.width = "400px";
- dialog.content.innerHTML = " \
-<div class='title'\
- style='background: url(" + dialog.baseURL + dialog.editor.imgURL("table-prop.gif", "TableOperations") + ") #fff 98% 50% no-repeat'>" + i18n["Table Properties"] + "\
-</div> \
-<table style='width:100%'> \
- <tr> \
- <td> \
- <fieldset><legend>" + i18n["Description"] + "</legend> \
- <table style='width:100%'> \
- <tr> \
- <td class='label'>" + i18n["Caption"] + ":</td> \
- <td class='value'><input type='text' name='f_caption' value='" + f_caption + "'/></td> \
- </tr><tr> \
- <td class='label'>" + i18n["Summary"] + ":</td> \
- <td class='value'><input type='text' name='f_summary' value='" + f_summary + "'/></td> \
- </tr> \
- </table> \
- </fieldset> \
- </td> \
- </tr> \
- <tr><td id='--HA-layout'></td></tr> \
- <tr> \
- <td> \
- <fieldset><legend>" + i18n["Spacing and padding"] + "</legend> \
- <table style='width:100%'> \
-"+// <tr> \
-// <td class='label'>" + i18n["Width"] + ":</td> \
-// <td><input type='text' name='f_width' value='" + f_width + "' size='5' /> \
-// <select name='f_unit'> \
-// <option value='%'" + selected(f_unit == "percent") + ">" + i18n["percent"] + "</option> \
-// <option value='px'" + selected(f_unit == "pixels") + ">" + i18n["pixels"] + "</option> \
-// </select> " + i18n["Align"] + ": \
-// <select name='f_align'> \
-// <option value='left'" + selected(f_align == "left") + ">" + i18n["Left"] + "</option> \
-// <option value='center'" + selected(f_align == "center") + ">" + i18n["Center"] + "</option> \
-// <option value='right'" + selected(f_align == "right") + ">" + i18n["Right"] + "</option> \
-// </select> \
-// </td> \
-// </tr> \
-" <tr> \
- <td class='label'>" + i18n["Spacing"] + ":</td> \
- <td><input type='text' name='f_spacing' size='5' value='" + f_spacing + "' /> " + i18n["Padding"] + ":\
- <input type='text' name='f_padding' size='5' value='" + f_padding + "' /> " + i18n["pixels"] + "\
- </td> \
- </tr> \
- </table> \
- </fieldset> \
- </td> \
- </tr> \
- <tr> \
- <td> \
- <fieldset><legend>Frame and borders</legend> \
- <table width='100%'> \
- <tr> \
- <td class='label'>" + i18n["Borders"] + ":</td> \
- <td><input name='f_borders' type='text' size='5' value='" + f_borders + "' /> " + i18n["pixels"] + "</td> \
- </tr> \
- <tr> \
- <td class='label'>" + i18n["Frames"] + ":</td> \
- <td> \
- <select name='f_frames'> \
- <option value='void'" + selected(f_frames == "void") + ">" + i18n["No sides"] + "</option> \
- <option value='above'" + selected(f_frames == "above") + ">" + i18n["The top side only"] + "</option> \
- <option value='below'" + selected(f_frames == "below") + ">" + i18n["The bottom side only"] + "</option> \
- <option value='hsides'" + selected(f_frames == "hsides") + ">" + i18n["The top and bottom sides only"] + "</option> \
- <option value='vsides'" + selected(f_frames == "vsides") + ">" + i18n["The right and left sides only"] + "</option> \
- <option value='lhs'" + selected(f_frames == "lhs") + ">" + i18n["The left-hand side only"] + "</option> \
- <option value='rhs'" + selected(f_frames == "rhs") + ">" + i18n["The right-hand side only"] + "</option> \
- <option value='box'" + selected(f_frames == "box") + ">" + i18n["All four sides"] + "</option> \
- </select> \
- </td> \
- </tr> \
- <tr> \
- <td class='label'>" + i18n["Rules"] + ":</td> \
- <td> \
- <select name='f_rules'> \
- <option value='none'" + selected(f_rules == "none") + ">" + i18n["No rules"] + "</option> \
- <option value='rows'" + selected(f_rules == "rows") + ">" + i18n["Rules will appear between rows only"] + "</option> \
- <option value='cols'" + selected(f_rules == "cols") + ">" + i18n["Rules will appear between columns only"] + "</option> \
- <option value='all'" + selected(f_rules == "all") + ">" + i18n["Rules will appear between all rows and columns"] + "</option> \
- </select> \
- </td> \
- </tr> \
- </table> \
- </fieldset> \
- </td> \
- </tr> \
- <tr> \
- <td id='--HA-style'></td> \
- </tr> \
-</table> \
-";
- var st_prop = TableOperations.createStyleFieldset(dialog.doc, dialog.editor, table);
- var p = dialog.doc.getElementById("--HA-style");
- p.appendChild(st_prop);
- var st_layout = TableOperations.createStyleLayoutFieldset(dialog.doc, dialog.editor, table);
- p = dialog.doc.getElementById("--HA-layout");
- p.appendChild(st_layout);
- dialog.modal = true;
- dialog.addButtons("ok", "cancel");
- dialog.showAtElement(dialog.editor._iframe, "c");
- });
-};
-
-// this function requires the file PopupDiv/PopupWin to be loaded from browser
-TableOperations.prototype.dialogRowCellProperties = function(cell) {
- var i18n = TableOperations.I18N;
- // retrieve existing values
- var element = this.getClosest(cell ? "td" : "tr");
- var table = this.getClosest("table");
- // this.editor.selectNodeContents(element);
- // this.editor.updateToolbar();
-
- var dialog = new PopupWin(this.editor, i18n[cell ? "Cell Properties" : "Row Properties"], function(dialog, params) {
- TableOperations.processStyle(params, element);
- for (var i in params) {
- var val = params[i];
- switch (i) {
- case "f_align":
- element.align = val;
- break;
- case "f_char":
- element.ch = val;
- break;
- case "f_valign":
- element.vAlign = val;
- break;
- }
- }
- // various workarounds to refresh the table display (Gecko,
- // what's going on?! do not disappoint me!)
- dialog.editor.forceRedraw();
- dialog.editor.focusEditor();
- dialog.editor.updateToolbar();
- var save_collapse = table.style.borderCollapse;
- table.style.borderCollapse = "collapse";
- table.style.borderCollapse = "separate";
- table.style.borderCollapse = save_collapse;
- },
-
- // this function gets called when the dialog needs to be initialized
- function (dialog) {
-
- var f_align = element.align;
- var f_valign = element.vAlign;
- var f_char = element.ch;
-
- function selected(val) {
- return val ? " selected" : "";
- };
-
- // dialog contents
- dialog.content.style.width = "400px";
- dialog.content.innerHTML = " \
-<div class='title'\
- style='background: url(" + dialog.baseURL + dialog.editor.imgURL(cell ? "cell-prop.gif" : "row-prop.gif", "TableOperations") + ") #fff 98% 50% no-repeat'>" + i18n[cell ? "Cell Properties" : "Row Properties"] + "</div> \
-<table style='width:100%'> \
- <tr> \
- <td id='--HA-layout'> \
-"+// <fieldset><legend>" + i18n["Layout"] + "</legend> \
-// <table style='width:100%'> \
-// <tr> \
-// <td class='label'>" + i18n["Align"] + ":</td> \
-// <td> \
-// <select name='f_align'> \
-// <option value='left'" + selected(f_align == "left") + ">" + i18n["Left"] + "</option> \
-// <option value='center'" + selected(f_align == "center") + ">" + i18n["Center"] + "</option> \
-// <option value='right'" + selected(f_align == "right") + ">" + i18n["Right"] + "</option> \
-// <option value='char'" + selected(f_align == "char") + ">" + i18n["Char"] + "</option> \
-// </select> \
-// " + i18n["Char"] + ": \
-// <input type='text' style='font-family: monospace; text-align: center' name='f_char' size='1' value='" + f_char + "' /> \
-// </td> \
-// </tr><tr> \
-// <td class='label'>" + i18n["Vertical align"] + ":</td> \
-// <td> \
-// <select name='f_valign'> \
-// <option value='top'" + selected(f_valign == "top") + ">" + i18n["Top"] + "</option> \
-// <option value='middle'" + selected(f_valign == "middle") + ">" + i18n["Middle"] + "</option> \
-// <option value='bottom'" + selected(f_valign == "bottom") + ">" + i18n["Bottom"] + "</option> \
-// <option value='baseline'" + selected(f_valign == "baseline") + ">" + i18n["Baseline"] + "</option> \
-// </select> \
-// </td> \
-// </tr> \
-// </table> \
-// </fieldset> \
-" </td> \
- </tr> \
- <tr> \
- <td id='--HA-style'></td> \
- </tr> \
-</table> \
-";
- var st_prop = TableOperations.createStyleFieldset(dialog.doc, dialog.editor, element);
- var p = dialog.doc.getElementById("--HA-style");
- p.appendChild(st_prop);
- var st_layout = TableOperations.createStyleLayoutFieldset(dialog.doc, dialog.editor, element);
- p = dialog.doc.getElementById("--HA-layout");
- p.appendChild(st_layout);
- dialog.modal = true;
- dialog.addButtons("ok", "cancel");
- dialog.showAtElement(dialog.editor._iframe, "c");
- });
-};
-
-// this function gets called when some button from the TableOperations toolbar
-// was pressed.
-TableOperations.prototype.buttonPress = function(editor, button_id) {
- this.editor = editor;
- var mozbr = HTMLArea.is_gecko ? "<br />" : "";
- var i18n = TableOperations.I18N;
-
- // helper function that clears the content in a table row
- function clearRow(tr) {
- var tds = tr.getElementsByTagName("td");
- for (var i = tds.length; --i >= 0;) {
- var td = tds[i];
- td.rowSpan = 1;
- td.innerHTML = mozbr;
- }
- };
-
- function splitRow(td) {
- var n = parseInt("" + td.rowSpan);
- var nc = parseInt("" + td.colSpan);
- td.rowSpan = 1;
- tr = td.parentNode;
- var itr = tr.rowIndex;
- var trs = tr.parentNode.rows;
- var index = td.cellIndex;
- while (--n > 0) {
- tr = trs[++itr];
- var otd = editor._doc.createElement("td");
- otd.colSpan = td.colSpan;
- otd.innerHTML = mozbr;
- tr.insertBefore(otd, tr.cells[index]);
- }
- editor.forceRedraw();
- editor.updateToolbar();
- };
-
- function splitCol(td) {
- var nc = parseInt("" + td.colSpan);
- td.colSpan = 1;
- tr = td.parentNode;
- var ref = td.nextSibling;
- while (--nc > 0) {
- var otd = editor._doc.createElement("td");
- otd.rowSpan = td.rowSpan;
- otd.innerHTML = mozbr;
- tr.insertBefore(otd, ref);
- }
- editor.forceRedraw();
- editor.updateToolbar();
- };
-
- function splitCell(td) {
- var nc = parseInt("" + td.colSpan);
- splitCol(td);
- var items = td.parentNode.cells;
- var index = td.cellIndex;
- while (nc-- > 0) {
- splitRow(items[index++]);
- }
- };
-
- function selectNextNode(el) {
- var node = el.nextSibling;
- while (node && node.nodeType != 1) {
- node = node.nextSibling;
- }
- if (!node) {
- node = el.previousSibling;
- while (node && node.nodeType != 1) {
- node = node.previousSibling;
- }
- }
- if (!node) {
- node = el.parentNode;
- }
- editor.selectNodeContents(node);
- };
-
- switch (button_id) {
- // ROWS
-
- case "TO-row-insert-above":
- case "TO-row-insert-under":
- var tr = this.getClosest("tr");
- if (!tr) {
- break;
- }
- var otr = tr.cloneNode(true);
- clearRow(otr);
- tr.parentNode.insertBefore(otr, /under/.test(button_id) ? tr.nextSibling : tr);
- editor.forceRedraw();
- editor.focusEditor();
- break;
- case "TO-row-delete":
- var tr = this.getClosest("tr");
- if (!tr) {
- break;
- }
- var par = tr.parentNode;
- if (par.rows.length == 1) {
- alert(i18n["not-del-last-row"]);
- break;
- }
- // set the caret first to a position that doesn't
- // disappear.
- selectNextNode(tr);
- par.removeChild(tr);
- editor.forceRedraw();
- editor.focusEditor();
- editor.updateToolbar();
- break;
- case "TO-row-split":
- var td = this.getClosest("td");
- if (!td) {
- break;
- }
- splitRow(td);
- break;
-
- // COLUMNS
-
- case "TO-col-insert-before":
- case "TO-col-insert-after":
- var td = this.getClosest("td");
- if (!td) {
- break;
- }
- var rows = td.parentNode.parentNode.rows;
- var index = td.cellIndex;
- for (var i = rows.length; --i >= 0;) {
- var tr = rows[i];
- var ref = tr.cells[index + (/after/.test(button_id) ? 1 : 0)];
- var otd = editor._doc.createElement("td");
- otd.innerHTML = mozbr;
- tr.insertBefore(otd, ref);
- }
- editor.focusEditor();
- break;
- case "TO-col-split":
- var td = this.getClosest("td");
- if (!td) {
- break;
- }
- splitCol(td);
- break;
- case "TO-col-delete":
- var td = this.getClosest("td");
- if (!td) {
- break;
- }
- var index = td.cellIndex;
- if (td.parentNode.cells.length == 1) {
- alert(i18n["not-del-last-col"]);
- break;
- }
- // set the caret first to a position that doesn't disappear
- selectNextNode(td);
- var rows = td.parentNode.parentNode.rows;
- for (var i = rows.length; --i >= 0;) {
- var tr = rows[i];
- tr.removeChild(tr.cells[index]);
- }
- editor.forceRedraw();
- editor.focusEditor();
- editor.updateToolbar();
- break;
-
- // CELLS
-
- case "TO-cell-split":
- var td = this.getClosest("td");
- if (!td) {
- break;
- }
- splitCell(td);
- break;
- case "TO-cell-insert-before":
- case "TO-cell-insert-after":
- var td = this.getClosest("td");
- if (!td) {
- break;
- }
- var tr = td.parentNode;
- var otd = editor._doc.createElement("td");
- otd.innerHTML = mozbr;
- tr.insertBefore(otd, /after/.test(button_id) ? td.nextSibling : td);
- editor.forceRedraw();
- editor.focusEditor();
- break;
- case "TO-cell-delete":
- var td = this.getClosest("td");
- if (!td) {
- break;
- }
- if (td.parentNode.cells.length == 1) {
- alert(i18n["not-del-last-cell"]);
- break;
- }
- // set the caret first to a position that doesn't disappear
- selectNextNode(td);
- td.parentNode.removeChild(td);
- editor.forceRedraw();
- editor.updateToolbar();
- break;
- case "TO-cell-merge":
- // !! FIXME: Mozilla specific !!
- var sel = editor._getSelection();
- var range, i = 0;
- var rows = [];
- var row = null;
- var cells = null;
- if (!HTMLArea.is_ie) {
- try {
- while (range = sel.getRangeAt(i++)) {
- var td = range.startContainer.childNodes[range.startOffset];
- if (td.parentNode != row) {
- row = td.parentNode;
- (cells) && rows.push(cells);
- cells = [];
- }
- cells.push(td);
- }
- } catch(e) {/* finished walking through selection */}
- rows.push(cells);
- } else {
- // Internet Explorer "browser"
- var td = this.getClosest("td");
- if (!td) {
- alert(i18n["Please click into some cell"]);
- break;
- }
- var tr = td.parentElement;
- var no_cols = prompt(i18n["How many columns would you like to merge?"], 2);
- if (!no_cols) {
- // cancelled
- break;
- }
- var no_rows = prompt(i18n["How many rows would you like to merge?"], 2);
- if (!no_rows) {
- // cancelled
- break;
- }
- var cell_index = td.cellIndex;
- while (no_rows-- > 0) {
- td = tr.cells[cell_index];
- cells = [td];
- for (var i = 1; i < no_cols; ++i) {
- td = td.nextSibling;
- if (!td) {
- break;
- }
- cells.push(td);
- }
- rows.push(cells);
- tr = tr.nextSibling;
- if (!tr) {
- break;
- }
- }
- }
- var HTML = "";
- for (i = 0; i < rows.length; ++i) {
- // i && (HTML += "<br />");
- var cells = rows[i];
- for (var j = 0; j < cells.length; ++j) {
- // j && (HTML += " ");
- var cell = cells[j];
- HTML += cell.innerHTML;
- (i || j) && (cell.parentNode.removeChild(cell));
- }
- }
- var td = rows[0][0];
- td.innerHTML = HTML;
- td.rowSpan = rows.length;
- td.colSpan = rows[0].length;
- editor.selectNodeContents(td);
- editor.forceRedraw();
- editor.focusEditor();
- break;
-
- // PROPERTIES
-
- case "TO-table-prop":
- this.dialogTableProperties();
- break;
-
- case "TO-row-prop":
- this.dialogRowCellProperties(false);
- break;
-
- case "TO-cell-prop":
- this.dialogRowCellProperties(true);
- break;
-
- default:
- alert("Button [" + button_id + "] not yet implemented");
- }
-};
-
-// the list of buttons added by this plugin
-TableOperations.btnList = [
- // table properties button
- ["table-prop", "table"],
- null, // separator
-
- // ROWS
- ["row-prop", "tr"],
- ["row-insert-above", "tr"],
- ["row-insert-under", "tr"],
- ["row-delete", "tr"],
- ["row-split", "td[rowSpan!=1]"],
- null,
-
- // COLS
- ["col-insert-before", "td"],
- ["col-insert-after", "td"],
- ["col-delete", "td"],
- ["col-split", "td[colSpan!=1]"],
- null,
-
- // CELLS
- ["cell-prop", "td"],
- ["cell-insert-before", "td"],
- ["cell-insert-after", "td"],
- ["cell-delete", "td"],
- ["cell-merge", "tr"],
- ["cell-split", "td[colSpan!=1,rowSpan!=1]"]
- ];
-
-
-
-//// GENERIC CODE [style of any element; this should be moved into a separate
-//// file as it'll be very useful]
-//// BEGIN GENERIC CODE -----------------------------------------------------
-
-TableOperations.getLength = function(value) {
- var len = parseInt(value);
- if (isNaN(len)) {
- len = "";
- }
- return len;
-};
-
-// Applies the style found in "params" to the given element.
-TableOperations.processStyle = function(params, element) {
- var style = element.style;
- for (var i in params) {
- var val = params[i];
- switch (i) {
- case "f_st_backgroundColor":
- style.backgroundColor = val;
- break;
- case "f_st_color":
- style.color = val;
- break;
- case "f_st_backgroundImage":
- if (/\S/.test(val)) {
- style.backgroundImage = "url(" + val + ")";
- } else {
- style.backgroundImage = "none";
- }
- break;
- case "f_st_borderWidth":
- style.borderWidth = val;
- break;
- case "f_st_borderStyle":
- style.borderStyle = val;
- break;
- case "f_st_borderColor":
- style.borderColor = val;
- break;
- case "f_st_borderCollapse":
- style.borderCollapse = val ? "collapse" : "";
- break;
- case "f_st_width":
- if (/\S/.test(val)) {
- style.width = val + params["f_st_widthUnit"];
- } else {
- style.width = "";
- }
- break;
- case "f_st_height":
- if (/\S/.test(val)) {
- style.height = val + params["f_st_heightUnit"];
- } else {
- style.height = "";
- }
- break;
- case "f_st_textAlign":
- if (val == "char") {
- var ch = params["f_st_textAlignChar"];
- if (ch == '"') {
- ch = '\\"';
- }
- style.textAlign = '"' + ch + '"';
- } else {
- style.textAlign = val;
- }
- break;
- case "f_st_verticalAlign":
- style.verticalAlign = val;
- break;
- case "f_st_float":
- style.cssFloat = val;
- break;
-// case "f_st_margin":
-// style.margin = val + "px";
-// break;
-// case "f_st_padding":
-// style.padding = val + "px";
-// break;
- }
- }
-};
-
-// Returns an HTML element for a widget that allows color selection. That is,
-// a button that contains the given color, if any, and when pressed will popup
-// the sooner-or-later-to-be-rewritten select_color.html dialog allowing user
-// to select some color. If a color is selected, an input field with the name
-// "f_st_"+name will be updated with the color value in #123456 format.
-TableOperations.createColorButton = function(doc, editor, color, name) {
- if (!color) {
- color = "";
- } else if (!/#/.test(color)) {
- color = HTMLArea._colorToRgb(color);
- }
-
- var df = doc.createElement("span");
- var field = doc.createElement("input");
- field.type = "hidden";
- df.appendChild(field);
- field.name = "f_st_" + name;
- field.value = color;
- var button = doc.createElement("span");
- button.className = "buttonColor";
- df.appendChild(button);
- var span = doc.createElement("span");
- span.className = "chooser";
- // span.innerHTML = " ";
- span.style.backgroundColor = color;
- button.appendChild(span);
- button.onmouseover = function() { if (!this.disabled) { this.className += " buttonColor-hilite"; }};
- button.onmouseout = function() { if (!this.disabled) { this.className = "buttonColor"; }};
- span.onclick = function() {
- if (this.parentNode.disabled) {
- return false;
- }
- editor._popupDialog("select_color.html", function(color) {
- if (color) {
- span.style.backgroundColor = "#" + color;
- field.value = "#" + color;
- }
- }, color);
- };
- var span2 = doc.createElement("span");
- span2.innerHTML = "×";
- span2.className = "nocolor";
- span2.title = TableOperations.I18N["Unset color"];
- button.appendChild(span2);
- span2.onmouseover = function() { if (!this.parentNode.disabled) { this.className += " nocolor-hilite"; }};
- span2.onmouseout = function() { if (!this.parentNode.disabled) { this.className = "nocolor"; }};
- span2.onclick = function() {
- span.style.backgroundColor = "";
- field.value = "";
- };
- return df;
-};
-
-TableOperations.createStyleLayoutFieldset = function(doc, editor, el) {
- var i18n = TableOperations.I18N;
- var fieldset = doc.createElement("fieldset");
- var legend = doc.createElement("legend");
- fieldset.appendChild(legend);
- legend.innerHTML = i18n["Layout"];
- var table = doc.createElement("table");
- fieldset.appendChild(table);
- table.style.width = "100%";
- var tbody = doc.createElement("tbody");
- table.appendChild(tbody);
-
- var tagname = el.tagName.toLowerCase();
- var tr, td, input, select, option, options, i;
-
- if (tagname != "td" && tagname != "tr" && tagname != "th") {
- tr = doc.createElement("tr");
- tbody.appendChild(tr);
- td = doc.createElement("td");
- td.className = "label";
- tr.appendChild(td);
- td.innerHTML = i18n["Float"] + ":";
- td = doc.createElement("td");
- tr.appendChild(td);
- select = doc.createElement("select");
- td.appendChild(select);
- select.name = "f_st_float";
- options = ["None", "Left", "Right"];
- for (i in options) {
- var Val = options[i];
- var val = options[i].toLowerCase();
- option = doc.createElement("option");
- option.innerHTML = i18n[Val];
- option.value = val;
- option.selected = (("" + el.style.cssFloat).toLowerCase() == val);
- select.appendChild(option);
- }
- }
-
- tr = doc.createElement("tr");
- tbody.appendChild(tr);
- td = doc.createElement("td");
- td.className = "label";
- tr.appendChild(td);
- td.innerHTML = i18n["Width"] + ":";
- td = doc.createElement("td");
- tr.appendChild(td);
- input = doc.createElement("input");
- input.type = "text";
- input.value = TableOperations.getLength(el.style.width);
- input.size = "5";
- input.name = "f_st_width";
- input.style.marginRight = "0.5em";
- td.appendChild(input);
- select = doc.createElement("select");
- select.name = "f_st_widthUnit";
- option = doc.createElement("option");
- option.innerHTML = i18n["percent"];
- option.value = "%";
- option.selected = /%/.test(el.style.width);
- select.appendChild(option);
- option = doc.createElement("option");
- option.innerHTML = i18n["pixels"];
- option.value = "px";
- option.selected = /px/.test(el.style.width);
- select.appendChild(option);
- td.appendChild(select);
-
- select.style.marginRight = "0.5em";
- td.appendChild(doc.createTextNode(i18n["Text align"] + ":"));
- select = doc.createElement("select");
- select.style.marginLeft = select.style.marginRight = "0.5em";
- td.appendChild(select);
- select.name = "f_st_textAlign";
- options = ["Left", "Center", "Right", "Justify"];
- if (tagname == "td") {
- options.push("Char");
- }
- input = doc.createElement("input");
- input.name = "f_st_textAlignChar";
- input.size = "1";
- input.style.fontFamily = "monospace";
- td.appendChild(input);
- for (i in options) {
- var Val = options[i];
- var val = Val.toLowerCase();
- option = doc.createElement("option");
- option.value = val;
- option.innerHTML = i18n[Val];
- option.selected = (el.style.textAlign.toLowerCase() == val);
- select.appendChild(option);
- }
- function setCharVisibility(value) {
- input.style.visibility = value ? "visible" : "hidden";
- if (value) {
- input.focus();
- input.select();
- }
- };
- select.onchange = function() { setCharVisibility(this.value == "char"); };
- setCharVisibility(select.value == "char");
-
- tr = doc.createElement("tr");
- tbody.appendChild(tr);
- td = doc.createElement("td");
- td.className = "label";
- tr.appendChild(td);
- td.innerHTML = i18n["Height"] + ":";
- td = doc.createElement("td");
- tr.appendChild(td);
- input = doc.createElement("input");
- input.type = "text";
- input.value = TableOperations.getLength(el.style.height);
- input.size = "5";
- input.name = "f_st_height";
- input.style.marginRight = "0.5em";
- td.appendChild(input);
- select = doc.createElement("select");
- select.name = "f_st_heightUnit";
- option = doc.createElement("option");
- option.innerHTML = i18n["percent"];
- option.value = "%";
- option.selected = /%/.test(el.style.height);
- select.appendChild(option);
- option = doc.createElement("option");
- option.innerHTML = i18n["pixels"];
- option.value = "px";
- option.selected = /px/.test(el.style.height);
- select.appendChild(option);
- td.appendChild(select);
-
- select.style.marginRight = "0.5em";
- td.appendChild(doc.createTextNode(i18n["Vertical align"] + ":"));
- select = doc.createElement("select");
- select.name = "f_st_verticalAlign";
- select.style.marginLeft = "0.5em";
- td.appendChild(select);
- options = ["Top", "Middle", "Bottom", "Baseline"];
- for (i in options) {
- var Val = options[i];
- var val = Val.toLowerCase();
- option = doc.createElement("option");
- option.value = val;
- option.innerHTML = i18n[Val];
- option.selected = (el.style.verticalAlign.toLowerCase() == val);
- select.appendChild(option);
- }
-
- return fieldset;
-};
-
-// Returns an HTML element containing the style attributes for the given
-// element. This can be easily embedded into any dialog; the functionality is
-// also provided.
-TableOperations.createStyleFieldset = function(doc, editor, el) {
- var i18n = TableOperations.I18N;
- var fieldset = doc.createElement("fieldset");
- var legend = doc.createElement("legend");
- fieldset.appendChild(legend);
- legend.innerHTML = i18n["CSS Style"];
- var table = doc.createElement("table");
- fieldset.appendChild(table);
- table.style.width = "100%";
- var tbody = doc.createElement("tbody");
- table.appendChild(tbody);
-
- var tr, td, input, select, option, options, i;
-
- tr = doc.createElement("tr");
- tbody.appendChild(tr);
- td = doc.createElement("td");
- tr.appendChild(td);
- td.className = "label";
- td.innerHTML = i18n["Background"] + ":";
- td = doc.createElement("td");
- tr.appendChild(td);
- var df = TableOperations.createColorButton(doc, editor, el.style.backgroundColor, "backgroundColor");
- df.firstChild.nextSibling.style.marginRight = "0.5em";
- td.appendChild(df);
- td.appendChild(doc.createTextNode(i18n["Image URL"] + ": "));
- input = doc.createElement("input");
- input.type = "text";
- input.name = "f_st_backgroundImage";
- if (el.style.backgroundImage.match(/url\(\s*(.*?)\s*\)/)) {
- input.value = RegExp.$1;
- }
- // input.style.width = "100%";
- td.appendChild(input);
-
- tr = doc.createElement("tr");
- tbody.appendChild(tr);
- td = doc.createElement("td");
- tr.appendChild(td);
- td.className = "label";
- td.innerHTML = i18n["FG Color"] + ":";
- td = doc.createElement("td");
- tr.appendChild(td);
- td.appendChild(TableOperations.createColorButton(doc, editor, el.style.color, "color"));
-
- // for better alignment we include an invisible field.
- input = doc.createElement("input");
- input.style.visibility = "hidden";
- input.type = "text";
- td.appendChild(input);
-
- tr = doc.createElement("tr");
- tbody.appendChild(tr);
- td = doc.createElement("td");
- tr.appendChild(td);
- td.className = "label";
- td.innerHTML = i18n["Border"] + ":";
- td = doc.createElement("td");
- tr.appendChild(td);
-
- var colorButton = TableOperations.createColorButton(doc, editor, el.style.borderColor, "borderColor");
- var btn = colorButton.firstChild.nextSibling;
- td.appendChild(colorButton);
- // borderFields.push(btn);
- btn.style.marginRight = "0.5em";
-
- select = doc.createElement("select");
- var borderFields = [];
- td.appendChild(select);
- select.name = "f_st_borderStyle";
- options = ["none", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"];
- var currentBorderStyle = el.style.borderStyle;
- // Gecko reports "solid solid solid solid" for "border-style: solid".
- // That is, "top right bottom left" -- we only consider the first
- // value.
- (currentBorderStyle.match(/([^\s]*)\s/)) && (currentBorderStyle = RegExp.$1);
- for (i in options) {
- var val = options[i];
- option = doc.createElement("option");
- option.value = val;
- option.innerHTML = val;
- (val == currentBorderStyle) && (option.selected = true);
- select.appendChild(option);
- }
- select.style.marginRight = "0.5em";
- function setBorderFieldsStatus(value) {
- for (i in borderFields) {
- var el = borderFields[i];
- el.style.visibility = value ? "hidden" : "visible";
- if (!value && (el.tagName.toLowerCase() == "input")) {
- el.focus();
- el.select();
- }
- }
- };
- select.onchange = function() { setBorderFieldsStatus(this.value == "none"); };
-
- input = doc.createElement("input");
- borderFields.push(input);
- input.type = "text";
- input.name = "f_st_borderWidth";
- input.value = TableOperations.getLength(el.style.borderWidth);
- input.size = "5";
- td.appendChild(input);
- input.style.marginRight = "0.5em";
- var span = doc.createElement("span");
- span.innerHTML = i18n["pixels"];
- td.appendChild(span);
- borderFields.push(span);
-
- setBorderFieldsStatus(select.value == "none");
-
- if (el.tagName.toLowerCase() == "table") {
- // the border-collapse style is only for tables
- tr = doc.createElement("tr");
- tbody.appendChild(tr);
- td = doc.createElement("td");
- td.className = "label";
- tr.appendChild(td);
- input = doc.createElement("input");
- input.type = "checkbox";
- input.name = "f_st_borderCollapse";
- input.id = "f_st_borderCollapse";
- var val = (/collapse/i.test(el.style.borderCollapse));
- input.checked = val ? 1 : 0;
- td.appendChild(input);
-
- td = doc.createElement("td");
- tr.appendChild(td);
- var label = doc.createElement("label");
- label.htmlFor = "f_st_borderCollapse";
- label.innerHTML = i18n["Collapsed borders"];
- td.appendChild(label);
- }
-
-// tr = doc.createElement("tr");
-// tbody.appendChild(tr);
-// td = doc.createElement("td");
-// td.className = "label";
-// tr.appendChild(td);
-// td.innerHTML = i18n["Margin"] + ":";
-// td = doc.createElement("td");
-// tr.appendChild(td);
-// input = doc.createElement("input");
-// input.type = "text";
-// input.size = "5";
-// input.name = "f_st_margin";
-// td.appendChild(input);
-// input.style.marginRight = "0.5em";
-// td.appendChild(doc.createTextNode(i18n["Padding"] + ":"));
-
-// input = doc.createElement("input");
-// input.type = "text";
-// input.size = "5";
-// input.name = "f_st_padding";
-// td.appendChild(input);
-// input.style.marginLeft = "0.5em";
-// input.style.marginRight = "0.5em";
-// td.appendChild(doc.createTextNode(i18n["pixels"]));
-
- return fieldset;
-};
-
-//// END GENERIC CODE -------------------------------------------------------
+// Table Operations Plugin for HTMLArea-3.0
+// Implementation by Mihai Bazon. Sponsored by http://www.zapatec.com
+//
+// Copyright (c) dynarch.com 2003-2005
+// This copyright notice must stay intact for use.
+//
+// $Id: table-operations.js,v 1.7 2005/01/20 17:49:02 mishoo Exp $
+
+// Object that will encapsulate all the table operations provided by
+// HTMLArea-3.0 (except "insert table" which is included in the main file)
+function TableOperations(editor) {
+ this.editor = editor;
+
+ var cfg = editor.config;
+ var tt = TableOperations.I18N;
+ var bl = TableOperations.btnList;
+ var self = this;
+
+ // register the toolbar buttons provided by this plugin
+ var toolbar = ["linebreak"];
+ for (var i = 0; i < bl.length; ++i) {
+ var btn = bl[i];
+ if (!btn) {
+ toolbar.push("separator");
+ } else {
+ var id = "TO-" + btn[0];
+ cfg.registerButton(id, tt[id], editor.imgURL(btn[0] + ".gif", "TableOperations"), false,
+ function(editor, id) {
+ // dispatch button press event
+ self.buttonPress(editor, id);
+ }, btn[1]);
+ toolbar.push(id);
+ }
+ }
+
+ // add a new line in the toolbar
+ cfg.toolbar.push(toolbar);
+};
+
+TableOperations._pluginInfo = {
+ name : "TableOperations",
+ version : "1.0",
+ developer : "Mihai Bazon",
+ developer_url : "http://dynarch.com/mishoo/",
+ c_owner : "Mihai Bazon",
+ sponsor : "Zapatec Inc.",
+ sponsor_url : "http://www.bloki.com",
+ license : "htmlArea"
+};
+
+/************************
+ * UTILITIES
+ ************************/
+
+// retrieves the closest element having the specified tagName in the list of
+// ancestors of the current selection/caret.
+TableOperations.prototype.getClosest = function(tagName) {
+ var editor = this.editor;
+ var ancestors = editor.getAllAncestors();
+ var ret = null;
+ tagName = ("" + tagName).toLowerCase();
+ for (var i = 0; i < ancestors.length; ++i) {
+ var el = ancestors[i];
+ if (el.tagName.toLowerCase() == tagName) {
+ ret = el;
+ break;
+ }
+ }
+ return ret;
+};
+
+// this function requires the file PopupDiv/PopupWin to be loaded from browser
+TableOperations.prototype.dialogTableProperties = function() {
+ var i18n = TableOperations.I18N;
+ // retrieve existing values
+ var table = this.getClosest("table");
+ // this.editor.selectNodeContents(table);
+ // this.editor.updateToolbar();
+
+ var dialog = new PopupWin(this.editor, i18n["Table Properties"], function(dialog, params) {
+ TableOperations.processStyle(params, table);
+ for (var i in params) {
+ var val = params[i];
+ switch (i) {
+ case "f_caption":
+ if (/\S/.test(val)) {
+ // contains non white-space characters
+ var caption = table.getElementsByTagName("caption")[0];
+ if (!caption) {
+ caption = dialog.editor._doc.createElement("caption");
+ table.insertBefore(caption, table.firstChild);
+ }
+ caption.innerHTML = val;
+ } else {
+ // search for caption and delete it if found
+ var caption = table.getElementsByTagName("caption")[0];
+ if (caption) {
+ caption.parentNode.removeChild(caption);
+ }
+ }
+ break;
+ case "f_summary":
+ table.summary = val;
+ break;
+ case "f_width":
+ table.style.width = ("" + val) + params.f_unit;
+ break;
+ case "f_align":
+ table.align = val;
+ break;
+ case "f_spacing":
+ table.cellSpacing = val;
+ break;
+ case "f_padding":
+ table.cellPadding = val;
+ break;
+ case "f_borders":
+ table.border = val;
+ break;
+ case "f_frames":
+ table.frame = val;
+ break;
+ case "f_rules":
+ table.rules = val;
+ break;
+ }
+ }
+ // various workarounds to refresh the table display (Gecko,
+ // what's going on?! do not disappoint me!)
+ dialog.editor.forceRedraw();
+ dialog.editor.focusEditor();
+ dialog.editor.updateToolbar();
+ var save_collapse = table.style.borderCollapse;
+ table.style.borderCollapse = "collapse";
+ table.style.borderCollapse = "separate";
+ table.style.borderCollapse = save_collapse;
+ },
+
+ // this function gets called when the dialog needs to be initialized
+ function (dialog) {
+
+ var f_caption = "";
+ var capel = table.getElementsByTagName("caption")[0];
+ if (capel) {
+ f_caption = capel.innerHTML;
+ }
+ var f_summary = table.summary;
+ var f_width = parseInt(table.style.width);
+ isNaN(f_width) && (f_width = "");
+ var f_unit = /%/.test(table.style.width) ? 'percent' : 'pixels';
+ var f_align = table.align;
+ var f_spacing = table.cellSpacing;
+ var f_padding = table.cellPadding;
+ var f_borders = table.border;
+ var f_frames = table.frame;
+ var f_rules = table.rules;
+
+ function selected(val) {
+ return val ? " selected" : "";
+ };
+
+ // dialog contents
+ dialog.content.style.width = "400px";
+ dialog.content.innerHTML = " \
+<div class='title'\
+ style='background: url(" + dialog.baseURL + dialog.editor.imgURL("table-prop.gif", "TableOperations") + ") #fff 98% 50% no-repeat'>" + i18n["Table Properties"] + "\
+</div> \
+<table style='width:100%'> \
+ <tr> \
+ <td> \
+ <fieldset><legend>" + i18n["Description"] + "</legend> \
+ <table style='width:100%'> \
+ <tr> \
+ <td class='label'>" + i18n["Caption"] + ":</td> \
+ <td class='value'><input type='text' name='f_caption' value='" + f_caption + "'/></td> \
+ </tr><tr> \
+ <td class='label'>" + i18n["Summary"] + ":</td> \
+ <td class='value'><input type='text' name='f_summary' value='" + f_summary + "'/></td> \
+ </tr> \
+ </table> \
+ </fieldset> \
+ </td> \
+ </tr> \
+ <tr><td id='--HA-layout'></td></tr> \
+ <tr> \
+ <td> \
+ <fieldset><legend>" + i18n["Spacing and padding"] + "</legend> \
+ <table style='width:100%'> \
+ <tr> \
+ <td class='label'>" + i18n["Spacing"] + ":</td> \
+ <td><input type='text' name='f_spacing' size='5' value='" + f_spacing + "' /> " + i18n["Padding"] + ":\
+ <input type='text' name='f_padding' size='5' value='" + f_padding + "' /> " + i18n["pixels"] + "\
+ </td> \
+ </tr> \
+ </table> \
+ </fieldset> \
+ </td> \
+ </tr> \
+ <tr> \
+ <td> \
+ <fieldset><legend>Frame and borders</legend> \
+ <table width='100%'> \
+ <tr> \
+ <td class='label'>" + i18n["Borders"] + ":</td> \
+ <td><input name='f_borders' type='text' size='5' value='" + f_borders + "' /> " + i18n["pixels"] + "</td> \
+ </tr> \
+ <tr> \
+ <td class='label'>" + i18n["Frames"] + ":</td> \
+ <td> \
+ <select name='f_frames'> \
+ <option value='void'" + selected(f_frames == "void") + ">" + i18n["No sides"] + "</option> \
+ <option value='above'" + selected(f_frames == "above") + ">" + i18n["The top side only"] + "</option> \
+ <option value='below'" + selected(f_frames == "below") + ">" + i18n["The bottom side only"] + "</option> \
+ <option value='hsides'" + selected(f_frames == "hsides") + ">" + i18n["The top and bottom sides only"] + "</option> \
+ <option value='vsides'" + selected(f_frames == "vsides") + ">" + i18n["The right and left sides only"] + "</option> \
+ <option value='lhs'" + selected(f_frames == "lhs") + ">" + i18n["The left-hand side only"] + "</option> \
+ <option value='rhs'" + selected(f_frames == "rhs") + ">" + i18n["The right-hand side only"] + "</option> \
+ <option value='box'" + selected(f_frames == "box") + ">" + i18n["All four sides"] + "</option> \
+ </select> \
+ </td> \
+ </tr> \
+ <tr> \
+ <td class='label'>" + i18n["Rules"] + ":</td> \
+ <td> \
+ <select name='f_rules'> \
+ <option value='none'" + selected(f_rules == "none") + ">" + i18n["No rules"] + "</option> \
+ <option value='rows'" + selected(f_rules == "rows") + ">" + i18n["Rules will appear between rows only"] + "</option> \
+ <option value='cols'" + selected(f_rules == "cols") + ">" + i18n["Rules will appear between columns only"] + "</option> \
+ <option value='all'" + selected(f_rules == "all") + ">" + i18n["Rules will appear between all rows and columns"] + "</option> \
+ </select> \
+ </td> \
+ </tr> \
+ </table> \
+ </fieldset> \
+ </td> \
+ </tr> \
+ <tr> \
+ <td id='--HA-style'></td> \
+ </tr> \
+</table> \
+";
+ var st_prop = TableOperations.createStyleFieldset(dialog.doc, dialog.editor, table);
+ var p = dialog.doc.getElementById("--HA-style");
+ p.appendChild(st_prop);
+ var st_layout = TableOperations.createStyleLayoutFieldset(dialog.doc, dialog.editor, table);
+ p = dialog.doc.getElementById("--HA-layout");
+ p.appendChild(st_layout);
+ dialog.modal = true;
+ dialog.addButtons("ok", "cancel");
+ dialog.showAtElement(dialog.editor._iframe, "c");
+ });
+};
+
+// this function requires the file PopupDiv/PopupWin to be loaded from browser
+TableOperations.prototype.dialogRowCellProperties = function(cell) {
+ var i18n = TableOperations.I18N;
+ // retrieve existing values
+ var element = this.getClosest(cell ? "td" : "tr");
+ var table = this.getClosest("table");
+ // this.editor.selectNodeContents(element);
+ // this.editor.updateToolbar();
+
+ var dialog = new PopupWin(this.editor, i18n[cell ? "Cell Properties" : "Row Properties"], function(dialog, params) {
+ TableOperations.processStyle(params, element);
+ for (var i in params) {
+ var val = params[i];
+ switch (i) {
+ case "f_align":
+ element.align = val;
+ break;
+ case "f_char":
+ element.ch = val;
+ break;
+ case "f_valign":
+ element.vAlign = val;
+ break;
+ }
+ }
+ // various workarounds to refresh the table display (Gecko,
+ // what's going on?! do not disappoint me!)
+ dialog.editor.forceRedraw();
+ dialog.editor.focusEditor();
+ dialog.editor.updateToolbar();
+ var save_collapse = table.style.borderCollapse;
+ table.style.borderCollapse = "collapse";
+ table.style.borderCollapse = "separate";
+ table.style.borderCollapse = save_collapse;
+ },
+
+ // this function gets called when the dialog needs to be initialized
+ function (dialog) {
+
+ var f_align = element.align;
+ var f_valign = element.vAlign;
+ var f_char = element.ch;
+
+ function selected(val) {
+ return val ? " selected" : "";
+ };
+
+ // dialog contents
+ dialog.content.style.width = "400px";
+ dialog.content.innerHTML = " \
+<div class='title'\
+ style='background: url(" + dialog.baseURL + dialog.editor.imgURL(cell ? "cell-prop.gif" : "row-prop.gif", "TableOperations") + ") #fff 98% 50% no-repeat'>" + i18n[cell ? "Cell Properties" : "Row Properties"] + "</div> \
+<table style='width:100%'> \
+ <tr> \
+ <td id='--HA-layout'> \
+ </td> \
+ </tr> \
+ <tr> \
+ <td id='--HA-style'></td> \
+ </tr> \
+</table> \
+";
+ var st_prop = TableOperations.createStyleFieldset(dialog.doc, dialog.editor, element);
+ var p = dialog.doc.getElementById("--HA-style");
+ p.appendChild(st_prop);
+ var st_layout = TableOperations.createStyleLayoutFieldset(dialog.doc, dialog.editor, element);
+ p = dialog.doc.getElementById("--HA-layout");
+ p.appendChild(st_layout);
+ dialog.modal = true;
+ dialog.addButtons("ok", "cancel");
+ dialog.showAtElement(dialog.editor._iframe, "c");
+ });
+};
+
+// this function gets called when some button from the TableOperations toolbar
+// was pressed.
+TableOperations.prototype.buttonPress = function(editor, button_id) {
+ this.editor = editor;
+ var mozbr = HTMLArea.is_gecko ? "<br />" : "";
+ var i18n = TableOperations.I18N;
+
+ // helper function that clears the content in a table row
+ function clearRow(tr) {
+ var tds = tr.getElementsByTagName("td");
+ for (var i = tds.length; --i >= 0;) {
+ var td = tds[i];
+ td.rowSpan = 1;
+ td.innerHTML = mozbr;
+ }
+ };
+
+ function splitRow(td) {
+ var n = parseInt("" + td.rowSpan);
+ var nc = parseInt("" + td.colSpan);
+ td.rowSpan = 1;
+ tr = td.parentNode;
+ var itr = tr.rowIndex;
+ var trs = tr.parentNode.rows;
+ var index = td.cellIndex;
+ while (--n > 0) {
+ tr = trs[++itr];
+ var otd = editor._doc.createElement("td");
+ otd.colSpan = td.colSpan;
+ otd.innerHTML = mozbr;
+ tr.insertBefore(otd, tr.cells[index]);
+ }
+ editor.forceRedraw();
+ editor.updateToolbar();
+ };
+
+ function splitCol(td) {
+ var nc = parseInt("" + td.colSpan);
+ td.colSpan = 1;
+ tr = td.parentNode;
+ var ref = td.nextSibling;
+ while (--nc > 0) {
+ var otd = editor._doc.createElement("td");
+ otd.rowSpan = td.rowSpan;
+ otd.innerHTML = mozbr;
+ tr.insertBefore(otd, ref);
+ }
+ editor.forceRedraw();
+ editor.updateToolbar();
+ };
+
+ function splitCell(td) {
+ var nc = parseInt("" + td.colSpan);
+ splitCol(td);
+ var items = td.parentNode.cells;
+ var index = td.cellIndex;
+ while (nc-- > 0) {
+ splitRow(items[index++]);
+ }
+ };
+
+ function selectNextNode(el) {
+ var node = el.nextSibling;
+ while (node && node.nodeType != 1) {
+ node = node.nextSibling;
+ }
+ if (!node) {
+ node = el.previousSibling;
+ while (node && node.nodeType != 1) {
+ node = node.previousSibling;
+ }
+ }
+ if (!node) {
+ node = el.parentNode;
+ }
+ editor.selectNodeContents(node);
+ };
+
+ switch (button_id) {
+ // ROWS
+
+ case "TO-row-insert-above":
+ case "TO-row-insert-under":
+ var tr = this.getClosest("tr");
+ if (!tr) {
+ break;
+ }
+ var otr = tr.cloneNode(true);
+ clearRow(otr);
+ tr.parentNode.insertBefore(otr, /under/.test(button_id) ? tr.nextSibling : tr);
+ editor.forceRedraw();
+ editor.focusEditor();
+ break;
+ case "TO-row-delete":
+ var tr = this.getClosest("tr");
+ if (!tr) {
+ break;
+ }
+ var par = tr.parentNode;
+ if (par.rows.length == 1) {
+ alert(i18n["not-del-last-row"]);
+ break;
+ }
+ // set the caret first to a position that doesn't
+ // disappear.
+ selectNextNode(tr);
+ par.removeChild(tr);
+ editor.forceRedraw();
+ editor.focusEditor();
+ editor.updateToolbar();
+ break;
+ case "TO-row-split":
+ var td = this.getClosest("td");
+ if (!td) {
+ break;
+ }
+ splitRow(td);
+ break;
+
+ // COLUMNS
+
+ case "TO-col-insert-before":
+ case "TO-col-insert-after":
+ var td = this.getClosest("td");
+ if (!td) {
+ break;
+ }
+ var rows = td.parentNode.parentNode.rows;
+ var index = td.cellIndex;
+ for (var i = rows.length; --i >= 0;) {
+ var tr = rows[i];
+ var ref = tr.cells[index + (/after/.test(button_id) ? 1 : 0)];
+ var otd = editor._doc.createElement("td");
+ otd.innerHTML = mozbr;
+ tr.insertBefore(otd, ref);
+ }
+ editor.focusEditor();
+ break;
+ case "TO-col-split":
+ var td = this.getClosest("td");
+ if (!td) {
+ break;
+ }
+ splitCol(td);
+ break;
+ case "TO-col-delete":
+ var td = this.getClosest("td");
+ if (!td) {
+ break;
+ }
+ var index = td.cellIndex;
+ if (td.parentNode.cells.length == 1) {
+ alert(i18n["not-del-last-col"]);
+ break;
+ }
+ // set the caret first to a position that doesn't disappear
+ selectNextNode(td);
+ var rows = td.parentNode.parentNode.rows;
+ for (var i = rows.length; --i >= 0;) {
+ var tr = rows[i];
+ tr.removeChild(tr.cells[index]);
+ }
+ editor.forceRedraw();
+ editor.focusEditor();
+ editor.updateToolbar();
+ break;
+
+ // CELLS
+
+ case "TO-cell-split":
+ var td = this.getClosest("td");
+ if (!td) {
+ break;
+ }
+ splitCell(td);
+ break;
+ case "TO-cell-insert-before":
+ case "TO-cell-insert-after":
+ var td = this.getClosest("td");
+ if (!td) {
+ break;
+ }
+ var tr = td.parentNode;
+ var otd = editor._doc.createElement("td");
+ otd.innerHTML = mozbr;
+ tr.insertBefore(otd, /after/.test(button_id) ? td.nextSibling : td);
+ editor.forceRedraw();
+ editor.focusEditor();
+ break;
+ case "TO-cell-delete":
+ var td = this.getClosest("td");
+ if (!td) {
+ break;
+ }
+ if (td.parentNode.cells.length == 1) {
+ alert(i18n["not-del-last-cell"]);
+ break;
+ }
+ // set the caret first to a position that doesn't disappear
+ selectNextNode(td);
+ td.parentNode.removeChild(td);
+ editor.forceRedraw();
+ editor.updateToolbar();
+ break;
+ case "TO-cell-merge":
+ // !! FIXME: Mozilla specific !!
+ var sel = editor._getSelection();
+ var range, i = 0;
+ var rows = [];
+ var row = null;
+ var cells = null;
+ if (!HTMLArea.is_ie) {
+ try {
+ while (range = sel.getRangeAt(i++)) {
+ var td = range.startContainer.childNodes[range.startOffset];
+ if (td.parentNode != row) {
+ row = td.parentNode;
+ (cells) && rows.push(cells);
+ cells = [];
+ }
+ cells.push(td);
+ }
+ } catch(e) {/* finished walking through selection */}
+ rows.push(cells);
+ } else {
+ // Internet Explorer "browser"
+ var td = this.getClosest("td");
+ if (!td) {
+ alert(i18n["Please click into some cell"]);
+ break;
+ }
+ var tr = td.parentElement;
+ var no_cols = prompt(i18n["How many columns would you like to merge?"], 2);
+ if (!no_cols) {
+ // cancelled
+ break;
+ }
+ var no_rows = prompt(i18n["How many rows would you like to merge?"], 2);
+ if (!no_rows) {
+ // cancelled
+ break;
+ }
+ var cell_index = td.cellIndex;
+ while (no_rows-- > 0) {
+ td = tr.cells[cell_index];
+ cells = [td];
+ for (var i = 1; i < no_cols; ++i) {
+ td = td.nextSibling;
+ if (!td) {
+ break;
+ }
+ cells.push(td);
+ }
+ rows.push(cells);
+ tr = tr.nextSibling;
+ if (!tr) {
+ break;
+ }
+ }
+ }
+ var HTML = "";
+ for (i = 0; i < rows.length; ++i) {
+ // i && (HTML += "<br />");
+ var cells = rows[i];
+ for (var j = 0; j < cells.length; ++j) {
+ // j && (HTML += " ");
+ var cell = cells[j];
+ HTML += cell.innerHTML;
+ (i || j) && (cell.parentNode.removeChild(cell));
+ }
+ }
+ var td = rows[0][0];
+ td.innerHTML = HTML;
+ td.rowSpan = rows.length;
+ td.colSpan = rows[0].length;
+ editor.selectNodeContents(td);
+ editor.forceRedraw();
+ editor.focusEditor();
+ break;
+
+ // PROPERTIES
+
+ case "TO-table-prop":
+ this.dialogTableProperties();
+ break;
+
+ case "TO-row-prop":
+ this.dialogRowCellProperties(false);
+ break;
+
+ case "TO-cell-prop":
+ this.dialogRowCellProperties(true);
+ break;
+
+ default:
+ alert("Button [" + button_id + "] not yet implemented");
+ }
+};
+
+// the list of buttons added by this plugin
+TableOperations.btnList = [
+ // table properties button
+ ["table-prop", "table"],
+ null, // separator
+
+ // ROWS
+ ["row-prop", "tr"],
+ ["row-insert-above", "tr"],
+ ["row-insert-under", "tr"],
+ ["row-delete", "tr"],
+ ["row-split", "td[rowSpan!=1]"],
+ null,
+
+ // COLS
+ ["col-insert-before", "td"],
+ ["col-insert-after", "td"],
+ ["col-delete", "td"],
+ ["col-split", "td[colSpan!=1]"],
+ null,
+
+ // CELLS
+ ["cell-prop", "td"],
+ ["cell-insert-before", "td"],
+ ["cell-insert-after", "td"],
+ ["cell-delete", "td"],
+ ["cell-merge", "tr"],
+ ["cell-split", "td[colSpan!=1,rowSpan!=1]"]
+ ];
+
+
+
+//// GENERIC CODE [style of any element; this should be moved into a separate
+//// file as it'll be very useful]
+//// BEGIN GENERIC CODE -----------------------------------------------------
+
+TableOperations.getLength = function(value) {
+ var len = parseInt(value);
+ if (isNaN(len)) {
+ len = "";
+ }
+ return len;
+};
+
+// Applies the style found in "params" to the given element.
+TableOperations.processStyle = function(params, element) {
+ var style = element.style;
+ for (var i in params) {
+ var val = params[i];
+ switch (i) {
+ case "f_st_backgroundColor":
+ style.backgroundColor = val;
+ break;
+ case "f_st_color":
+ style.color = val;
+ break;
+ case "f_st_backgroundImage":
+ if (/\S/.test(val)) {
+ style.backgroundImage = "url(" + val + ")";
+ } else {
+ style.backgroundImage = "none";
+ }
+ break;
+ case "f_st_borderWidth":
+ style.borderWidth = val;
+ break;
+ case "f_st_borderStyle":
+ style.borderStyle = val;
+ break;
+ case "f_st_borderColor":
+ style.borderColor = val;
+ break;
+ case "f_st_borderCollapse":
+ style.borderCollapse = val ? "collapse" : "";
+ break;
+ case "f_st_width":
+ if (/\S/.test(val)) {
+ style.width = val + params["f_st_widthUnit"];
+ } else {
+ style.width = "";
+ }
+ break;
+ case "f_st_height":
+ if (/\S/.test(val)) {
+ style.height = val + params["f_st_heightUnit"];
+ } else {
+ style.height = "";
+ }
+ break;
+ case "f_st_textAlign":
+ if (val == "char") {
+ var ch = params["f_st_textAlignChar"];
+ if (ch == '"') {
+ ch = '\\"';
+ }
+ style.textAlign = '"' + ch + '"';
+ } else {
+ style.textAlign = val;
+ }
+ break;
+ case "f_st_verticalAlign":
+ style.verticalAlign = val;
+ break;
+ case "f_st_float":
+ style.cssFloat = val;
+ break;
+// case "f_st_margin":
+// style.margin = val + "px";
+// break;
+// case "f_st_padding":
+// style.padding = val + "px";
+// break;
+ }
+ }
+};
+
+// Returns an HTML element for a widget that allows color selection. That is,
+// a button that contains the given color, if any, and when pressed will popup
+// the sooner-or-later-to-be-rewritten select_color.html dialog allowing user
+// to select some color. If a color is selected, an input field with the name
+// "f_st_"+name will be updated with the color value in #123456 format.
+TableOperations.createColorButton = function(doc, editor, color, name) {
+ if (!color) {
+ color = "";
+ } else if (!/#/.test(color)) {
+ color = HTMLArea._colorToRgb(color);
+ }
+
+ var df = doc.createElement("span");
+ var field = doc.createElement("input");
+ field.type = "hidden";
+ df.appendChild(field);
+ field.name = "f_st_" + name;
+ field.value = color;
+ var button = doc.createElement("span");
+ button.className = "buttonColor";
+ df.appendChild(button);
+ var span = doc.createElement("span");
+ span.className = "chooser";
+ // span.innerHTML = " ";
+ span.style.backgroundColor = color;
+ button.appendChild(span);
+ button.onmouseover = function() { if (!this.disabled) { this.className += " buttonColor-hilite"; }};
+ button.onmouseout = function() { if (!this.disabled) { this.className = "buttonColor"; }};
+ span.onclick = function() {
+ if (this.parentNode.disabled) {
+ return false;
+ }
+ editor._popupDialog("select_color.html", function(color) {
+ if (color) {
+ span.style.backgroundColor = "#" + color;
+ field.value = "#" + color;
+ }
+ }, color);
+ };
+ var span2 = doc.createElement("span");
+ span2.innerHTML = "×";
+ span2.className = "nocolor";
+ span2.title = TableOperations.I18N["Unset color"];
+ button.appendChild(span2);
+ span2.onmouseover = function() { if (!this.parentNode.disabled) { this.className += " nocolor-hilite"; }};
+ span2.onmouseout = function() { if (!this.parentNode.disabled) { this.className = "nocolor"; }};
+ span2.onclick = function() {
+ span.style.backgroundColor = "";
+ field.value = "";
+ };
+ return df;
+};
+
+TableOperations.createStyleLayoutFieldset = function(doc, editor, el) {
+ var i18n = TableOperations.I18N;
+ var fieldset = doc.createElement("fieldset");
+ var legend = doc.createElement("legend");
+ fieldset.appendChild(legend);
+ legend.innerHTML = i18n["Layout"];
+ var table = doc.createElement("table");
+ fieldset.appendChild(table);
+ table.style.width = "100%";
+ var tbody = doc.createElement("tbody");
+ table.appendChild(tbody);
+
+ var tagname = el.tagName.toLowerCase();
+ var tr, td, input, select, option, options, i;
+
+ if (tagname != "td" && tagname != "tr" && tagname != "th") {
+ tr = doc.createElement("tr");
+ tbody.appendChild(tr);
+ td = doc.createElement("td");
+ td.className = "label";
+ tr.appendChild(td);
+ td.innerHTML = i18n["Float"] + ":";
+ td = doc.createElement("td");
+ tr.appendChild(td);
+ select = doc.createElement("select");
+ td.appendChild(select);
+ select.name = "f_st_float";
+ options = ["None", "Left", "Right"];
+ for (var i = 0; i < options.length; ++i) {
+ var Val = options[i];
+ var val = options[i].toLowerCase();
+ option = doc.createElement("option");
+ option.innerHTML = i18n[Val];
+ option.value = val;
+ option.selected = (("" + el.style.cssFloat).toLowerCase() == val);
+ select.appendChild(option);
+ }
+ }
+
+ tr = doc.createElement("tr");
+ tbody.appendChild(tr);
+ td = doc.createElement("td");
+ td.className = "label";
+ tr.appendChild(td);
+ td.innerHTML = i18n["Width"] + ":";
+ td = doc.createElement("td");
+ tr.appendChild(td);
+ input = doc.createElement("input");
+ input.type = "text";
+ input.value = TableOperations.getLength(el.style.width);
+ input.size = "5";
+ input.name = "f_st_width";
+ input.style.marginRight = "0.5em";
+ td.appendChild(input);
+ select = doc.createElement("select");
+ select.name = "f_st_widthUnit";
+ option = doc.createElement("option");
+ option.innerHTML = i18n["percent"];
+ option.value = "%";
+ option.selected = /%/.test(el.style.width);
+ select.appendChild(option);
+ option = doc.createElement("option");
+ option.innerHTML = i18n["pixels"];
+ option.value = "px";
+ option.selected = /px/.test(el.style.width);
+ select.appendChild(option);
+ td.appendChild(select);
+
+ select.style.marginRight = "0.5em";
+ td.appendChild(doc.createTextNode(i18n["Text align"] + ":"));
+ select = doc.createElement("select");
+ select.style.marginLeft = select.style.marginRight = "0.5em";
+ td.appendChild(select);
+ select.name = "f_st_textAlign";
+ options = ["Left", "Center", "Right", "Justify"];
+ if (tagname == "td") {
+ options.push("Char");
+ }
+ input = doc.createElement("input");
+ input.name = "f_st_textAlignChar";
+ input.size = "1";
+ input.style.fontFamily = "monospace";
+ td.appendChild(input);
+ for (var i = 0; i < options.length; ++i) {
+ var Val = options[i];
+ var val = Val.toLowerCase();
+ option = doc.createElement("option");
+ option.value = val;
+ option.innerHTML = i18n[Val];
+ option.selected = (el.style.textAlign.toLowerCase() == val);
+ select.appendChild(option);
+ }
+ function setCharVisibility(value) {
+ input.style.visibility = value ? "visible" : "hidden";
+ if (value) {
+ input.focus();
+ input.select();
+ }
+ };
+ select.onchange = function() { setCharVisibility(this.value == "char"); };
+ setCharVisibility(select.value == "char");
+
+ tr = doc.createElement("tr");
+ tbody.appendChild(tr);
+ td = doc.createElement("td");
+ td.className = "label";
+ tr.appendChild(td);
+ td.innerHTML = i18n["Height"] + ":";
+ td = doc.createElement("td");
+ tr.appendChild(td);
+ input = doc.createElement("input");
+ input.type = "text";
+ input.value = TableOperations.getLength(el.style.height);
+ input.size = "5";
+ input.name = "f_st_height";
+ input.style.marginRight = "0.5em";
+ td.appendChild(input);
+ select = doc.createElement("select");
+ select.name = "f_st_heightUnit";
+ option = doc.createElement("option");
+ option.innerHTML = i18n["percent"];
+ option.value = "%";
+ option.selected = /%/.test(el.style.height);
+ select.appendChild(option);
+ option = doc.createElement("option");
+ option.innerHTML = i18n["pixels"];
+ option.value = "px";
+ option.selected = /px/.test(el.style.height);
+ select.appendChild(option);
+ td.appendChild(select);
+
+ select.style.marginRight = "0.5em";
+ td.appendChild(doc.createTextNode(i18n["Vertical align"] + ":"));
+ select = doc.createElement("select");
+ select.name = "f_st_verticalAlign";
+ select.style.marginLeft = "0.5em";
+ td.appendChild(select);
+ options = ["Top", "Middle", "Bottom", "Baseline"];
+ for (var i = 0; i < options.length; ++i) {
+ var Val = options[i];
+ var val = Val.toLowerCase();
+ option = doc.createElement("option");
+ option.value = val;
+ option.innerHTML = i18n[Val];
+ option.selected = (el.style.verticalAlign.toLowerCase() == val);
+ select.appendChild(option);
+ }
+
+ return fieldset;
+};
+
+// Returns an HTML element containing the style attributes for the given
+// element. This can be easily embedded into any dialog; the functionality is
+// also provided.
+TableOperations.createStyleFieldset = function(doc, editor, el) {
+ var i18n = TableOperations.I18N;
+ var fieldset = doc.createElement("fieldset");
+ var legend = doc.createElement("legend");
+ fieldset.appendChild(legend);
+ legend.innerHTML = i18n["CSS Style"];
+ var table = doc.createElement("table");
+ fieldset.appendChild(table);
+ table.style.width = "100%";
+ var tbody = doc.createElement("tbody");
+ table.appendChild(tbody);
+
+ var tr, td, input, select, option, options, i;
+
+ tr = doc.createElement("tr");
+ tbody.appendChild(tr);
+ td = doc.createElement("td");
+ tr.appendChild(td);
+ td.className = "label";
+ td.innerHTML = i18n["Background"] + ":";
+ td = doc.createElement("td");
+ tr.appendChild(td);
+ var df = TableOperations.createColorButton(doc, editor, el.style.backgroundColor, "backgroundColor");
+ df.firstChild.nextSibling.style.marginRight = "0.5em";
+ td.appendChild(df);
+ td.appendChild(doc.createTextNode(i18n["Image URL"] + ": "));
+ input = doc.createElement("input");
+ input.type = "text";
+ input.name = "f_st_backgroundImage";
+ if (el.style.backgroundImage.match(/url\(\s*(.*?)\s*\)/)) {
+ input.value = RegExp.$1;
+ }
+ // input.style.width = "100%";
+ td.appendChild(input);
+
+ tr = doc.createElement("tr");
+ tbody.appendChild(tr);
+ td = doc.createElement("td");
+ tr.appendChild(td);
+ td.className = "label";
+ td.innerHTML = i18n["FG Color"] + ":";
+ td = doc.createElement("td");
+ tr.appendChild(td);
+ td.appendChild(TableOperations.createColorButton(doc, editor, el.style.color, "color"));
+
+ // for better alignment we include an invisible field.
+ input = doc.createElement("input");
+ input.style.visibility = "hidden";
+ input.type = "text";
+ td.appendChild(input);
+
+ tr = doc.createElement("tr");
+ tbody.appendChild(tr);
+ td = doc.createElement("td");
+ tr.appendChild(td);
+ td.className = "label";
+ td.innerHTML = i18n["Border"] + ":";
+ td = doc.createElement("td");
+ tr.appendChild(td);
+
+ var colorButton = TableOperations.createColorButton(doc, editor, el.style.borderColor, "borderColor");
+ var btn = colorButton.firstChild.nextSibling;
+ td.appendChild(colorButton);
+ // borderFields.push(btn);
+ btn.style.marginRight = "0.5em";
+
+ select = doc.createElement("select");
+ var borderFields = [];
+ td.appendChild(select);
+ select.name = "f_st_borderStyle";
+ options = ["none", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"];
+ var currentBorderStyle = el.style.borderStyle;
+ // Gecko reports "solid solid solid solid" for "border-style: solid".
+ // That is, "top right bottom left" -- we only consider the first
+ // value.
+ (currentBorderStyle.match(/([^\s]*)\s/)) && (currentBorderStyle = RegExp.$1);
+ for (var i in options) {
+ var val = options[i];
+ option = doc.createElement("option");
+ option.value = val;
+ option.innerHTML = val;
+ (val == currentBorderStyle) && (option.selected = true);
+ select.appendChild(option);
+ }
+ select.style.marginRight = "0.5em";
+ function setBorderFieldsStatus(value) {
+ for (var i = 0; i < borderFields.length; ++i) {
+ var el = borderFields[i];
+ el.style.visibility = value ? "hidden" : "visible";
+ if (!value && (el.tagName.toLowerCase() == "input")) {
+ el.focus();
+ el.select();
+ }
+ }
+ };
+ select.onchange = function() { setBorderFieldsStatus(this.value == "none"); };
+
+ input = doc.createElement("input");
+ borderFields.push(input);
+ input.type = "text";
+ input.name = "f_st_borderWidth";
+ input.value = TableOperations.getLength(el.style.borderWidth);
+ input.size = "5";
+ td.appendChild(input);
+ input.style.marginRight = "0.5em";
+ var span = doc.createElement("span");
+ span.innerHTML = i18n["pixels"];
+ td.appendChild(span);
+ borderFields.push(span);
+
+ setBorderFieldsStatus(select.value == "none");
+
+ if (el.tagName.toLowerCase() == "table") {
+ // the border-collapse style is only for tables
+ tr = doc.createElement("tr");
+ tbody.appendChild(tr);
+ td = doc.createElement("td");
+ td.className = "label";
+ tr.appendChild(td);
+ input = doc.createElement("input");
+ input.type = "checkbox";
+ input.name = "f_st_borderCollapse";
+ input.id = "f_st_borderCollapse";
+ var val = (/collapse/i.test(el.style.borderCollapse));
+ input.checked = val ? 1 : 0;
+ td.appendChild(input);
+
+ td = doc.createElement("td");
+ tr.appendChild(td);
+ var label = doc.createElement("label");
+ label.htmlFor = "f_st_borderCollapse";
+ label.innerHTML = i18n["Collapsed borders"];
+ td.appendChild(label);
+ }
+
+// tr = doc.createElement("tr");
+// tbody.appendChild(tr);
+// td = doc.createElement("td");
+// td.className = "label";
+// tr.appendChild(td);
+// td.innerHTML = i18n["Margin"] + ":";
+// td = doc.createElement("td");
+// tr.appendChild(td);
+// input = doc.createElement("input");
+// input.type = "text";
+// input.size = "5";
+// input.name = "f_st_margin";
+// td.appendChild(input);
+// input.style.marginRight = "0.5em";
+// td.appendChild(doc.createTextNode(i18n["Padding"] + ":"));
+
+// input = doc.createElement("input");
+// input.type = "text";
+// input.size = "5";
+// input.name = "f_st_padding";
+// td.appendChild(input);
+// input.style.marginLeft = "0.5em";
+// input.style.marginRight = "0.5em";
+// td.appendChild(doc.createTextNode(i18n["pixels"]));
+
+ return fieldset;
+};
+
+//// END GENERIC CODE -------------------------------------------------------
Modified: plog/trunk/js/htmlarea/popupdiv.js
===================================================================
--- plog/trunk/js/htmlarea/popupdiv.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popupdiv.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,369 +1,369 @@
-/** This file is derived from PopupDiv, developed by Mihai Bazon for
- * SamWare.net. Modifications were needed to make it usable in HTMLArea.
- * HTMLArea is a free WYSIWYG online HTML editor from InteractiveTools.com.
- *
- * This file does not function standalone. It is dependent of global functions
- * defined in HTMLArea-3.0 (htmlarea.js).
- *
- * Please see file htmlarea.js for further details.
- **/
-
-var is_ie = ( (navigator.userAgent.toLowerCase().indexOf("msie") != -1) &&
- (navigator.userAgent.toLowerCase().indexOf("opera") == -1) );
-var is_compat = (document.compatMode == "BackCompat");
-
-function PopupDiv(editor, titleText, handler, initFunction) {
- var self = this;
-
- this.editor = editor;
- this.doc = editor._mdoc;
- this.handler = handler;
-
- var el = this.doc.createElement("div");
- el.className = "content";
-
- var popup = this.doc.createElement("div");
- popup.className = "dialog popupdiv";
- this.element = popup;
- var s = popup.style;
- s.position = "absolute";
- s.left = "0px";
- s.top = "0px";
-
- var title = this.doc.createElement("div");
- title.className = "title";
- this.title = title;
- popup.appendChild(title);
-
- HTMLArea._addEvent(title, "mousedown", function(ev) {
- self._dragStart(is_ie ? window.event : ev);
- });
-
- var button = this.doc.createElement("div");
- button.className = "button";
- title.appendChild(button);
- button.innerHTML = "×";
- title.appendChild(this.doc.createTextNode(titleText));
- this.titleText = titleText;
-
- button.onmouseover = function() {
- this.className += " button-hilite";
- };
- button.onmouseout = function() {
- this.className = this.className.replace(/\s*button-hilite\s*/g, " ");
- };
- button.onclick = function() {
- this.className = this.className.replace(/\s*button-hilite\s*/g, " ");
- self.close();
- };
-
- popup.appendChild(el);
- this.content = el;
-
- this.doc.body.appendChild(popup);
-
- this.dragging = false;
- this.onShow = null;
- this.onClose = null;
- this.modal = false;
-
- initFunction(this);
-};
-
-PopupDiv.currentPopup = null;
-
-PopupDiv.prototype.showAtElement = function(el, mode) {
- this.defaultSize();
- var pos, ew, eh;
- var popup = this.element;
- popup.style.display = "block";
- var w = popup.offsetWidth;
- var h = popup.offsetHeight;
- popup.style.display = "none";
- if (el != window) {
- pos = PopupDiv.getAbsolutePos(el);
- ew = el.offsetWidth;
- eh = el.offsetHeight;
- } else {
- pos = {x:0, y:0};
- var size = PopupDiv.getWindowSize();
- ew = size.x;
- eh = size.y;
- }
- var FX = false, FY = false;
- if (mode.indexOf("l") != -1) {
- pos.x -= w;
- FX = true;
- }
- if (mode.indexOf("r") != -1) {
- pos.x += ew;
- FX = true;
- }
- if (mode.indexOf("t") != -1) {
- pos.y -= h;
- FY = true;
- }
- if (mode.indexOf("b") != -1) {
- pos.y += eh;
- FY = true;
- }
- if (mode.indexOf("c") != -1) {
- FX || (pos.x += Math.round((ew - w) / 2));
- FY || (pos.y += Math.round((eh - h) / 2));
- }
- this.showAt(pos.x, pos.y);
-};
-
-PopupDiv.prototype.defaultSize = function() {
- var s = this.element.style;
- var cs = this.element.currentStyle;
- var addX = (is_ie && is_compat) ? (parseInt(cs.borderLeftWidth) +
- parseInt(cs.borderRightWidth) +
- parseInt(cs.paddingLeft) +
- parseInt(cs.paddingRight)) : 0;
- var addY = (is_ie && is_compat) ? (parseInt(cs.borderTopWidth) +
- parseInt(cs.borderBottomWidth) +
- parseInt(cs.paddingTop) +
- parseInt(cs.paddingBottom)) : 0;
- s.display = "block";
- s.width = (this.content.offsetWidth + addX) + "px";
- s.height = (this.content.offsetHeight + this.title.offsetHeight) + "px";
- s.display = "none";
-};
-
-PopupDiv.prototype.showAt = function(x, y) {
- this.defaultSize();
- var s = this.element.style;
- s.display = "block";
- s.left = x + "px";
- s.top = y + "px";
- this.hideShowCovered();
-
- PopupDiv.currentPopup = this;
- HTMLArea._addEvents(this.doc.body, ["mousedown", "click"], PopupDiv.checkPopup);
- HTMLArea._addEvents(this.editor._doc.body, ["mousedown", "click"], PopupDiv.checkPopup);
- if (is_ie && this.modal) {
- this.doc.body.setCapture(false);
- this.doc.body.onlosecapture = function() {
- (PopupDiv.currentPopup) && (this.doc.body.setCapture(false));
- };
- }
- window.event && HTMLArea._stopEvent(window.event);
-
- if (typeof this.onShow == "function") {
- this.onShow();
- } else if (typeof this.onShow == "string") {
- eval(this.onShow);
- }
-
- var field = this.element.getElementsByTagName("input")[0];
- if (!field) {
- field = this.element.getElementsByTagName("select")[0];
- }
- if (!field) {
- field = this.element.getElementsByTagName("textarea")[0];
- }
- if (field) {
- field.focus();
- }
-};
-
-PopupDiv.prototype.close = function() {
- this.element.style.display = "none";
- PopupDiv.currentPopup = null;
- this.hideShowCovered();
- HTMLArea._removeEvents(this.doc.body, ["mousedown", "click"], PopupDiv.checkPopup);
- HTMLArea._removeEvents(this.editor._doc.body, ["mousedown", "click"], PopupDiv.checkPopup);
- is_ie && this.modal && this.doc.body.releaseCapture();
- if (typeof this.onClose == "function") {
- this.onClose();
- } else if (typeof this.onClose == "string") {
- eval(this.onClose);
- }
- this.element.parentNode.removeChild(this.element);
-};
-
-PopupDiv.prototype.getForm = function() {
- var forms = this.content.getElementsByTagName("form");
- return (forms.length > 0) ? forms[0] : null;
-};
-
-PopupDiv.prototype.callHandler = function() {
- var tags = ["input", "textarea", "select"];
- var params = new Object();
- for (var ti in tags) {
- var tag = tags[ti];
- var els = this.content.getElementsByTagName(tag);
- for (var j = 0; j < els.length; ++j) {
- var el = els[j];
- params[el.name] = el.value;
- }
- }
- this.handler(this, params);
- return false;
-};
-
-PopupDiv.getAbsolutePos = function(el) {
- var r = { x: el.offsetLeft, y: el.offsetTop };
- if (el.offsetParent) {
- var tmp = PopupDiv.getAbsolutePos(el.offsetParent);
- r.x += tmp.x;
- r.y += tmp.y;
- }
- return r;
-};
-
-PopupDiv.getWindowSize = function() {
- if (window.innerHeight) {
- return { y: window.innerHeight, x: window.innerWidth };
- }
- if (this.doc.body.clientHeight) {
- return { y: this.doc.body.clientHeight, x: this.doc.body.clientWidth };
- }
- return { y: this.doc.documentElement.clientHeight, x: this.doc.documentElement.clientWidth };
-};
-
-PopupDiv.prototype.hideShowCovered = function () {
- var self = this;
- function isContained(el) {
- while (el) {
- if (el == self.element) {
- return true;
- }
- el = el.parentNode;
- }
- return false;
- };
- var tags = new Array("applet", "select");
- var el = this.element;
-
- var p = PopupDiv.getAbsolutePos(el);
- var EX1 = p.x;
- var EX2 = el.offsetWidth + EX1;
- var EY1 = p.y;
- var EY2 = el.offsetHeight + EY1;
-
- if (el.style.display == "none") {
- EX1 = EX2 = EY1 = EY2 = 0;
- }
-
- for (var k = tags.length; k > 0; ) {
- var ar = this.doc.getElementsByTagName(tags[--k]);
- var cc = null;
-
- for (var i = ar.length; i > 0;) {
- cc = ar[--i];
- if (isContained(cc)) {
- cc.style.visibility = "visible";
- continue;
- }
-
- p = PopupDiv.getAbsolutePos(cc);
- var CX1 = p.x;
- var CX2 = cc.offsetWidth + CX1;
- var CY1 = p.y;
- var CY2 = cc.offsetHeight + CY1;
-
- if ((CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) {
- cc.style.visibility = "visible";
- } else {
- cc.style.visibility = "hidden";
- }
- }
- }
-};
-
-PopupDiv.prototype._dragStart = function (ev) {
- if (this.dragging) {
- return false;
- }
- this.dragging = true;
- PopupDiv.currentPopup = this;
- var posX = ev.clientX;
- var posY = ev.clientY;
- if (is_ie) {
- posY += this.doc.body.scrollTop;
- posX += this.doc.body.scrollLeft;
- } else {
- posY += window.scrollY;
- posX += window.scrollX;
- }
- var st = this.element.style;
- this.xOffs = posX - parseInt(st.left);
- this.yOffs = posY - parseInt(st.top);
- HTMLArea._addEvent(this.doc, "mousemove", PopupDiv.dragIt);
- HTMLArea._addEvent(this.doc, "mouseover", HTMLArea._stopEvent);
- HTMLArea._addEvent(this.doc, "mouseup", PopupDiv.dragEnd);
- HTMLArea._stopEvent(ev);
-};
-
-PopupDiv.dragIt = function (ev) {
- var popup = PopupDiv.currentPopup;
- if (!(popup && popup.dragging)) {
- return false;
- }
- is_ie && (ev = window.event);
- var posX = ev.clientX;
- var posY = ev.clientY;
- if (is_ie) {
- posY += this.doc.body.scrollTop;
- posX += this.doc.body.scrollLeft;
- } else {
- posY += window.scrollY;
- posX += window.scrollX;
- }
- popup.hideShowCovered();
- var st = popup.element.style;
- st.left = (posX - popup.xOffs) + "px";
- st.top = (posY - popup.yOffs) + "px";
- HTMLArea._stopEvent(ev);
-};
-
-PopupDiv.dragEnd = function () {
- var popup = PopupDiv.currentPopup;
- if (!popup) {
- return false;
- }
- popup.dragging = false;
- HTMLArea._removeEvent(popup.doc, "mouseup", PopupDiv.dragEnd);
- HTMLArea._removeEvent(popup.doc, "mouseover", HTMLArea._stopEvent);
- HTMLArea._removeEvent(popup.doc, "mousemove", PopupDiv.dragIt);
- popup.hideShowCovered();
-};
-
-PopupDiv.checkPopup = function (ev) {
- is_ie && (ev = window.event);
- var el = is_ie ? ev.srcElement : ev.target;
- var cp = PopupDiv.currentPopup;
- for (; (el != null) && (el != cp.element); el = el.parentNode);
- if (el == null) {
- cp.modal || ev.type == "mouseover" || cp.close();
- HTMLArea._stopEvent(ev);
- }
-};
-
-PopupDiv.prototype.addButtons = function() {
- var self = this;
- var div = this.doc.createElement("div");
- this.content.appendChild(div);
- div.className = "buttons";
- for (var i = 0; i < arguments.length; ++i) {
- var btn = arguments[i];
- var button = this.doc.createElement("button");
- div.appendChild(button);
- button.innerHTML = HTMLArea.I18N.buttons[btn];
- switch (btn) {
- case "ok":
- button.onclick = function() {
- self.callHandler();
- self.close();
- };
- break;
- case "cancel":
- button.onclick = function() {
- self.close();
- };
- break;
- }
- }
-};
+/** This file is derived from PopupDiv, developed by Mihai Bazon for
+ * SamWare.net. Modifications were needed to make it usable in HTMLArea.
+ * HTMLArea is a free WYSIWYG online HTML editor from InteractiveTools.com.
+ *
+ * This file does not function standalone. It is dependent of global functions
+ * defined in HTMLArea-3.0 (htmlarea.js).
+ *
+ * Please see file htmlarea.js for further details.
+ **/
+
+var is_ie = ( (navigator.userAgent.toLowerCase().indexOf("msie") != -1) &&
+ (navigator.userAgent.toLowerCase().indexOf("opera") == -1) );
+var is_compat = (document.compatMode == "BackCompat");
+
+function PopupDiv(editor, titleText, handler, initFunction) {
+ var self = this;
+
+ this.editor = editor;
+ this.doc = editor._mdoc;
+ this.handler = handler;
+
+ var el = this.doc.createElement("div");
+ el.className = "content";
+
+ var popup = this.doc.createElement("div");
+ popup.className = "dialog popupdiv";
+ this.element = popup;
+ var s = popup.style;
+ s.position = "absolute";
+ s.left = "0px";
+ s.top = "0px";
+
+ var title = this.doc.createElement("div");
+ title.className = "title";
+ this.title = title;
+ popup.appendChild(title);
+
+ HTMLArea._addEvent(title, "mousedown", function(ev) {
+ self._dragStart(is_ie ? window.event : ev);
+ });
+
+ var button = this.doc.createElement("div");
+ button.className = "button";
+ title.appendChild(button);
+ button.innerHTML = "×";
+ title.appendChild(this.doc.createTextNode(titleText));
+ this.titleText = titleText;
+
+ button.onmouseover = function() {
+ this.className += " button-hilite";
+ };
+ button.onmouseout = function() {
+ this.className = this.className.replace(/\s*button-hilite\s*/g, " ");
+ };
+ button.onclick = function() {
+ this.className = this.className.replace(/\s*button-hilite\s*/g, " ");
+ self.close();
+ };
+
+ popup.appendChild(el);
+ this.content = el;
+
+ this.doc.body.appendChild(popup);
+
+ this.dragging = false;
+ this.onShow = null;
+ this.onClose = null;
+ this.modal = false;
+
+ initFunction(this);
+};
+
+PopupDiv.currentPopup = null;
+
+PopupDiv.prototype.showAtElement = function(el, mode) {
+ this.defaultSize();
+ var pos, ew, eh;
+ var popup = this.element;
+ popup.style.display = "block";
+ var w = popup.offsetWidth;
+ var h = popup.offsetHeight;
+ popup.style.display = "none";
+ if (el != window) {
+ pos = PopupDiv.getAbsolutePos(el);
+ ew = el.offsetWidth;
+ eh = el.offsetHeight;
+ } else {
+ pos = {x:0, y:0};
+ var size = PopupDiv.getWindowSize();
+ ew = size.x;
+ eh = size.y;
+ }
+ var FX = false, FY = false;
+ if (mode.indexOf("l") != -1) {
+ pos.x -= w;
+ FX = true;
+ }
+ if (mode.indexOf("r") != -1) {
+ pos.x += ew;
+ FX = true;
+ }
+ if (mode.indexOf("t") != -1) {
+ pos.y -= h;
+ FY = true;
+ }
+ if (mode.indexOf("b") != -1) {
+ pos.y += eh;
+ FY = true;
+ }
+ if (mode.indexOf("c") != -1) {
+ FX || (pos.x += Math.round((ew - w) / 2));
+ FY || (pos.y += Math.round((eh - h) / 2));
+ }
+ this.showAt(pos.x, pos.y);
+};
+
+PopupDiv.prototype.defaultSize = function() {
+ var s = this.element.style;
+ var cs = this.element.currentStyle;
+ var addX = (is_ie && is_compat) ? (parseInt(cs.borderLeftWidth) +
+ parseInt(cs.borderRightWidth) +
+ parseInt(cs.paddingLeft) +
+ parseInt(cs.paddingRight)) : 0;
+ var addY = (is_ie && is_compat) ? (parseInt(cs.borderTopWidth) +
+ parseInt(cs.borderBottomWidth) +
+ parseInt(cs.paddingTop) +
+ parseInt(cs.paddingBottom)) : 0;
+ s.display = "block";
+ s.width = (this.content.offsetWidth + addX) + "px";
+ s.height = (this.content.offsetHeight + this.title.offsetHeight) + "px";
+ s.display = "none";
+};
+
+PopupDiv.prototype.showAt = function(x, y) {
+ this.defaultSize();
+ var s = this.element.style;
+ s.display = "block";
+ s.left = x + "px";
+ s.top = y + "px";
+ this.hideShowCovered();
+
+ PopupDiv.currentPopup = this;
+ HTMLArea._addEvents(this.doc.body, ["mousedown", "click"], PopupDiv.checkPopup);
+ HTMLArea._addEvents(this.editor._doc.body, ["mousedown", "click"], PopupDiv.checkPopup);
+ if (is_ie && this.modal) {
+ this.doc.body.setCapture(false);
+ this.doc.body.onlosecapture = function() {
+ (PopupDiv.currentPopup) && (this.doc.body.setCapture(false));
+ };
+ }
+ window.event && HTMLArea._stopEvent(window.event);
+
+ if (typeof this.onShow == "function") {
+ this.onShow();
+ } else if (typeof this.onShow == "string") {
+ eval(this.onShow);
+ }
+
+ var field = this.element.getElementsByTagName("input")[0];
+ if (!field) {
+ field = this.element.getElementsByTagName("select")[0];
+ }
+ if (!field) {
+ field = this.element.getElementsByTagName("textarea")[0];
+ }
+ if (field) {
+ field.focus();
+ }
+};
+
+PopupDiv.prototype.close = function() {
+ this.element.style.display = "none";
+ PopupDiv.currentPopup = null;
+ this.hideShowCovered();
+ HTMLArea._removeEvents(this.doc.body, ["mousedown", "click"], PopupDiv.checkPopup);
+ HTMLArea._removeEvents(this.editor._doc.body, ["mousedown", "click"], PopupDiv.checkPopup);
+ is_ie && this.modal && this.doc.body.releaseCapture();
+ if (typeof this.onClose == "function") {
+ this.onClose();
+ } else if (typeof this.onClose == "string") {
+ eval(this.onClose);
+ }
+ this.element.parentNode.removeChild(this.element);
+};
+
+PopupDiv.prototype.getForm = function() {
+ var forms = this.content.getElementsByTagName("form");
+ return (forms.length > 0) ? forms[0] : null;
+};
+
+PopupDiv.prototype.callHandler = function() {
+ var tags = ["input", "textarea", "select"];
+ var params = new Object();
+ for (var ti = tags.length; --ti >= 0;) {
+ var tag = tags[ti];
+ var els = this.content.getElementsByTagName(tag);
+ for (var j = 0; j < els.length; ++j) {
+ var el = els[j];
+ params[el.name] = el.value;
+ }
+ }
+ this.handler(this, params);
+ return false;
+};
+
+PopupDiv.getAbsolutePos = function(el) {
+ var r = { x: el.offsetLeft, y: el.offsetTop };
+ if (el.offsetParent) {
+ var tmp = PopupDiv.getAbsolutePos(el.offsetParent);
+ r.x += tmp.x;
+ r.y += tmp.y;
+ }
+ return r;
+};
+
+PopupDiv.getWindowSize = function() {
+ if (window.innerHeight) {
+ return { y: window.innerHeight, x: window.innerWidth };
+ }
+ if (this.doc.body.clientHeight) {
+ return { y: this.doc.body.clientHeight, x: this.doc.body.clientWidth };
+ }
+ return { y: this.doc.documentElement.clientHeight, x: this.doc.documentElement.clientWidth };
+};
+
+PopupDiv.prototype.hideShowCovered = function () {
+ var self = this;
+ function isContained(el) {
+ while (el) {
+ if (el == self.element) {
+ return true;
+ }
+ el = el.parentNode;
+ }
+ return false;
+ };
+ var tags = new Array("applet", "select");
+ var el = this.element;
+
+ var p = PopupDiv.getAbsolutePos(el);
+ var EX1 = p.x;
+ var EX2 = el.offsetWidth + EX1;
+ var EY1 = p.y;
+ var EY2 = el.offsetHeight + EY1;
+
+ if (el.style.display == "none") {
+ EX1 = EX2 = EY1 = EY2 = 0;
+ }
+
+ for (var k = tags.length; k > 0; ) {
+ var ar = this.doc.getElementsByTagName(tags[--k]);
+ var cc = null;
+
+ for (var i = ar.length; i > 0;) {
+ cc = ar[--i];
+ if (isContained(cc)) {
+ cc.style.visibility = "visible";
+ continue;
+ }
+
+ p = PopupDiv.getAbsolutePos(cc);
+ var CX1 = p.x;
+ var CX2 = cc.offsetWidth + CX1;
+ var CY1 = p.y;
+ var CY2 = cc.offsetHeight + CY1;
+
+ if ((CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) {
+ cc.style.visibility = "visible";
+ } else {
+ cc.style.visibility = "hidden";
+ }
+ }
+ }
+};
+
+PopupDiv.prototype._dragStart = function (ev) {
+ if (this.dragging) {
+ return false;
+ }
+ this.dragging = true;
+ PopupDiv.currentPopup = this;
+ var posX = ev.clientX;
+ var posY = ev.clientY;
+ if (is_ie) {
+ posY += this.doc.body.scrollTop;
+ posX += this.doc.body.scrollLeft;
+ } else {
+ posY += window.scrollY;
+ posX += window.scrollX;
+ }
+ var st = this.element.style;
+ this.xOffs = posX - parseInt(st.left);
+ this.yOffs = posY - parseInt(st.top);
+ HTMLArea._addEvent(this.doc, "mousemove", PopupDiv.dragIt);
+ HTMLArea._addEvent(this.doc, "mouseover", HTMLArea._stopEvent);
+ HTMLArea._addEvent(this.doc, "mouseup", PopupDiv.dragEnd);
+ HTMLArea._stopEvent(ev);
+};
+
+PopupDiv.dragIt = function (ev) {
+ var popup = PopupDiv.currentPopup;
+ if (!(popup && popup.dragging)) {
+ return false;
+ }
+ is_ie && (ev = window.event);
+ var posX = ev.clientX;
+ var posY = ev.clientY;
+ if (is_ie) {
+ posY += this.doc.body.scrollTop;
+ posX += this.doc.body.scrollLeft;
+ } else {
+ posY += window.scrollY;
+ posX += window.scrollX;
+ }
+ popup.hideShowCovered();
+ var st = popup.element.style;
+ st.left = (posX - popup.xOffs) + "px";
+ st.top = (posY - popup.yOffs) + "px";
+ HTMLArea._stopEvent(ev);
+};
+
+PopupDiv.dragEnd = function () {
+ var popup = PopupDiv.currentPopup;
+ if (!popup) {
+ return false;
+ }
+ popup.dragging = false;
+ HTMLArea._removeEvent(popup.doc, "mouseup", PopupDiv.dragEnd);
+ HTMLArea._removeEvent(popup.doc, "mouseover", HTMLArea._stopEvent);
+ HTMLArea._removeEvent(popup.doc, "mousemove", PopupDiv.dragIt);
+ popup.hideShowCovered();
+};
+
+PopupDiv.checkPopup = function (ev) {
+ is_ie && (ev = window.event);
+ var el = is_ie ? ev.srcElement : ev.target;
+ var cp = PopupDiv.currentPopup;
+ for (; (el != null) && (el != cp.element); el = el.parentNode);
+ if (el == null) {
+ cp.modal || ev.type == "mouseover" || cp.close();
+ HTMLArea._stopEvent(ev);
+ }
+};
+
+PopupDiv.prototype.addButtons = function() {
+ var self = this;
+ var div = this.doc.createElement("div");
+ this.content.appendChild(div);
+ div.className = "buttons";
+ for (var i = 0; i < arguments.length; ++i) {
+ var btn = arguments[i];
+ var button = this.doc.createElement("button");
+ div.appendChild(button);
+ button.innerHTML = HTMLArea.I18N.buttons[btn];
+ switch (btn) {
+ case "ok":
+ button.onclick = function() {
+ self.callHandler();
+ self.close();
+ };
+ break;
+ case "cancel":
+ button.onclick = function() {
+ self.close();
+ };
+ break;
+ }
+ }
+};
Modified: plog/trunk/js/htmlarea/popups/about.html
===================================================================
--- plog/trunk/js/htmlarea/popups/about.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/about.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,378 +1,375 @@
-<!--
-
-(c) dynarch.com, 2003-2004
-Author: Mihai Bazon, http://dynarch.com/mishoo
-Distributed as part of HTMLArea 3.0
-
-"You are not expected to understand this... I don't neither."
-
- (from The Linux Kernel Source Code,
- ./arch/x86_64/ia32/ptrace.c:90)
-
-;-)
-
--->
-
-<html style="height: 100%">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>About HTMLArea</title>
-<script type="text/javascript" src="popup.js"></script>
-<script type="text/javascript">
-window.resizeTo(450, 250);
-var TABS = [];
-var CURRENT_TAB = 0;
-var CONTENT_HEIGHT_DIFF = 0;
-var CONTENT_WIDTH_DIFF = 0;
-function selectTab(idx) {
- var ct = TABS[CURRENT_TAB];
- ct.className = ct.className.replace(/\s*tab-current\s*/, ' ');
- ct = TABS[CURRENT_TAB = idx];
- ct.className += ' tab-current';
- for (var i = TABS.length; --i >= 0;) {
- var area = document.getElementById("tab-area-" + i);
- if (CURRENT_TAB == i) {
- area.style.display = "block";
- } else {
- area.style.display = "none";
- }
- }
- document.body.style.visibility = "hidden";
- document.body.style.visibility = "visible";
- document.cookie = "HTMLAREA-ABOUT-TAB=" + idx;
-}
-var editor = null;
-function initDocument() {
- editor = window.dialogArguments;
- HTMLArea = window.opener.HTMLArea;
-
- var plugins = document.getElementById("plugins");
- var j = 0;
- var html = "<table width='99%' cellpadding='0' style='margin-top: 1em; collapse-borders: collapse; border: 1px solid #8b8;'>" +
- "<thead><tr>" +
- "<td>Name</td>" +
- "<td>Developer</td>" +
- "<td>Sponsored by</td>" +
- "<td>License<sup>*</sup></td>" +
- "</tr></thead><tbody>";
- for (var i in editor.plugins) {
- var info = editor.plugins[i];
- html += "<tr><td>" + info.name + " v" + info.version + "</td>" +
- "<td><a href='" + info.developer_url + "' target='_blank' title='Visit developer website'>" +
- info.developer + "</a></td>" +
- "<td><a href='" + info.sponsor_url + "' target='_blank' title='Visit sponsor website'>" +
- info.sponsor + "</a></td>" +
- "<td>" + info.license + "</td></tr>";
- ++j;
- }
-
- if (j) {
- html += "</tbody></table>" +
- "<p><sup>*</sup> License \"htmlArea\" means that the plugin is distributed under the same terms " +
- "as HTMLArea itself. Such plugins are likely to be those included in the official " +
- "HTMLArea distribution</p>";
- plugins.innerHTML = "<p>The following plugins have been loaded.</p>" + html;
- } else {
- plugins.innerHTML = "<p>No plugins have been loaded</p>";
- }
-
- plugins.innerHTML += "<p>User agent reports:<br/>" + navigator.userAgent + "</p>";
-
- var content = document.getElementById("content");
- if (window.innerHeight) {
- CONTENT_HEIGHT_DIFF = window.innerHeight - 250;
- CONTENT_WIDTH_DIFF = window.innerWidth - content.offsetWidth;
- } else {
- CONTENT_HEIGHT_DIFF = document.body.offsetHeight - 250;
- CONTENT_WIDTH_DIFF = document.body.offsetWidth - 400;
- }
- window.onresize();
- var bar = document.getElementById("tabbar");
- j = 0;
- for (var i = bar.firstChild; i; i = i.nextSibling) {
- TABS.push(i);
- i.__msh_tab = j;
- i.onmousedown = function(ev) { selectTab(this.__msh_tab); HTMLArea._stopEvent(ev || window.event); };
- var area = document.getElementById("tab-area-" + j);
- if (/tab-current/.test(i.className)) {
- CURRENT_TAB = j;
- area.style.display = "block";
- } else {
- area.style.display = "none";
- }
- ++j;
- }
- if (document.cookie.match(/HTMLAREA-ABOUT-TAB=([0-9]+)/))
- selectTab(RegExp.$1);
-}
-window.onresize = function() {
- var content = document.getElementById("content");
- if (window.innerHeight) {
- content.style.height = (window.innerHeight - CONTENT_HEIGHT_DIFF) + "px";
- content.style.width = (window.innerWidth - CONTENT_WIDTH_DIFF) + "px";
- } else {
- content.style.height = (document.body.offsetHeight - CONTENT_HEIGHT_DIFF) + "px";
- //content.style.width = (document.body.offsetWidth - CONTENT_WIDTH_DIFF) + "px";
- }
-}
-</script>
-<style>
- html,body,textarea,table { font-family: tahoma,verdana,arial; font-size: 11px;
-padding: 0px; margin: 0px; }
- tt { font-size: 120%; }
- body { padding: 0px; background: #cea; color: 000; }
- a:link, a:visited { color: #00f; }
- a:hover { color: #f00; }
- a:active { color: #f80; }
- button { font: 11px tahoma,verdana,sans-serif; background-color: #cea;
- border-width: 1px; }
-
- p { margin: 0.5em 0px; }
-
- h1 { font: bold 130% georgia,"times new roman",serif; margin: 0px; border-bottom: 1px solid #6a6; }
- h2 { font: bold 110% georgia,"times new roman",serif; margin: 0.7em 0px; }
-
- thead {
- font-weight: bold;
- background-color: #dfb;
- }
-
- .logo, .logo-hover {
- white-space: nowrap;
- background-color: #8f4; color: #040; padding: 3px; border-bottom: 1px solid #555;
- height: 5em;
- }
- .logo .brand, .logo-hover .brand {
- margin-left: 0.5em; margin-right: 0.5em; padding-bottom: 0.1em;
- font-family: impact,'arial black',arial,sans-serif; font-size: 28px;
- border-bottom: 1px solid #595; text-align: center;
- cursor: pointer;
- }
- .logo-hover {
- background-color: #fff;
- }
- .logo-hover .brand {
- color: #800;
- border-color: #04f;
- }
- .logo .letter, .logo-hover .letter { position: relative; font-family: monospace; }
- .logo .letter1 { top: 0.1em; }
- .logo .letter2 { top: 0.05em; }
- .logo .letter3 { top: -0.05em; }
- .logo .letter4 { top: -0.1em; }
-
- .logo-hover .letter1 { top: -0.1em; }
- .logo-hover .letter2 { top: -0.05em; }
- .logo-hover .letter3 { top: 0.05em; }
- .logo-hover .letter4 { top: 0.1em; }
- .logo .version, .logo-hover .version { font-family: georgia,"times new roman",serif; }
- .logo .release {
- font-size: 90%; margin-bottom: 1em;
- text-align: center; color: #484;
- }
- .logo .visit { display: none; }
- .logo-hover .release { display: none; }
- .logo-hover .visit {
- font-size: 90%; margin-bottom: 1em;
- text-align: center; color: #448;
- }
- .buttons {
- text-align: right; padding: 3px; background-color: #8f4;
- border-top: 1px solid #555;
- }
- #tabbar {
- position: relative;
- left: 10px;
- }
- .tab {
- color: #454;
- cursor: pointer;
- margin-left: -5px;
- float: left; position: relative;
- border: 1px solid #555;
- top: -3px; left: -2px;
- padding: 2px 10px 3px 10px;
- border-top: none; background-color: #9b7;
- -moz-border-radius: 0px 0px 4px 4px;
- z-index: 0;
- }
- .tab-current {
- color: #000;
- top: -4px;
- background-color: #cea;
- padding: 3px 10px 4px 10px;
- z-index: 10;
- }
- table.sponsors { border-top: 1px solid #aca; }
- table.sponsors td {
- border-bottom: 1px solid #aca; vertical-align: top;
- }
- table.sponsors tr td { padding: 2px 0px; }
- table.sponsors tr td.sponsor { text-align: right; padding-right: 0.3em; white-space: nowrap; }
- li, ol, ul { margin-top: 0px; margin-bottom: 0px; }
-</style></head>
-<body onload="__dlg_init(); initDocument();"
-><table cellspacing="0" cellpadding="0" style="border-collapse: collapse;
- width: 100%; height: 100%;">
-
-<tr style="height: 1em"><td id="tdheader">
-
-<div class="logo">
-<div class="brand"
-onmouseover="this.parentNode.className='logo-hover';"
-onmouseout="this.parentNode.className='logo';"
-onclick="window.open('http://dynarch.com/htmlarea/');">
-<span class="letter letter1"><H</span><span
-class="letter letter2">T</span><span
-class="letter letter3">M</span><span
-class="letter letter4">L</span>Area <span class="letter">/></span>
-<span class="version">3.0 <span style="position: relative; top: -0.6em; font-size: 50%; font-weight: normal">[ rev. rc1 ]</span></span></div>
-<div class="release">Compiled on Mar 1, 2004 19:37 GMT</div>
-<div class="visit">Go to http://dynarch.com/htmlarea/ [latest milestone release]</div>
-</div>
-
-</td></tr>
-<tr><td id="tdcontent" style="padding: 0.5em;">
-
-<div style="overflow: auto; height: 250px;" id="content">
-<div id="tab-areas">
-
-<div id="tab-area-0">
-
- <h1>HTMLArea</h1>
-
- <p>A free WYSIWYG editor replacement for <tt><textarea></tt> fields.<br />
- For Mozilla 1.3+ (any platform) or Internet Explorer 5.5+ (Windows).
- </p>
-
- <p style="text-align: center"
- >© 2002-2004 <a href="http://interactivetools.com" target="_blank">interactivetools.com</a>, inc.<br />
- © 2003-2004 <a href="http://dynarch.com" target="_blank">dynarch.com</a> LLC.<br />
- All Rights Reserved.</p>
-
- <h2>Project resources</h2>
-
- <ul>
- <li><a href="http://sourceforge.net/projects/itools-htmlarea/" target="_blank"
- >Project page</a> (@ sourceforge.net)</li>
- <li><a href="http://sourceforge.net/cvs/?group_id=69750" target="_blank"
- >Anonymous CVS access</a> (@ sourceforge.net)</li>
- <li><a href="http://sourceforge.net/tracker/?atid=525656&group_id=69750&func=browse" target="_blank"
- >Bug system</a> (@ sourceforge.net)</li>
- <li><a href="http://www.interactivetools.com/forum/gforum.cgi?forum=14;" target="_blank"
- >Forum</a> (@ interactivetools.com)</li>
- <li><a href="http://www.dynarch.com/htmlarea/" target="_blank"
- >Last public release</a> (@ dynarch.com)</li>
- </ul>
-
- <p>
- For download section please see the <a href="http://sourceforge.net/projects/itools-htmlarea/" target="_blank"
- >project page @ SourceForge</a>.
- </p>
-
-<p style="margin-top: 1em; text-align: center;">Version 3.0 developed and maintained by <a
-href="http://dynarch.com/mishoo/" title="http://dynarch.com/mishoo/" target="_blank">Mihai Bazon</a> / <a
-href="http://dynarch.com" title="http://dynarch.com/" target="_blank">dynarch.com</a></p>
-
-</div>
-
-<div id="tab-area-1">
-<h1>Thank you</h1>
-
- <p>
- <a href="http://dynarch.com" target="_blank">dynarch.com</a> would like to thank the following
- companies/persons for their <em>donations</em> to support development of HTMLArea (listed alphabetically):
- </p>
-
- <ul>
- <li><a href="http://www.neomedia.ro">Neomedia</a> (Romania)</li>
- <li><a href="http://www.os3.it" target="_blank">OS3</a> (Italy)</li>
- <li><a href="http://www.softwerk.net">SoftWerk</a> (Italy)</li>
- </ul>
-
- <p>Also many thanks to all people at InteractiveTools.com
- <a href="http://www.interactivetools.com/forum/gforum.cgi?forum=14;">HTMLArea forums</a> for
- contributing translations, feedback, bug reports and fixes.</p>
-
- <p>
- Last but not least, this project wouldn't have existed without
- <a href="http://interactivetools.com" target="_blank">InteractiveTools.com</a>.
- </p>
-
-</div>
-
-<div id="tab-area-2">
-<h1>htmlArea License (based on BSD license)</h1>
-
-<p style="text-align: center">© 2002-2004, interactivetools.com, inc.<br />
- © 2003-2004 dynarch.com LLC<br />
- All rights reserved.</p>
-
-<p>
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-</p>
-
-<ol>
-<li>
-Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-</li>
-
-<li>
-Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-</li>
-
-<li>
-Neither the name of interactivetools.com, inc. nor the names of its
-contributors may be used to endorse or promote products derived from this
-software without specific prior written permission.
-</li>
-</ol>
-
-<p>
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-</p>
-
-</div>
-
-<div id="tab-area-3">
-<h1>Plugins</h1>
-<div id="plugins">
-</div>
-</div>
-
-</div></div>
-
-
-</tr></td>
-<tr style="height: 1em"><td id="tdfooter">
-
-
-<div class="buttons">
-<div id="tabbar"
-><div class="tab tab-current"
->About</div><div class="tab"
->Thanks</div><div class="tab"
->License</div><div class="tab"
->Plugins</div></div>
-<button type="button" onclick="__dlg_close(null);">I agree it's cool</button>
-</div>
-
-</td></tr></table>
-
-</body></html>
-
-
+<!--
+
+(c) dynarch.com, 2003-2005
+Author: Mihai Bazon, http://dynarch.com/mishoo
+Distributed as part of HTMLArea 3.0
+
+"You are not expected to understand this... I don't neither."
+
+ (from The Linux Kernel Source Code,
+ ./arch/x86_64/ia32/ptrace.c:90)
+
+;-)
+
+-->
+
+<html style="height: 100%">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>About HTMLArea</title>
+<script type="text/javascript" src="popup.js"></script>
+<script type="text/javascript">
+window.resizeTo(450, 250);
+var TABS = [];
+var CURRENT_TAB = 0;
+var CONTENT_HEIGHT_DIFF = 0;
+var CONTENT_WIDTH_DIFF = 0;
+function selectTab(idx) {
+ var ct = TABS[CURRENT_TAB];
+ ct.className = ct.className.replace(/\s*tab-current\s*/, ' ');
+ ct = TABS[CURRENT_TAB = idx];
+ ct.className += ' tab-current';
+ for (var i = TABS.length; --i >= 0;) {
+ var area = document.getElementById("tab-area-" + i);
+ if (CURRENT_TAB == i) {
+ area.style.display = "block";
+ } else {
+ area.style.display = "none";
+ }
+ }
+ document.body.style.visibility = "hidden";
+ document.body.style.visibility = "visible";
+ document.cookie = "HTMLAREA-ABOUT-TAB=" + idx;
+}
+var editor = null;
+function initDocument() {
+ editor = window.dialogArguments;
+ HTMLArea = window.opener.HTMLArea;
+
+ var plugins = document.getElementById("plugins");
+ var j = 0;
+ var html = "<table width='99%' cellpadding='0' style='margin-top: 1em; collapse-borders: collapse; border: 1px solid #8b8;'>" +
+ "<thead><tr>" +
+ "<td>Name</td>" +
+ "<td>Developer</td>" +
+ "<td>Sponsored by</td>" +
+ "<td>License<sup>*</sup></td>" +
+ "</tr></thead><tbody>";
+ for (var i in editor.plugins) {
+ var info = editor.plugins[i];
+ html += "<tr><td>" + info.name + " v" + info.version + "</td>" +
+ "<td><a href='" + info.developer_url + "' target='_blank' title='Visit developer website'>" +
+ info.developer + "</a></td>" +
+ "<td><a href='" + info.sponsor_url + "' target='_blank' title='Visit sponsor website'>" +
+ info.sponsor + "</a></td>" +
+ "<td>" + info.license + "</td></tr>";
+ ++j;
+ }
+
+ if (j) {
+ html += "</tbody></table>" +
+ "<p><sup>*</sup> License \"htmlArea\" means that the plugin is distributed under the same terms " +
+ "as HTMLArea itself. Such plugins are likely to be those included in the official " +
+ "HTMLArea distribution</p>";
+ plugins.innerHTML = "<p>The following plugins have been loaded.</p>" + html;
+ } else {
+ plugins.innerHTML = "<p>No plugins have been loaded</p>";
+ }
+
+ plugins.innerHTML += "<p>User agent reports:<br/>" + navigator.userAgent + "</p>";
+
+ var content = document.getElementById("content");
+ if (window.innerHeight) {
+ CONTENT_HEIGHT_DIFF = window.innerHeight - 250;
+ CONTENT_WIDTH_DIFF = window.innerWidth - content.offsetWidth;
+ } else {
+ CONTENT_HEIGHT_DIFF = document.body.offsetHeight - 250;
+ CONTENT_WIDTH_DIFF = document.body.offsetWidth - 400;
+ }
+ window.onresize();
+ var bar = document.getElementById("tabbar");
+ j = 0;
+ for (var i = bar.firstChild; i; i = i.nextSibling) {
+ TABS.push(i);
+ i.__msh_tab = j;
+ i.onmousedown = function(ev) { selectTab(this.__msh_tab); HTMLArea._stopEvent(ev || window.event); };
+ var area = document.getElementById("tab-area-" + j);
+ if (/tab-current/.test(i.className)) {
+ CURRENT_TAB = j;
+ area.style.display = "block";
+ } else {
+ area.style.display = "none";
+ }
+ ++j;
+ }
+ if (document.cookie.match(/HTMLAREA-ABOUT-TAB=([0-9]+)/))
+ selectTab(RegExp.$1);
+}
+window.onresize = function() {
+ var content = document.getElementById("content");
+ if (window.innerHeight) {
+ content.style.height = (window.innerHeight - CONTENT_HEIGHT_DIFF) + "px";
+ content.style.width = (window.innerWidth - CONTENT_WIDTH_DIFF) + "px";
+ } else {
+ content.style.height = (document.body.offsetHeight - CONTENT_HEIGHT_DIFF) + "px";
+ //content.style.width = (document.body.offsetWidth - CONTENT_WIDTH_DIFF) + "px";
+ }
+}
+</script>
+<style>
+ html,body,textarea,table { font-family: tahoma,verdana,arial; font-size: 11px;
+padding: 0px; margin: 0px; }
+ tt { font-size: 120%; }
+ body { padding: 0px; background: #cea; color: 000; }
+ a:link, a:visited { color: #00f; }
+ a:hover { color: #f00; }
+ a:active { color: #f80; }
+ button { font: 11px tahoma,verdana,sans-serif; background-color: #cea;
+ border-width: 1px; }
+
+ p { margin: 0.5em 0px; }
+
+ h1 { font: bold 130% georgia,"times new roman",serif; margin: 0px; border-bottom: 1px solid #6a6; }
+ h2 { font: bold 110% georgia,"times new roman",serif; margin: 0.7em 0px; }
+
+ thead {
+ font-weight: bold;
+ background-color: #dfb;
+ }
+
+ .logo, .logo-hover {
+ white-space: nowrap;
+ background-color: #8f4; color: #040; padding: 3px; border-bottom: 1px solid #555;
+ height: 5em;
+ }
+ .logo .brand, .logo-hover .brand {
+ margin-left: 0.5em; margin-right: 0.5em; padding-bottom: 0.1em;
+ font-family: impact,'arial black',arial,sans-serif; font-size: 28px;
+ border-bottom: 1px solid #595; text-align: center;
+ cursor: pointer;
+ }
+ .logo-hover {
+ background-color: #fff;
+ }
+ .logo-hover .brand {
+ color: #800;
+ border-color: #04f;
+ }
+ .logo .letter, .logo-hover .letter { position: relative; font-family: monospace; }
+ .logo .letter1 { top: 0.1em; }
+ .logo .letter2 { top: 0.05em; }
+ .logo .letter3 { top: -0.05em; }
+ .logo .letter4 { top: -0.1em; }
+
+ .logo-hover .letter1 { top: -0.1em; }
+ .logo-hover .letter2 { top: -0.05em; }
+ .logo-hover .letter3 { top: 0.05em; }
+ .logo-hover .letter4 { top: 0.1em; }
+ .logo .version, .logo-hover .version { font-family: georgia,"times new roman",serif; }
+ .logo .release {
+ font-size: 90%; margin-bottom: 1em;
+ text-align: center; color: #484;
+ }
+ .logo .visit { display: none; }
+ .logo-hover .release { display: none; }
+ .logo-hover .visit {
+ font-size: 90%; margin-bottom: 1em;
+ text-align: center; color: #448;
+ }
+ .buttons {
+ text-align: right; padding: 3px; background-color: #8f4;
+ border-top: 1px solid #555;
+ }
+ #tabbar {
+ position: relative;
+ left: 10px;
+ }
+ .tab {
+ color: #454;
+ cursor: pointer;
+ margin-left: -5px;
+ float: left; position: relative;
+ border: 1px solid #555;
+ top: -3px; left: -2px;
+ padding: 2px 10px 3px 10px;
+ border-top: none; background-color: #9b7;
+ -moz-border-radius: 0px 0px 4px 4px;
+ z-index: 0;
+ }
+ .tab-current {
+ color: #000;
+ top: -4px;
+ background-color: #cea;
+ padding: 3px 10px 4px 10px;
+ z-index: 10;
+ }
+ table.sponsors { border-top: 1px solid #aca; }
+ table.sponsors td {
+ border-bottom: 1px solid #aca; vertical-align: top;
+ }
+ table.sponsors tr td { padding: 2px 0px; }
+ table.sponsors tr td.sponsor { text-align: right; padding-right: 0.3em; white-space: nowrap; }
+ li, ol, ul { margin-top: 0px; margin-bottom: 0px; }
+</style></head>
+<body onload="__dlg_init(); initDocument();"
+><table cellspacing="0" cellpadding="0" style="border-collapse: collapse;
+ width: 100%; height: 100%;">
+
+<tr style="height: 1em"><td id="tdheader">
+
+<div class="logo">
+<div class="brand"
+onmouseover="this.parentNode.className='logo-hover';"
+onmouseout="this.parentNode.className='logo';"
+onclick="window.open('http://www.htmlarea.com/');">
+<span class="letter letter1"><H</span><span
+class="letter letter2">T</span><span
+class="letter letter3">M</span><span
+class="letter letter4">L</span>Area <span class="letter">/></span>
+<span class="version"></span></div>
+<div class="release">Compiled on Jan , 2005 23:43 GMT</div>
+<div class="visit">Go to http://www.htmlarea.com/ [latest milestone release]</div>
+</div>
+
+</td></tr>
+<tr><td id="tdcontent" style="padding: 0.5em;">
+
+<div style="overflow: auto; height: 250px;" id="content">
+<div id="tab-areas">
+
+<div id="tab-area-0">
+
+ <h1>HTMLArea</h1>
+
+ <p>A free WYSIWYG editor replacement for <tt><textarea></tt> fields.<br />
+ For Mozilla 1.3+ (any platform) or Internet Explorer 5.5+ (Windows).
+ </p>
+
+ <p style="text-align: center"
+ >© 2002-2004 <a href="http://interactivetools.com" target="_blank">interactivetools.com</a>, inc.<br />
+ © 2003-2005 <a href="http://dynarch.com" target="_blank">dynarch.com</a> LLC.<br />
+ All Rights Reserved.</p>
+
+ <h2>Project resources</h2>
+
+ <ul>
+ <li><a href="http://sourceforge.net/projects/itools-htmlarea/" target="_blank"
+ >Project page</a> (@ sourceforge.net)</li>
+ <li><a href="http://sourceforge.net/cvs/?group_id=69750" target="_blank"
+ >Anonymous CVS access</a> (@ sourceforge.net)</li>
+ <li><a href="http://sourceforge.net/tracker/?atid=525656&group_id=69750&func=browse" target="_blank"
+ >Bug system</a> (@ sourceforge.net)</li>
+ <li><a href="http://www.htmlarea.com/forum/" target="_blank"
+ >Forum</a> (@ interactivetools.com)</li>
+ <li><a href="http://www.htmlarea.com/" target="_blank"
+ >Last public release</a></li>
+ </ul>
+
+ <p>
+ For download section please see the <a href="http://sourceforge.net/projects/itools-htmlarea/" target="_blank"
+ >project page @ SourceForge</a>.
+ </p>
+
+</div>
+
+<div id="tab-area-1">
+<h1>Thank you</h1>
+
+ <p>
+ <a href="http://dynarch.com" target="_blank">dynarch.com</a> would like to thank the following
+ companies/persons for their <em>donations</em> to support development of HTMLArea (listed alphabetically):
+ </p>
+
+ <ul>
+ <li><a href="http://www.computerlove.co.uk" target="_blank">Code Computer Love Ltd.</a> (UK)</li>
+ <li><a href="http://www.neomedia.ro" target="_blank">Neomedia</a> (Romania)</li>
+ <li><a href="http://www.os3.it" target="_blank">OS3</a> (Italy)</li>
+ <li><a href="http://www.softwerk.net" target="_blank">SoftWerk</a> (Italy)</li>
+ </ul>
+
+ <p>Also many thanks to all people at InteractiveTools.com
+ <a href="http://www.htmlarea.com/forum/">HTMLArea forums</a> for
+ contributing translations, feedback, bug reports and fixes.</p>
+
+ <p>
+ Last but not least, this project wouldn't have existed without
+ <a href="http://interactivetools.com" target="_blank">InteractiveTools.com</a>.
+ </p>
+
+</div>
+
+<div id="tab-area-2">
+<h1>htmlArea License (based on BSD license)</h1>
+
+<p style="text-align: center">© 2002-2004, interactivetools.com, inc.<br />
+ © 2003-2004 dynarch.com LLC<br />
+ All rights reserved.</p>
+
+<p>
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+</p>
+
+<ol>
+<li>
+Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+</li>
+
+<li>
+Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+</li>
+
+<li>
+Neither the name of interactivetools.com, inc. nor the names of its
+contributors may be used to endorse or promote products derived from this
+software without specific prior written permission.
+</li>
+</ol>
+
+<p>
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+</p>
+
+</div>
+
+<div id="tab-area-3">
+<h1>Plugins</h1>
+<div id="plugins">
+</div>
+</div>
+
+</div></div>
+
+
+</tr></td>
+<tr style="height: 1em"><td id="tdfooter">
+
+
+<div class="buttons">
+<div id="tabbar"
+><div class="tab tab-current"
+>About</div><div class="tab"
+>Thanks</div><div class="tab"
+>License</div><div class="tab"
+>Plugins</div></div>
+<button type="button" onclick="__dlg_close(null);">I agree it's cool</button>
+</div>
+
+</td></tr></table>
+
+</body></html>
+
+
Modified: plog/trunk/js/htmlarea/popups/blank.html
===================================================================
--- plog/trunk/js/htmlarea/popups/blank.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/blank.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,2 +1,2 @@
-<html>
+<html>
</html>
\ No newline at end of file
Modified: plog/trunk/js/htmlarea/popups/custom2.html
===================================================================
--- plog/trunk/js/htmlarea/popups/custom2.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/custom2.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,35 +1,35 @@
-<html style="width:300px; Height: 60px;">
- <head>
- <title>Select Phrase</title>
-<script language="javascript">
-
-var myTitle = window.dialogArguments;
-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.close(); // close dialog
-}
-
-</script>
-</head>
-<body bgcolor="#FFFFFF" topmargin=15 leftmargin=0>
-
-<form method=get onSubmit="Set(document.all.ColorHex.value); return false;">
-<div align=center>
-
-<select name="textPulldown">
-<option>The quick brown</option>
-<option>fox jumps over</option>
-<option>the lazy dog.</option>
-</select>
-
-<input type="button" value=" Go " onClick="returnSelected()">
-
-</div>
-</form>
+<html style="width:300px; Height: 60px;">
+ <head>
+ <title>Select Phrase</title>
+<script language="javascript">
+
+var myTitle = window.dialogArguments;
+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.close(); // close dialog
+}
+
+</script>
+</head>
+<body bgcolor="#FFFFFF" topmargin=15 leftmargin=0>
+
+<form method=get onSubmit="Set(document.all.ColorHex.value); return false;">
+<div align=center>
+
+<select name="textPulldown">
+<option>The quick brown</option>
+<option>fox jumps over</option>
+<option>the lazy dog.</option>
+</select>
+
+<input type="button" value=" Go " onClick="returnSelected()">
+
+</div>
+</form>
</body></html>
\ No newline at end of file
Modified: plog/trunk/js/htmlarea/popups/editor_help.html
===================================================================
--- plog/trunk/js/htmlarea/popups/editor_help.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/editor_help.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,16 +1,16 @@
-<html>
- <head>
- <title>Editor Help</title>
- <style>
- body, td, p, div { font-family: arial; font-size: x-small; }
- </style>
- </head>
-<body>
-
-<h2>Editor Help<hr></h2>
-
-Todo...
-
-
-</body>
+<html>
+ <head>
+ <title>Editor Help</title>
+ <style>
+ body, td, p, div { font-family: arial; font-size: x-small; }
+ </style>
+ </head>
+<body>
+
+<h2>Editor Help<hr></h2>
+
+Todo...
+
+
+</body>
</html>
\ No newline at end of file
Modified: plog/trunk/js/htmlarea/popups/fullscreen.html
===================================================================
--- plog/trunk/js/htmlarea/popups/fullscreen.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/fullscreen.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,133 +1,139 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html>
- <head>
- <title>Fullscreen HTMLArea</title>
- <script type="text/javascript">
- _editor_url = window.opener._editor_url;
- _editor_lang = window.opener._editor_lang;
- var BASE = window.opener.document.baseURI || window.opener.document.URL;
- var head = document.getElementsByTagName("head")[0];
- var base = document.createElement("base");
- base.href = BASE;
- head.appendChild(base);
- </script>
-
- <script type="text/javascript" src="../htmlarea.js"></script>
-
- <script type="text/javascript">
- // load HTMLArea scripts that are present in the opener frame
- var scripts = window.opener.HTMLArea._scripts;
- for (var i = 4; i < scripts.length; ++i) {
- document.write("<scr" + "ipt type='text/javascript' src='" + scripts[i] + "'></scr" + "ipt>");
- }
- </script>
-
- <!-- browser takes a coffee break here -->
- <script type="text/javascript">
-var parent_object = null;
-var editor = null; // to be initialized later [ function init() ]
-
-/* ---------------------------------------------------------------------- *\
- Function :
- Description :
-\* ---------------------------------------------------------------------- */
-
-function _CloseOnEsc(ev) {
- ev || (ev = window.event);
- if (ev.keyCode == 27) {
- // update_parent();
- window.close();
- return;
- }
-}
-
-/* ---------------------------------------------------------------------- *\
- Function : resize_editor
- Description : resize the editor when the user resizes the popup
-\* ---------------------------------------------------------------------- */
-
-function resize_editor() { // resize editor to fix window
- var newHeight;
- if (document.all) {
- // IE
- newHeight = document.body.offsetHeight - editor._toolbar.offsetHeight;
- if (newHeight < 0) { newHeight = 0; }
- } else {
- // Gecko
- newHeight = window.innerHeight - editor._toolbar.offsetHeight;
- }
- if (editor.config.statusBar) {
- newHeight -= editor._statusBar.offsetHeight;
- }
- editor._textArea.style.height = editor._iframe.style.height = newHeight + "px";
-}
-
-/* ---------------------------------------------------------------------- *\
- Function : init
- Description : run this code on page load
-\* ---------------------------------------------------------------------- */
-
-function init() {
- parent_object = opener.HTMLArea._object;
- var config = HTMLArea.cloneObject( parent_object.config );
- config.width = "100%";
- config.height = "auto";
-
- // change maximize button to minimize button
- config.btnList["popupeditor"] = [ 'Minimize Editor', _editor_url + 'images/fullscreen_minimize.gif', true,
- function() { window.close(); } ];
-
- // generate editor and resize it
- editor = new HTMLArea("editor", config);
-
- // register the plugins, if any
- for (var i in parent_object.plugins) {
- var plugin = parent_object.plugins[i];
- editor.registerPlugin2(plugin.name, plugin.args);
- }
- // and restore the original toolbar
- config.toolbar = parent_object.config.toolbar;
- editor.generate();
- editor._iframe.style.width = "100%";
- editor._textArea.style.width = "100%";
- resize_editor();
-
- editor.doctype = parent_object.doctype;
-
- // set child window contents and event handlers, after a small delay
- setTimeout(function() {
- editor.setHTML(parent_object.getInnerHTML());
-
- // switch mode if needed
- if (parent_object._mode == "textmode") { editor.setMode("textmode"); }
-
- // continuously update parent editor window
- setInterval(update_parent, 500);
-
- // setup event handlers
- document.body.onkeypress = _CloseOnEsc;
- editor._doc.body.onkeypress = _CloseOnEsc;
- editor._textArea.onkeypress = _CloseOnEsc;
- window.onresize = resize_editor;
- }, 333); // give it some time to meet the new frame
-}
-
-/* ---------------------------------------------------------------------- *\
- Function : update_parent
- Description : update parent window editor field with contents from child window
- \* ---------------------------------------------------------------------- */
-
-function update_parent() {
- // use the fast version
- parent_object.setHTML(editor.getInnerHTML());
-}
-
- </script>
- <style type="text/css"> html, body { height: 100%; margin: 0px; border: 0px; background-color: buttonface; } </style>
- </head>
- <body scroll="no" onload="setTimeout(function(){init();}, 500)" onunload="update_parent()">
- <form style="margin: 0px; border: 1px solid; border-color: threedshadow threedhighlight threedhighlight threedshadow;">
- <textarea name="editor" id="editor" style="width:100%; height:300px"> </textarea>
- </form>
- </body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html>
+ <head>
+ <title>Fullscreen HTMLArea</title>
+ <script type="text/javascript">
+ _editor_url = window.opener._editor_url || '../';
+ _editor_lang = window.opener._editor_lang;
+ _editor_css = window.opener._editor_css;
+ var BASE = window.opener.document.baseURI || window.opener.document.URL;
+ var head = document.getElementsByTagName("head")[0];
+ var base = document.createElement("base");
+ base.href = BASE;
+ head.appendChild(base);
+ </script>
+
+ <script type="text/javascript">
+ document.write('<scr' + 'ipt type="text/javascript" src="' + _editor_url + 'htmlarea.js"></scr' + 'ipt>');
+ </script>
+ <script type="text/javascript">
+ // load HTMLArea scripts that are present in the opener frame
+ var scripts = window.opener.HTMLArea._scripts;
+ for (var i = 3; i < scripts.length; ++i) {
+ //document.write("<scr" + "ipt type='text/javascript' src='" + scripts[i] + "'></scr" + "ipt>");
+ HTMLArea.loadScript(scripts[i]);
+ }
+ </script>
+
+ <!-- browser takes a coffee break here -->
+ <script type="text/javascript">
+var parent_object = null;
+var editor = null; // to be initialized later [ function init() ]
+
+/* ---------------------------------------------------------------------- *\
+ Function :
+ Description :
+\* ---------------------------------------------------------------------- */
+
+function _CloseOnEsc(ev) {
+ ev || (ev = window.event) || (ev = editor._iframe.contentWindow.event);
+ if (ev.keyCode == 27) {
+ // update_parent();
+ window.close();
+ return;
+ }
+}
+
+/* ---------------------------------------------------------------------- *\
+ Function : resize_editor
+ Description : resize the editor when the user resizes the popup
+\* ---------------------------------------------------------------------- */
+
+function resize_editor() { // resize editor to fix window
+ var newHeight;
+ if (document.all) {
+ // IE
+ newHeight = document.body.offsetHeight - editor._toolbar.offsetHeight;
+ if (newHeight < 0) { newHeight = 0; }
+ } else {
+ // Gecko
+ newHeight = window.innerHeight - editor._toolbar.offsetHeight;
+ }
+ if (editor.config.statusBar) {
+ newHeight -= editor._statusBar.offsetHeight;
+ }
+ editor._textArea.style.height = editor._iframe.style.height = newHeight - (HTMLArea.is_gecko ? 8 : 0) + "px";
+}
+
+/* ---------------------------------------------------------------------- *\
+ Function : init
+ Description : run this code on page load
+\* ---------------------------------------------------------------------- */
+
+function init() {
+ parent_object = opener.HTMLArea._object;
+ var config = HTMLArea.cloneObject( parent_object.config );
+ config.width = "100%";
+ config.height = "auto";
+
+ // change maximize button to minimize button
+ config.btnList["popupeditor"] = [ 'Minimize Editor', _editor_url + 'images/fullscreen_minimize.gif', true,
+ function() { window.close(); } ];
+
+ // generate editor and resize it
+ editor = new HTMLArea("editor", config);
+
+ // register the plugins, if any
+ for (var i in parent_object.plugins) {
+ var plugin = parent_object.plugins[i];
+ try {
+ eval(plugin.name);
+ editor.registerPlugin2(plugin.name, plugin.args);
+ } catch(e) {};
+ }
+ // and restore the original toolbar
+ config.toolbar = parent_object.config.toolbar;
+ editor.generate();
+ editor._iframe.style.width = "100%";
+ editor._textArea.style.width = "100%";
+ resize_editor();
+
+ editor.doctype = parent_object.doctype;
+
+ // set child window contents and event handlers, after a small delay
+ setTimeout(function() {
+ editor.setHTML(parent_object.getInnerHTML());
+
+ // switch mode if needed
+ if (parent_object._mode == "textmode") { editor.setMode("textmode"); }
+
+ // continuously update parent editor window
+ setInterval(update_parent, 500);
+
+ // setup event handlers
+ document.body.onkeypress = _CloseOnEsc;
+ editor._doc.body.onkeypress = _CloseOnEsc;
+ editor._textArea.onkeypress = _CloseOnEsc;
+ window.onresize = resize_editor;
+ }, 333); // give it some time to meet the new frame
+}
+
+/* ---------------------------------------------------------------------- *\
+ Function : update_parent
+ Description : update parent window editor field with contents from child window
+ \* ---------------------------------------------------------------------- */
+
+function update_parent() {
+ // use the fast version
+ parent_object.setHTML(editor.getInnerHTML());
+}
+
+ </script>
+ <style type="text/css"> html, body { height: 100%; margin: 0px; border: 0px; background-color: buttonface; } </style>
+ </head>
+ <body scroll="no" onload="HTMLArea.onload = init; HTMLArea.init();" onunload="update_parent()">
+ <form style="margin: 0px; border: 1px solid; border-color: threedshadow threedhighlight threedhighlight threedshadow;">
+ <textarea name="editor" id="editor" style="width:100%; height:300px"> </textarea>
+ </form>
+ </body>
+</html>
Modified: plog/trunk/js/htmlarea/popups/insert_image.html
===================================================================
--- plog/trunk/js/htmlarea/popups/insert_image.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/insert_image.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,191 +1,191 @@
-<html>
-
-<head>
- <title>Insert Image</title>
-
-<script type="text/javascript" src="popup.js"></script>
-
-<script type="text/javascript">
-
-window.resizeTo(400, 100);
-
-function Init() {
- __dlg_init();
- var param = window.dialogArguments;
- if (param) {
- document.getElementById("f_url").value = param["f_url"];
- document.getElementById("f_alt").value = param["f_alt"];
- document.getElementById("f_border").value = param["f_border"];
- document.getElementById("f_align").value = param["f_align"];
- document.getElementById("f_vert").value = param["f_vert"];
- document.getElementById("f_horiz").value = param["f_horiz"];
- window.ipreview.location.replace(param.f_url);
- }
- document.getElementById("f_url").focus();
-};
-
-function onOK() {
- var required = {
- "f_url": "You must enter the URL"
- };
- for (var i in required) {
- var el = document.getElementById(i);
- if (!el.value) {
- alert(required[i]);
- el.focus();
- return false;
- }
- }
- // pass data back to the calling window
- var fields = ["f_url", "f_alt", "f_align", "f_border",
- "f_horiz", "f_vert"];
- var param = new Object();
- for (var i in fields) {
- var id = fields[i];
- var el = document.getElementById(id);
- param[id] = el.value;
- }
- __dlg_close(param);
- return false;
-};
-
-function onCancel() {
- __dlg_close(null);
- return false;
-};
-
-function onPreview() {
- var f_url = document.getElementById("f_url");
- var url = f_url.value;
- if (!url) {
- alert("You have to enter an URL first");
- f_url.focus();
- return false;
- }
- window.ipreview.location.replace(url);
- return false;
-};
-</script>
-
-<style type="text/css">
-html, body {
- background: ButtonFace;
- color: ButtonText;
- font: 11px Tahoma,Verdana,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-body { padding: 5px; }
-table {
- font: 11px Tahoma,Verdana,sans-serif;
-}
-form p {
- margin-top: 5px;
- margin-bottom: 5px;
-}
-.fl { width: 9em; float: left; padding: 2px 5px; text-align: right; }
-.fr { width: 6em; float: left; padding: 2px 5px; text-align: right; }
-fieldset { padding: 0px 10px 5px 5px; }
-select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
-button { width: 70px; }
-.space { padding: 2px; }
-
-.title { background: #ddf; color: #000; font-weight: bold; font-size: 120%; padding: 3px 10px; margin-bottom: 10px;
-border-bottom: 1px solid black; letter-spacing: 2px;
-}
-form { padding: 0px; margin: 0px; }
-</style>
-
-</head>
-
-<body onload="Init()">
-
-<div class="title">Insert Image</div>
-<!--- new stuff --->
-<form action="" method="get">
-<table border="0" width="100%" style="padding: 0px; margin: 0px">
- <tbody>
-
- <tr>
- <td style="width: 7em; text-align: right">Image URL:</td>
- <td><input type="text" name="url" id="f_url" style="width:75%"
- title="Enter the image URL here" />
- <button name="preview" onclick="return onPreview();"
- title="Preview the image in a new window">Preview</button>
- </td>
- </tr>
- <tr>
- <td style="width: 7em; text-align: right">Alternate text:</td>
- <td><input type="text" name="alt" id="f_alt" style="width:100%"
- title="For browsers that don't support images" /></td>
- </tr>
-
- </tbody>
-</table>
-
-<p />
-
-<fieldset style="float: left; margin-left: 5px;">
-<legend>Layout</legend>
-
-<div class="space"></div>
-
-<div class="fl">Alignment:</div>
-<select size="1" name="align" id="f_align"
- title="Positioning of this image">
- <option value="" >Not set</option>
- <option value="left" >Left</option>
- <option value="right" >Right</option>
- <option value="texttop" >Texttop</option>
- <option value="absmiddle" >Absmiddle</option>
- <option value="baseline" selected="1" >Baseline</option>
- <option value="absbottom" >Absbottom</option>
- <option value="bottom" >Bottom</option>
- <option value="middle" >Middle</option>
- <option value="top" >Top</option>
-</select>
-
-<p />
-
-<div class="fl">Border thickness:</div>
-<input type="text" name="border" id="f_border" size="5"
-title="Leave empty for no border" />
-
-<div class="space"></div>
-
-</fieldset>
-
-<fieldset style="float:right; margin-right: 5px;">
-<legend>Spacing</legend>
-
-<div class="space"></div>
-
-<div class="fr">Horizontal:</div>
-<input type="text" name="horiz" id="f_horiz" size="5"
-title="Horizontal padding" />
-
-<p />
-
-<div class="fr">Vertical:</div>
-<input type="text" name="vert" id="f_vert" size="5"
-title="Vertical padding" />
-
-<div class="space"></div>
-
-</fieldset>
-<br clear="all" />
-<table width="100%" style="margin-bottom: 0.2em">
- <tr>
- <td valign="bottom">
- Image Preview:<br />
- <iframe name="ipreview" id="ipreview" frameborder="0" style="border : 1px solid gray;" height="200" width="300" src=""></iframe>
- </td>
- <td valign="bottom" style="text-align: right">
- <button type="button" name="ok" onclick="return onOK();">OK</button><br>
- <button type="button" name="cancel" onclick="return onCancel();">Cancel</button>
- </td>
- </tr>
-</table>
-</form>
-</body>
-</html>
+<html>
+
+<head>
+ <title>Insert Image</title>
+
+<script type="text/javascript" src="popup.js"></script>
+
+<script type="text/javascript">
+
+window.resizeTo(400, 100);
+
+function Init() {
+ __dlg_init();
+ var param = window.dialogArguments;
+ if (param) {
+ document.getElementById("f_url").value = param["f_url"];
+ document.getElementById("f_alt").value = param["f_alt"];
+ document.getElementById("f_border").value = param["f_border"];
+ document.getElementById("f_align").value = param["f_align"];
+ document.getElementById("f_vert").value = param["f_vert"];
+ document.getElementById("f_horiz").value = param["f_horiz"];
+ window.ipreview.location.replace(param.f_url);
+ }
+ document.getElementById("f_url").focus();
+};
+
+function onOK() {
+ var required = {
+ "f_url": "You must enter the URL"
+ };
+ for (var i in required) {
+ var el = document.getElementById(i);
+ if (!el.value) {
+ alert(required[i]);
+ el.focus();
+ return false;
+ }
+ }
+ // pass data back to the calling window
+ var fields = ["f_url", "f_alt", "f_align", "f_border",
+ "f_horiz", "f_vert"];
+ var param = new Object();
+ for (var i in fields) {
+ var id = fields[i];
+ var el = document.getElementById(id);
+ param[id] = el.value;
+ }
+ __dlg_close(param);
+ return false;
+};
+
+function onCancel() {
+ __dlg_close(null);
+ return false;
+};
+
+function onPreview() {
+ var f_url = document.getElementById("f_url");
+ var url = f_url.value;
+ if (!url) {
+ alert("You have to enter an URL first");
+ f_url.focus();
+ return false;
+ }
+ window.ipreview.location.replace(url);
+ return false;
+};
+</script>
+
+<style type="text/css">
+html, body {
+ background: ButtonFace;
+ color: ButtonText;
+ font: 11px Tahoma,Verdana,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+body { padding: 5px; }
+table {
+ font: 11px Tahoma,Verdana,sans-serif;
+}
+form p {
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+.fl { width: 9em; float: left; padding: 2px 5px; text-align: right; }
+.fr { width: 6em; float: left; padding: 2px 5px; text-align: right; }
+fieldset { padding: 0px 10px 5px 5px; }
+select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
+button { width: 70px; }
+.space { padding: 2px; }
+
+.title { background: #ddf; color: #000; font-weight: bold; font-size: 120%; padding: 3px 10px; margin-bottom: 10px;
+border-bottom: 1px solid black; letter-spacing: 2px;
+}
+form { padding: 0px; margin: 0px; }
+</style>
+
+</head>
+
+<body onload="Init()">
+
+<div class="title">Insert Image</div>
+<!--- new stuff --->
+<form action="" method="get">
+<table border="0" width="100%" style="padding: 0px; margin: 0px">
+ <tbody>
+
+ <tr>
+ <td style="width: 7em; text-align: right">Image URL:</td>
+ <td><input type="text" name="url" id="f_url" style="width:75%"
+ title="Enter the image URL here" />
+ <button name="preview" onclick="return onPreview();"
+ title="Preview the image in a new window">Preview</button>
+ </td>
+ </tr>
+ <tr>
+ <td style="width: 7em; text-align: right">Alternate text:</td>
+ <td><input type="text" name="alt" id="f_alt" style="width:100%"
+ title="For browsers that don't support images" /></td>
+ </tr>
+
+ </tbody>
+</table>
+
+<p />
+
+<fieldset style="float: left; margin-left: 5px;">
+<legend>Layout</legend>
+
+<div class="space"></div>
+
+<div class="fl">Alignment:</div>
+<select size="1" name="align" id="f_align"
+ title="Positioning of this image">
+ <option value="" >Not set</option>
+ <option value="left" >Left</option>
+ <option value="right" >Right</option>
+ <option value="texttop" >Texttop</option>
+ <option value="absmiddle" >Absmiddle</option>
+ <option value="baseline" selected="1" >Baseline</option>
+ <option value="absbottom" >Absbottom</option>
+ <option value="bottom" >Bottom</option>
+ <option value="middle" >Middle</option>
+ <option value="top" >Top</option>
+</select>
+
+<p />
+
+<div class="fl">Border thickness:</div>
+<input type="text" name="border" id="f_border" size="5"
+title="Leave empty for no border" />
+
+<div class="space"></div>
+
+</fieldset>
+
+<fieldset style="float:right; margin-right: 5px;">
+<legend>Spacing</legend>
+
+<div class="space"></div>
+
+<div class="fr">Horizontal:</div>
+<input type="text" name="horiz" id="f_horiz" size="5"
+title="Horizontal padding" />
+
+<p />
+
+<div class="fr">Vertical:</div>
+<input type="text" name="vert" id="f_vert" size="5"
+title="Vertical padding" />
+
+<div class="space"></div>
+
+</fieldset>
+<br clear="all" />
+<table width="100%" style="margin-bottom: 0.2em">
+ <tr>
+ <td valign="bottom">
+ Image Preview:<br />
+ <iframe name="ipreview" id="ipreview" frameborder="0" style="border : 1px solid gray;" height="200" width="300" src=""></iframe>
+ </td>
+ <td valign="bottom" style="text-align: right">
+ <button type="button" name="ok" onclick="return onOK();">OK</button><br>
+ <button type="button" name="cancel" onclick="return onCancel();">Cancel</button>
+ </td>
+ </tr>
+</table>
+</form>
+</body>
+</html>
Modified: plog/trunk/js/htmlarea/popups/insert_table.html
===================================================================
--- plog/trunk/js/htmlarea/popups/insert_table.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/insert_table.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,174 +1,175 @@
-<html>
-
-<head>
- <title>Insert Table</title>
-
-<script type="text/javascript" src="popup.js"></script>
-
-<script type="text/javascript">
-
-window.resizeTo(400, 100);
-
-function Init() {
- __dlg_init();
- document.getElementById("f_rows").focus();
-};
-
-function onOK() {
- var required = {
- "f_rows": "You must enter a number of rows",
- "f_cols": "You must enter a number of columns"
- };
- for (var i in required) {
- var el = document.getElementById(i);
- if (!el.value) {
- alert(required[i]);
- el.focus();
- return false;
- }
- }
- var fields = ["f_rows", "f_cols", "f_width", "f_unit",
- "f_align", "f_border", "f_spacing", "f_padding"];
- var param = new Object();
- for (var i in fields) {
- var id = fields[i];
- var el = document.getElementById(id);
- param[id] = el.value;
- }
- __dlg_close(param);
- return false;
-};
-
-function onCancel() {
- __dlg_close(null);
- return false;
-};
-
-</script>
-
-<style type="text/css">
-html, body {
- background: ButtonFace;
- color: ButtonText;
- font: 11px Tahoma,Verdana,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-body { padding: 5px; }
-table {
- font: 11px Tahoma,Verdana,sans-serif;
-}
-form p {
- margin-top: 5px;
- margin-bottom: 5px;
-}
-.fl { width: 9em; float: left; padding: 2px 5px; text-align: right; }
-.fr { width: 7em; float: left; padding: 2px 5px; text-align: right; }
-fieldset { padding: 0px 10px 5px 5px; }
-select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
-button { width: 70px; }
-.space { padding: 2px; }
-
-.title { background: #ddf; color: #000; font-weight: bold; font-size: 120%; padding: 3px 10px; margin-bottom: 10px;
-border-bottom: 1px solid black; letter-spacing: 2px;
-}
-form { padding: 0px; margin: 0px; }
-</style>
-
-</head>
-
-<body onload="Init()">
-
-<div class="title">Insert Table</div>
-
-<form action="" method="get">
-<table border="0" style="padding: 0px; margin: 0px">
- <tbody>
-
- <tr>
- <td style="width: 4em; text-align: right">Rows:</td>
- <td><input type="text" name="rows" id="f_rows" size="5" title="Number of rows" value="2" /></td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td style="width: 4em; text-align: right">Cols:</td>
- <td><input type="text" name="cols" id="f_cols" size="5" title="Number of columns" value="4" /></td>
- <td style="width: 4em; text-align: right">Width:</td>
- <td><input type="text" name="width" id="f_width" size="5" title="Width of the table" value="100" /></td>
- <td><select size="1" name="unit" id="f_unit" title="Width unit">
- <option value="%" selected="1" >Percent</option>
- <option value="px" >Pixels</option>
- <option value="em" >Em</option>
- </select></td>
- </tr>
-
- </tbody>
-</table>
-
-<p />
-
-<fieldset style="float: left; margin-left: 5px;">
-<legend>Layout</legend>
-
-<div class="space"></div>
-
-<div class="fl">Alignment:</div>
-<select size="1" name="align" id="f_align"
- title="Positioning of this image">
- <option value="" selected="1" >Not set</option>
- <option value="left" >Left</option>
- <option value="right" >Right</option>
- <option value="texttop" >Texttop</option>
- <option value="absmiddle" >Absmiddle</option>
- <option value="baseline" >Baseline</option>
- <option value="absbottom" >Absbottom</option>
- <option value="bottom" >Bottom</option>
- <option value="middle" >Middle</option>
- <option value="top" >Top</option>
-</select>
-
-<p />
-
-<div class="fl">Border thickness:</div>
-<input type="text" name="border" id="f_border" size="5" value="1"
-title="Leave empty for no border" />
-<!--
-<p />
-
-<div class="fl">Collapse borders:</div>
-<input type="checkbox" name="collapse" id="f_collapse" />
--->
-<div class="space"></div>
-
-</fieldset>
-
-<fieldset style="float:right; margin-right: 5px;">
-<legend>Spacing</legend>
-
-<div class="space"></div>
-
-<div class="fr">Cell spacing:</div>
-<input type="text" name="spacing" id="f_spacing" size="5" value="1"
-title="Space between adjacent cells" />
-
-<p />
-
-<div class="fr">Cell padding:</div>
-<input type="text" name="padding" id="f_padding" size="5" value="1"
-title="Space between content and border in cell" />
-
-<div class="space"></div>
-
-</fieldset>
-
-<div style="margin-top: 85px; border-top: 1px solid #999; padding: 2px; text-align: right;">
-<button type="button" name="ok" onclick="return onOK();">OK</button>
-<button type="button" name="cancel" onclick="return onCancel();">Cancel</button>
-</div>
-
-</form>
-
-</body>
-</html>
+<html>
+
+<head>
+ <title>Insert Table</title>
+
+<script type="text/javascript" src="popup.js"></script>
+
+<script type="text/javascript">
+
+window.resizeTo(400, 100);
+
+function Init() {
+ i18n = window.opener.HTMLArea.I18N.dialogs; // load the HTMLArea plugin and lang file
+ __dlg_translate(i18n);
+ __dlg_init();
+ document.getElementById("f_rows").focus();
+};
+
+function onOK() {
+ var required = {
+ "f_rows": "You must enter a number of rows",
+ "f_cols": "You must enter a number of columns"
+ };
+ for (var i in required) {
+ var el = document.getElementById(i);
+ if (!el.value) {
+ alert(required[i]);
+ el.focus();
+ return false;
+ }
+ }
+ var fields = ["f_rows", "f_cols", "f_width", "f_unit", "f_fixed",
+ "f_align", "f_border", "f_spacing", "f_padding"];
+ var param = new Object();
+ for (var i in fields) {
+ var id = fields[i];
+ var el = document.getElementById(id);
+ param[id] = (el.type == "checkbox") ? el.checked : el.value;
+ }
+ __dlg_close(param);
+ return false;
+};
+
+function onCancel() {
+ __dlg_close(null);
+ return false;
+};
+
+</script>
+
+<style type="text/css">
+html, body {
+ background: ButtonFace;
+ color: ButtonText;
+ font: 11px Tahoma,Verdana,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+body { padding: 5px; }
+table {
+ font: 11px Tahoma,Verdana,sans-serif;
+}
+form p {
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+.fl { width: 9em; float: left; padding: 2px 5px; text-align: right; }
+.fr { width: 7em; float: left; padding: 2px 5px; text-align: right; }
+fieldset { padding: 0px 10px 5px 5px; }
+select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
+button { width: 70px; }
+.space { padding: 2px; }
+
+.title { background: #ddf; color: #000; font-weight: bold; font-size: 120%; padding: 3px 10px; margin-bottom: 10px;
+border-bottom: 1px solid black; letter-spacing: 2px;
+}
+form { padding: 0px; margin: 0px; }
+</style>
+
+</head>
+
+<body onload="Init()">
+
+<div class="title">Insert Table</div>
+
+<form action="" method="get">
+<table border="0" style="padding: 0px; margin: 0px">
+ <tbody>
+
+ <tr>
+ <td style="width: 4em; text-align: right">Rows:</td>
+ <td><input type="text" name="rows" id="f_rows" size="5" title="Number of rows" value="2" /></td>
+ <td style="width: 4em; text-align: right">Width:</td>
+ <td><input type="text" name="width" id="f_width" size="5" title="Width of the table" value="100" /></td>
+ <td><select size="1" name="unit" id="f_unit" title="Width unit">
+ <option value="%" selected="1" >Percent</option>
+ <option value="px" >Pixels</option>
+ <option value="em" >Em</option>
+ </select></td>
+ </tr>
+ <tr>
+ <td style="width: 4em; text-align: right">Cols:</td>
+ <td><input type="text" name="cols" id="f_cols" size="5" title="Number of columns" value="4" /></td>
+ <td style="text-align: right"><input type="checkbox" checked="checked" name="fixed" id="f_fixed" /></td>
+ <td colspan="2"><label for="f_fixed"
+ >Fixed width columns</label></td>
+ </tr>
+ </tbody>
+</table>
+
+<p />
+
+<fieldset style="float: left; margin-left: 5px;">
+<legend>Layout</legend>
+
+<div class="space"></div>
+
+<div class="fl">Alignment:</div>
+<select size="1" name="align" id="f_align"
+ title="Positioning of this table">
+ <option value="" selected="1" >Not set</option>
+ <option value="left" >Left</option>
+ <option value="right" >Right</option>
+ <option value="texttop" >Texttop</option>
+ <option value="absmiddle" >Absmiddle</option>
+ <option value="baseline" >Baseline</option>
+ <option value="absbottom" >Absbottom</option>
+ <option value="bottom" >Bottom</option>
+ <option value="middle" >Middle</option>
+ <option value="top" >Top</option>
+</select>
+
+<p />
+
+<div class="fl">Border thickness:</div>
+<input type="text" name="border" id="f_border" size="5" value="1"
+title="Leave empty for no border" />
+<!--
+<p />
+
+<div class="fl">Collapse borders:</div>
+<input type="checkbox" name="collapse" id="f_collapse" />
+-->
+<div class="space"></div>
+
+</fieldset>
+
+<fieldset style="float:right; margin-right: 5px;">
+<legend>Spacing</legend>
+
+<div class="space"></div>
+
+<div class="fr">Cell spacing:</div>
+<input type="text" name="spacing" id="f_spacing" size="5" value="1"
+title="Space between adjacent cells" />
+
+<p />
+
+<div class="fr">Cell padding:</div>
+<input type="text" name="padding" id="f_padding" size="5" value="1"
+title="Space between content and border in cell" />
+
+<div class="space"></div>
+
+</fieldset>
+
+<div style="margin-top: 85px; border-top: 1px solid #999; padding: 2px; text-align: right;">
+<button type="button" name="ok" onclick="return onOK();">OK</button>
+<button type="button" name="cancel" onclick="return onCancel();">Cancel</button>
+</div>
+
+</form>
+
+</body>
+</html>
Modified: plog/trunk/js/htmlarea/popups/link.html
===================================================================
--- plog/trunk/js/htmlarea/popups/link.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/link.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,144 +1,155 @@
-<html>
-
-<head>
- <title>Insert/Modify Link</title>
- <script type="text/javascript" src="popup.js"></script>
- <script type="text/javascript">
- window.resizeTo(400, 200);
-
-I18N = window.opener.HTMLArea.I18N.dialogs;
-
-function i18n(str) {
- //return (I18N[str] || str);
- //OSCAR: this doesn't work
- return(I18N != null ? I18N[str] : str);
-};
-
-function onTargetChanged() {
- var f = document.getElementById("f_other_target");
- if (this.value == "_other") {
- f.style.visibility = "visible";
- f.select();
- f.focus();
- } else f.style.visibility = "hidden";
-};
-
-function Init() {
- __dlg_translate(I18N);
- __dlg_init();
- var param = window.dialogArguments;
- var target_select = document.getElementById("f_target");
- if (param) {
- document.getElementById("f_href").value = param["f_href"];
- document.getElementById("f_title").value = param["f_title"];
- comboSelectValue(target_select, param["f_target"]);
- if (target_select.value != param.f_target) {
- var opt = document.createElement("option");
- opt.value = param.f_target;
- opt.innerHTML = opt.value;
- target_select.appendChild(opt);
- opt.selected = true;
- }
- }
- var opt = document.createElement("option");
- opt.value = "_other";
- opt.innerHTML = i18n("Other");
- target_select.appendChild(opt);
- target_select.onchange = onTargetChanged;
- document.getElementById("f_href").focus();
- document.getElementById("f_href").select();
-};
-
-function onOK() {
- var required = {
- "f_href": i18n("You must enter the URL where this link points to")
- };
- for (var i in required) {
- var el = document.getElementById(i);
- if (!el.value) {
- alert(required[i]);
- el.focus();
- return false;
- }
- }
- // pass data back to the calling window
- var fields = ["f_href", "f_title", "f_target" ];
- var param = new Object();
- for (var i in fields) {
- var id = fields[i];
- var el = document.getElementById(id);
- param[id] = el.value;
- }
- if (param.f_target == "_other")
- param.f_target = document.getElementById("f_other_target").value;
- __dlg_close(param);
- return false;
-};
-
-function onCancel() {
- __dlg_close(null);
- return false;
-};
-
-</script>
-
-<style type="text/css">
-html, body {
- background: ButtonFace;
- color: ButtonText;
- font: 11px Tahoma,Verdana,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-body { padding: 5px; }
-table {
- font: 11px Tahoma,Verdana,sans-serif;
-}
-select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
-button { width: 70px; }
-table .label { text-align: right; width: 8em; }
-
-.title { background: #ddf; color: #000; font-weight: bold; font-size: 120%; padding: 3px 10px; margin-bottom: 10px;
-border-bottom: 1px solid black; letter-spacing: 2px;
-}
-
-#buttons {
- margin-top: 1em; border-top: 1px solid #999;
- padding: 2px; text-align: right;
-}
-</style>
-
-</head>
-
-<body onload="Init()">
-<div class="title">Insert/Modify Link</div>
-
-<table border="0" style="width: 100%;">
- <tr>
- <td class="label">URL:</td>
- <td><input type="text" id="f_href" style="width: 100%" /></td>
- </tr>
- <tr>
- <td class="label">Title (tooltip):</td>
- <td><input type="text" id="f_title" style="width: 100%" /></td>
- </tr>
- <tr>
- <td class="label">Target:</td>
- <td><select id="f_target">
- <option value="">None (use implicit)</option>
- <option value="_blank">New window (_blank)</option>
- <option value="_self">Same frame (_self)</option>
- <option value="_top">Top frame (_top)</option>
- </select>
- <input type="text" name="f_other_target" id="f_other_target" size="10" style="visibility: hidden" />
- </td>
- </tr>
-</table>
-
-<div id="buttons">
- <button type="button" name="ok" onclick="return onOK();">OK</button>
- <button type="button" name="cancel" onclick="return onCancel();">Cancel</button>
-</div>
-
-</body>
-</html>
+<html>
+
+<head>
+ <title>Insert/Modify Link</title>
+ <script type="text/javascript" src="popup.js"></script>
+ <script type="text/javascript">
+ window.resizeTo(400, 200);
+
+I18N = window.opener.HTMLArea.I18N.dialogs;
+
+function i18n(str) {
+ return (I18N[str] || str);
+};
+
+function onTargetChanged() {
+ var f = document.getElementById("f_other_target");
+ if (this.value == "_other") {
+ f.style.visibility = "visible";
+ f.select();
+ f.focus();
+ } else f.style.visibility = "hidden";
+};
+
+function Init() {
+ __dlg_translate(I18N);
+ __dlg_init();
+ var param = window.dialogArguments;
+ var target_select = document.getElementById("f_target");
+ var use_target = true;
+ if (param) {
+ if ( typeof param["f_usetarget"] != "undefined" ) {
+ use_target = param["f_usetarget"];
+ }
+ if ( typeof param["f_href"] != "undefined" ) {
+ document.getElementById("f_href").value = param["f_href"];
+ document.getElementById("f_title").value = param["f_title"];
+ comboSelectValue(target_select, param["f_target"]);
+ if (target_select.value != param.f_target) {
+ var opt = document.createElement("option");
+ opt.value = param.f_target;
+ opt.innerHTML = opt.value;
+ target_select.appendChild(opt);
+ opt.selected = true;
+ }
+ }
+ }
+ if (! use_target) {
+ document.getElementById("f_target_label").style.visibility = "hidden";
+ document.getElementById("f_target").style.visibility = "hidden";
+ document.getElementById("f_target_other").style.visibility = "hidden";
+ }
+ var opt = document.createElement("option");
+ opt.value = "_other";
+ opt.innerHTML = i18n("Other");
+ target_select.appendChild(opt);
+ target_select.onchange = onTargetChanged;
+ document.getElementById("f_href").focus();
+ document.getElementById("f_href").select();
+};
+
+function onOK() {
+ var required = {
+ // f_href shouldn't be required or otherwise removing the link by entering an empty
+ // url isn't possible anymore.
+ // "f_href": i18n("You must enter the URL where this link points to")
+ };
+ for (var i in required) {
+ var el = document.getElementById(i);
+ if (!el.value) {
+ alert(required[i]);
+ el.focus();
+ return false;
+ }
+ }
+ // pass data back to the calling window
+ var fields = ["f_href", "f_title", "f_target" ];
+ var param = new Object();
+ for (var i in fields) {
+ var id = fields[i];
+ var el = document.getElementById(id);
+ param[id] = el.value;
+ }
+ if (param.f_target == "_other")
+ param.f_target = document.getElementById("f_other_target").value;
+ __dlg_close(param);
+ return false;
+};
+
+function onCancel() {
+ __dlg_close(null);
+ return false;
+};
+
+</script>
+
+<style type="text/css">
+html, body {
+ background: ButtonFace;
+ color: ButtonText;
+ font: 11px Tahoma,Verdana,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+body { padding: 5px; }
+table {
+ font: 11px Tahoma,Verdana,sans-serif;
+}
+select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
+button { width: 70px; }
+table .label { text-align: right; width: 8em; }
+
+.title { background: #ddf; color: #000; font-weight: bold; font-size: 120%; padding: 3px 10px; margin-bottom: 10px;
+border-bottom: 1px solid black; letter-spacing: 2px;
+}
+
+#buttons {
+ margin-top: 1em; border-top: 1px solid #999;
+ padding: 2px; text-align: right;
+}
+</style>
+
+</head>
+
+<body onload="Init()">
+<div class="title">Insert/Modify Link</div>
+<form>
+<table border="0" style="width: 100%;">
+ <tr>
+ <td class="label">URL:</td>
+ <td><input type="text" id="f_href" style="width: 100%" /></td>
+ </tr>
+ <tr>
+ <td class="label">Title (tooltip):</td>
+ <td><input type="text" id="f_title" style="width: 100%" /></td>
+ </tr>
+ <tr>
+ <td class="label"><span id="f_target_label">Target:</span></td>
+ <td><select id="f_target">
+ <option value="">None (use implicit)</option>
+ <option value="_blank">New window (_blank)</option>
+ <option value="_self">Same frame (_self)</option>
+ <option value="_top">Top frame (_top)</option>
+ </select>
+ <input type="text" name="f_other_target" id="f_other_target" size="10" style="visibility: hidden" />
+ </td>
+ </tr>
+</table>
+
+<div id="buttons">
+ <button type="submit" name="ok" onclick="return onOK();">OK</button>
+ <button type="button" name="cancel" onclick="return onCancel();">Cancel</button>
+</div>
+</form>
+</body>
+</html>
Modified: plog/trunk/js/htmlarea/popups/old-fullscreen.html
===================================================================
--- plog/trunk/js/htmlarea/popups/old-fullscreen.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/old-fullscreen.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,131 +1,131 @@
-<html>
-<head><title>Fullscreen Editor</title>
-<style type="text/css"> body { margin: 0px; border: 0px; background-color: buttonface; } </style>
-
-<script>
-
-// 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
-if (window.dialogArguments) { opener = window.dialogArguments; }
-
-var _editor_url = "../";
-document.write('<scr'+'ipt src="' +_editor_url+ 'editor.js" language="Javascript1.2"></scr'+'ipt>');
-
-var parent_objname = location.search.substring(1,location.search.length); // parent editor objname
-var parent_config = opener.document.all[parent_objname].config;
-
-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() {
- if (event.keyCode == 27) {
- update_parent();
- window.close();
- return;
- }
-}
-
-/* ---------------------------------------------------------------------- *\
- Function : cloneObject
- 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
- var editor = document.all['_editor_editor'];
-
- newWidth = document.body.offsetWidth;
- newHeight = document.body.offsetHeight - editor.offsetTop;
-
- if (newWidth < 0) { newWidth = 0; }
- if (newHeight < 0) { newHeight = 0; }
-
- editor.style.width = newWidth;
- editor.style.height = newHeight;
-}
-
-/* ---------------------------------------------------------------------- *\
- Function : init
- Description : run this code on page load
-\* ---------------------------------------------------------------------- */
-
-function init() {
- // change maximize button to minimize button
- 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/";
-
- // generate editor and resize it
- editor_generate('editor', config);
- resize_editor();
-
- // switch mode if needed
- if (parent_config.mode == 'textedit') { editor_setmode(objname, 'textedit'); }
-
- // set child window contents
- var parentHTML = opener.editor_getHTML(parent_objname);
- editor_setHTML(objname, parentHTML);
-
- // continuously update parent editor window
- window.setInterval(update_parent, 333);
-
- // setup event handlers
- document.body.onkeypress = _CloseOnEsc;
- window.onresize = resize_editor;
-}
-
-/* ---------------------------------------------------------------------- *\
- Function : update_parent
- Description : update parent window editor field with contents from child window
-\* ---------------------------------------------------------------------- */
-
-function update_parent() {
- var childHTML = editor_getHTML(objname);
- opener.editor_setHTML(parent_objname, childHTML);
-}
-
-
-</script>
-</head>
-<body scroll="no" onload="init()" onunload="update_parent()">
-
-<div style="margin: 0 0 0 0; border-width: 1; border-style: solid; border-color: threedshadow threedhighlight threedhighlight threedshadow; "></div>
-
-<textarea name="editor" style="width:100%; height:300px"></textarea><br>
-
+<html>
+<head><title>Fullscreen Editor</title>
+<style type="text/css"> body { margin: 0px; border: 0px; background-color: buttonface; } </style>
+
+<script>
+
+// 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
+if (window.dialogArguments) { opener = window.dialogArguments; }
+
+var _editor_url = "../";
+document.write('<scr'+'ipt src="' +_editor_url+ 'editor.js" language="Javascript1.2"></scr'+'ipt>');
+
+var parent_objname = location.search.substring(1,location.search.length); // parent editor objname
+var parent_config = opener.document.all[parent_objname].config;
+
+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() {
+ if (event.keyCode == 27) {
+ update_parent();
+ window.close();
+ return;
+ }
+}
+
+/* ---------------------------------------------------------------------- *\
+ Function : cloneObject
+ 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
+ var editor = document.all['_editor_editor'];
+
+ newWidth = document.body.offsetWidth;
+ newHeight = document.body.offsetHeight - editor.offsetTop;
+
+ if (newWidth < 0) { newWidth = 0; }
+ if (newHeight < 0) { newHeight = 0; }
+
+ editor.style.width = newWidth;
+ editor.style.height = newHeight;
+}
+
+/* ---------------------------------------------------------------------- *\
+ Function : init
+ Description : run this code on page load
+\* ---------------------------------------------------------------------- */
+
+function init() {
+ // change maximize button to minimize button
+ 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/";
+
+ // generate editor and resize it
+ editor_generate('editor', config);
+ resize_editor();
+
+ // switch mode if needed
+ if (parent_config.mode == 'textedit') { editor_setmode(objname, 'textedit'); }
+
+ // set child window contents
+ var parentHTML = opener.editor_getHTML(parent_objname);
+ editor_setHTML(objname, parentHTML);
+
+ // continuously update parent editor window
+ window.setInterval(update_parent, 333);
+
+ // setup event handlers
+ document.body.onkeypress = _CloseOnEsc;
+ window.onresize = resize_editor;
+}
+
+/* ---------------------------------------------------------------------- *\
+ Function : update_parent
+ Description : update parent window editor field with contents from child window
+\* ---------------------------------------------------------------------- */
+
+function update_parent() {
+ var childHTML = editor_getHTML(objname);
+ opener.editor_setHTML(parent_objname, childHTML);
+}
+
+
+</script>
+</head>
+<body scroll="no" onload="init()" onunload="update_parent()">
+
+<div style="margin: 0 0 0 0; border-width: 1; border-style: solid; border-color: threedshadow threedhighlight threedhighlight threedshadow; "></div>
+
+<textarea name="editor" style="width:100%; height:300px"></textarea><br>
+
</body></html>
\ No newline at end of file
Modified: plog/trunk/js/htmlarea/popups/old_insert_image.html
===================================================================
--- plog/trunk/js/htmlarea/popups/old_insert_image.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/old_insert_image.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,206 +1,206 @@
-<!-- based on insimage.dlg -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD W3 HTML 3.2//EN">
-<HTML id=dlgImage STYLE="width: 432px; height: 194px; ">
-<HEAD>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<meta http-equiv="MSThemeCompatible" content="Yes">
-<TITLE>Insert Image</TITLE>
-<style>
- html, body, button, div, input, select, fieldset { font-family: MS Shell Dlg; font-size: 8pt; position: absolute; };
-</style>
-<SCRIPT defer>
-
-function _CloseOnEsc() {
- if (event.keyCode == 27) { window.close(); return; }
-}
-
-function _getTextRange(elm) {
- var r = elm.parentTextEdit.createTextRange();
- r.moveToElementText(elm);
- return r;
-}
-
-window.onerror = HandleError
-
-function HandleError(message, url, line) {
- var str = "An error has occurred in this dialog." + "\n\n"
- + "Error: " + line + "\n" + message;
- alert(str);
- window.close();
- return true;
-}
-
-function Init() {
- var elmSelectedImage;
- var htmlSelectionControl = "Control";
- var globalDoc = window.dialogArguments;
- var grngMaster = globalDoc.selection.createRange();
-
- // event handlers
- document.body.onkeypress = _CloseOnEsc;
- btnOK.onclick = new Function("btnOKClick()");
-
- txtFileName.fImageLoaded = false;
- txtFileName.intImageWidth = 0;
- txtFileName.intImageHeight = 0;
-
- if (globalDoc.selection.type == htmlSelectionControl) {
- if (grngMaster.length == 1) {
- elmSelectedImage = grngMaster.item(0);
- if (elmSelectedImage.tagName == "IMG") {
- txtFileName.fImageLoaded = true;
- if (elmSelectedImage.src) {
- txtFileName.value = elmSelectedImage.src.replace(/^[^*]*(\*\*\*)/, "$1"); // fix placeholder src values that editor converted to abs paths
- txtFileName.intImageHeight = elmSelectedImage.height;
- txtFileName.intImageWidth = elmSelectedImage.width;
- txtVertical.value = elmSelectedImage.vspace;
- txtHorizontal.value = elmSelectedImage.hspace;
- txtBorder.value = elmSelectedImage.border;
- txtAltText.value = elmSelectedImage.alt;
- selAlignment.value = elmSelectedImage.align;
- }
- }
- }
- }
- txtFileName.value = txtFileName.value || "http://";
- txtFileName.focus();
-}
-
-function _isValidNumber(txtBox) {
- var val = parseInt(txtBox);
- if (isNaN(val) || val < 0 || val > 999) { return false; }
- return true;
-}
-
-function btnOKClick() {
- var elmImage;
- var intAlignment;
- var htmlSelectionControl = "Control";
- var globalDoc = window.dialogArguments;
- var grngMaster = globalDoc.selection.createRange();
-
- // error checking
-
- if (!txtFileName.value || txtFileName.value == "http://") {
- alert("Image URL must be specified.");
- txtFileName.focus();
- return;
- }
- if (txtHorizontal.value && !_isValidNumber(txtHorizontal.value)) {
- alert("Horizontal spacing must be a number between 0 and 999.");
- txtHorizontal.focus();
- return;
- }
- if (txtBorder.value && !_isValidNumber(txtBorder.value)) {
- alert("Border thickness must be a number between 0 and 999.");
- txtBorder.focus();
- return;
- }
- if (txtVertical.value && !_isValidNumber(txtVertical.value)) {
- alert("Vertical spacing must be a number between 0 and 999.");
- txtVertical.focus();
- return;
- }
-
- // delete selected content and replace with image
- if (globalDoc.selection.type == htmlSelectionControl && !txtFileName.fImageLoaded) {
- grngMaster.execCommand('Delete');
- grngMaster = globalDoc.selection.createRange();
- }
-
- idstr = "\" id=\"556e697175657e537472696e67"; // new image creation ID
- if (!txtFileName.fImageLoaded) {
- grngMaster.execCommand("InsertImage", false, idstr);
- elmImage = globalDoc.all['556e697175657e537472696e67'];
- elmImage.removeAttribute("id");
- elmImage.removeAttribute("src");
- grngMaster.moveStart("character", -1);
- } else {
- elmImage = grngMaster.item(0);
- if (elmImage.src != txtFileName.value) {
- grngMaster.execCommand('Delete');
- grngMaster = globalDoc.selection.createRange();
- grngMaster.execCommand("InsertImage", false, idstr);
- elmImage = globalDoc.all['556e697175657e537472696e67'];
- elmImage.removeAttribute("id");
- elmImage.removeAttribute("src");
- grngMaster.moveStart("character", -1);
- txtFileName.fImageLoaded = false;
- }
- grngMaster = _getTextRange(elmImage);
- }
-
- if (txtFileName.fImageLoaded) {
- elmImage.style.width = txtFileName.intImageWidth;
- elmImage.style.height = txtFileName.intImageHeight;
- }
-
- if (txtFileName.value.length > 2040) {
- txtFileName.value = txtFileName.value.substring(0,2040);
- }
-
- elmImage.src = txtFileName.value;
-
- if (txtHorizontal.value != "") { elmImage.hspace = parseInt(txtHorizontal.value); }
- else { elmImage.hspace = 0; }
-
- if (txtVertical.value != "") { elmImage.vspace = parseInt(txtVertical.value); }
- else { elmImage.vspace = 0; }
-
- elmImage.alt = txtAltText.value;
-
- if (txtBorder.value != "") { elmImage.border = parseInt(txtBorder.value); }
- else { elmImage.border = 0; }
-
- elmImage.align = selAlignment.value;
- grngMaster.collapse(false);
- grngMaster.select();
- window.close();
-}
-</SCRIPT>
-</HEAD>
-<BODY id=bdy onload="Init()" style="background: threedface; color: windowtext;" scroll=no>
-
-<DIV id=divFileName style="left: 0.98em; top: 1.2168em; width: 7em; height: 1.2168em; ">Image URL:</DIV>
-<INPUT ID=txtFileName type=text style="left: 8.54em; top: 1.0647em; width: 21.5em;height: 2.1294em; " tabIndex=10 onfocus="select()">
-
-<DIV id=divAltText style="left: 0.98em; top: 4.1067em; width: 6.58em; height: 1.2168em; ">Alternate Text:</DIV>
-<INPUT type=text ID=txtAltText tabIndex=15 style="left: 8.54em; top: 3.8025em; width: 21.5em; height: 2.1294em; " onfocus="select()">
-
-<FIELDSET id=fldLayout style="left: .9em; top: 7.1em; width: 17.08em; height: 7.6em;">
-<LEGEND id=lgdLayout>Layout</LEGEND>
-</FIELDSET>
-
-<FIELDSET id=fldSpacing style="left: 18.9em; top: 7.1em; width: 11em; height: 7.6em;">
-<LEGEND id=lgdSpacing>Spacing</LEGEND>
-</FIELDSET>
-
-<DIV id=divAlign style="left: 1.82em; top: 9.126em; width: 4.76em; height: 1.2168em; ">Alignment:</DIV>
-<SELECT size=1 ID=selAlignment tabIndex=20 style="left: 10.36em; top: 8.8218em; width: 6.72em; height: 1.2168em; ">
-<OPTION id=optNotSet value=""> Not set </OPTION>
-<OPTION id=optLeft value=left> Left </OPTION>
-<OPTION id=optRight value=right> Right </OPTION>
-<OPTION id=optTexttop value=textTop> Texttop </OPTION>
-<OPTION id=optAbsMiddle value=absMiddle> Absmiddle </OPTION>
-<OPTION id=optBaseline value=baseline SELECTED> Baseline </OPTION>
-<OPTION id=optAbsBottom value=absBottom> Absbottom </OPTION>
-<OPTION id=optBottom value=bottom> Bottom </OPTION>
-<OPTION id=optMiddle value=middle> Middle </OPTION>
-<OPTION id=optTop value=top> Top </OPTION>
-</SELECT>
-
-<DIV id=divHoriz style="left: 19.88em; top: 9.126em; width: 4.76em; height: 1.2168em; ">Horizontal:</DIV>
-<INPUT ID=txtHorizontal style="left: 24.92em; top: 8.8218em; width: 4.2em; height: 2.1294em; ime-mode: disabled;" type=text size=3 maxlength=3 value="" tabIndex=25 onfocus="select()">
-
-<DIV id=divBorder style="left: 1.82em; top: 12.0159em; width: 8.12em; height: 1.2168em; ">Border Thickness:</DIV>
-<INPUT ID=txtBorder style="left: 10.36em; top: 11.5596em; width: 6.72em; height: 2.1294em; ime-mode: disabled;" type=text size=3 maxlength=3 value="" tabIndex=21 onfocus="select()">
-
-<DIV id=divVert style="left: 19.88em; top: 12.0159em; width: 3.64em; height: 1.2168em; ">Vertical:</DIV>
-<INPUT ID=txtVertical style="left: 24.92em; top: 11.5596em; width: 4.2em; height: 2.1294em; ime-mode: disabled;" type=text size=3 maxlength=3 value="" tabIndex=30 onfocus="select()">
-
-<BUTTON ID=btnOK style="left: 31.36em; top: 1.0647em; width: 7em; height: 2.2em; " type=submit tabIndex=40>OK</BUTTON>
-<BUTTON ID=btnCancel style="left: 31.36em; top: 3.6504em; width: 7em; height: 2.2em; " type=reset tabIndex=45 onClick="window.close();">Cancel</BUTTON>
-
-</BODY>
+<!-- based on insimage.dlg -->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD W3 HTML 3.2//EN">
+<HTML id=dlgImage STYLE="width: 432px; height: 194px; ">
+<HEAD>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="MSThemeCompatible" content="Yes">
+<TITLE>Insert Image</TITLE>
+<style>
+ html, body, button, div, input, select, fieldset { font-family: MS Shell Dlg; font-size: 8pt; position: absolute; };
+</style>
+<SCRIPT defer>
+
+function _CloseOnEsc() {
+ if (event.keyCode == 27) { window.close(); return; }
+}
+
+function _getTextRange(elm) {
+ var r = elm.parentTextEdit.createTextRange();
+ r.moveToElementText(elm);
+ return r;
+}
+
+window.onerror = HandleError
+
+function HandleError(message, url, line) {
+ var str = "An error has occurred in this dialog." + "\n\n"
+ + "Error: " + line + "\n" + message;
+ alert(str);
+ window.close();
+ return true;
+}
+
+function Init() {
+ var elmSelectedImage;
+ var htmlSelectionControl = "Control";
+ var globalDoc = window.dialogArguments;
+ var grngMaster = globalDoc.selection.createRange();
+
+ // event handlers
+ document.body.onkeypress = _CloseOnEsc;
+ btnOK.onclick = new Function("btnOKClick()");
+
+ txtFileName.fImageLoaded = false;
+ txtFileName.intImageWidth = 0;
+ txtFileName.intImageHeight = 0;
+
+ if (globalDoc.selection.type == htmlSelectionControl) {
+ if (grngMaster.length == 1) {
+ elmSelectedImage = grngMaster.item(0);
+ if (elmSelectedImage.tagName == "IMG") {
+ txtFileName.fImageLoaded = true;
+ if (elmSelectedImage.src) {
+ txtFileName.value = elmSelectedImage.src.replace(/^[^*]*(\*\*\*)/, "$1"); // fix placeholder src values that editor converted to abs paths
+ txtFileName.intImageHeight = elmSelectedImage.height;
+ txtFileName.intImageWidth = elmSelectedImage.width;
+ txtVertical.value = elmSelectedImage.vspace;
+ txtHorizontal.value = elmSelectedImage.hspace;
+ txtBorder.value = elmSelectedImage.border;
+ txtAltText.value = elmSelectedImage.alt;
+ selAlignment.value = elmSelectedImage.align;
+ }
+ }
+ }
+ }
+ txtFileName.value = txtFileName.value || "http://";
+ txtFileName.focus();
+}
+
+function _isValidNumber(txtBox) {
+ var val = parseInt(txtBox);
+ if (isNaN(val) || val < 0 || val > 999) { return false; }
+ return true;
+}
+
+function btnOKClick() {
+ var elmImage;
+ var intAlignment;
+ var htmlSelectionControl = "Control";
+ var globalDoc = window.dialogArguments;
+ var grngMaster = globalDoc.selection.createRange();
+
+ // error checking
+
+ if (!txtFileName.value || txtFileName.value == "http://") {
+ alert("Image URL must be specified.");
+ txtFileName.focus();
+ return;
+ }
+ if (txtHorizontal.value && !_isValidNumber(txtHorizontal.value)) {
+ alert("Horizontal spacing must be a number between 0 and 999.");
+ txtHorizontal.focus();
+ return;
+ }
+ if (txtBorder.value && !_isValidNumber(txtBorder.value)) {
+ alert("Border thickness must be a number between 0 and 999.");
+ txtBorder.focus();
+ return;
+ }
+ if (txtVertical.value && !_isValidNumber(txtVertical.value)) {
+ alert("Vertical spacing must be a number between 0 and 999.");
+ txtVertical.focus();
+ return;
+ }
+
+ // delete selected content and replace with image
+ if (globalDoc.selection.type == htmlSelectionControl && !txtFileName.fImageLoaded) {
+ grngMaster.execCommand('Delete');
+ grngMaster = globalDoc.selection.createRange();
+ }
+
+ idstr = "\" id=\"556e697175657e537472696e67"; // new image creation ID
+ if (!txtFileName.fImageLoaded) {
+ grngMaster.execCommand("InsertImage", false, idstr);
+ elmImage = globalDoc.all['556e697175657e537472696e67'];
+ elmImage.removeAttribute("id");
+ elmImage.removeAttribute("src");
+ grngMaster.moveStart("character", -1);
+ } else {
+ elmImage = grngMaster.item(0);
+ if (elmImage.src != txtFileName.value) {
+ grngMaster.execCommand('Delete');
+ grngMaster = globalDoc.selection.createRange();
+ grngMaster.execCommand("InsertImage", false, idstr);
+ elmImage = globalDoc.all['556e697175657e537472696e67'];
+ elmImage.removeAttribute("id");
+ elmImage.removeAttribute("src");
+ grngMaster.moveStart("character", -1);
+ txtFileName.fImageLoaded = false;
+ }
+ grngMaster = _getTextRange(elmImage);
+ }
+
+ if (txtFileName.fImageLoaded) {
+ elmImage.style.width = txtFileName.intImageWidth;
+ elmImage.style.height = txtFileName.intImageHeight;
+ }
+
+ if (txtFileName.value.length > 2040) {
+ txtFileName.value = txtFileName.value.substring(0,2040);
+ }
+
+ elmImage.src = txtFileName.value;
+
+ if (txtHorizontal.value != "") { elmImage.hspace = parseInt(txtHorizontal.value); }
+ else { elmImage.hspace = 0; }
+
+ if (txtVertical.value != "") { elmImage.vspace = parseInt(txtVertical.value); }
+ else { elmImage.vspace = 0; }
+
+ elmImage.alt = txtAltText.value;
+
+ if (txtBorder.value != "") { elmImage.border = parseInt(txtBorder.value); }
+ else { elmImage.border = 0; }
+
+ elmImage.align = selAlignment.value;
+ grngMaster.collapse(false);
+ grngMaster.select();
+ window.close();
+}
+</SCRIPT>
+</HEAD>
+<BODY id=bdy onload="Init()" style="background: threedface; color: windowtext;" scroll=no>
+
+<DIV id=divFileName style="left: 0.98em; top: 1.2168em; width: 7em; height: 1.2168em; ">Image URL:</DIV>
+<INPUT ID=txtFileName type=text style="left: 8.54em; top: 1.0647em; width: 21.5em;height: 2.1294em; " tabIndex=10 onfocus="select()">
+
+<DIV id=divAltText style="left: 0.98em; top: 4.1067em; width: 6.58em; height: 1.2168em; ">Alternate Text:</DIV>
+<INPUT type=text ID=txtAltText tabIndex=15 style="left: 8.54em; top: 3.8025em; width: 21.5em; height: 2.1294em; " onfocus="select()">
+
+<FIELDSET id=fldLayout style="left: .9em; top: 7.1em; width: 17.08em; height: 7.6em;">
+<LEGEND id=lgdLayout>Layout</LEGEND>
+</FIELDSET>
+
+<FIELDSET id=fldSpacing style="left: 18.9em; top: 7.1em; width: 11em; height: 7.6em;">
+<LEGEND id=lgdSpacing>Spacing</LEGEND>
+</FIELDSET>
+
+<DIV id=divAlign style="left: 1.82em; top: 9.126em; width: 4.76em; height: 1.2168em; ">Alignment:</DIV>
+<SELECT size=1 ID=selAlignment tabIndex=20 style="left: 10.36em; top: 8.8218em; width: 6.72em; height: 1.2168em; ">
+<OPTION id=optNotSet value=""> Not set </OPTION>
+<OPTION id=optLeft value=left> Left </OPTION>
+<OPTION id=optRight value=right> Right </OPTION>
+<OPTION id=optTexttop value=textTop> Texttop </OPTION>
+<OPTION id=optAbsMiddle value=absMiddle> Absmiddle </OPTION>
+<OPTION id=optBaseline value=baseline SELECTED> Baseline </OPTION>
+<OPTION id=optAbsBottom value=absBottom> Absbottom </OPTION>
+<OPTION id=optBottom value=bottom> Bottom </OPTION>
+<OPTION id=optMiddle value=middle> Middle </OPTION>
+<OPTION id=optTop value=top> Top </OPTION>
+</SELECT>
+
+<DIV id=divHoriz style="left: 19.88em; top: 9.126em; width: 4.76em; height: 1.2168em; ">Horizontal:</DIV>
+<INPUT ID=txtHorizontal style="left: 24.92em; top: 8.8218em; width: 4.2em; height: 2.1294em; ime-mode: disabled;" type=text size=3 maxlength=3 value="" tabIndex=25 onfocus="select()">
+
+<DIV id=divBorder style="left: 1.82em; top: 12.0159em; width: 8.12em; height: 1.2168em; ">Border Thickness:</DIV>
+<INPUT ID=txtBorder style="left: 10.36em; top: 11.5596em; width: 6.72em; height: 2.1294em; ime-mode: disabled;" type=text size=3 maxlength=3 value="" tabIndex=21 onfocus="select()">
+
+<DIV id=divVert style="left: 19.88em; top: 12.0159em; width: 3.64em; height: 1.2168em; ">Vertical:</DIV>
+<INPUT ID=txtVertical style="left: 24.92em; top: 11.5596em; width: 4.2em; height: 2.1294em; ime-mode: disabled;" type=text size=3 maxlength=3 value="" tabIndex=30 onfocus="select()">
+
+<BUTTON ID=btnOK style="left: 31.36em; top: 1.0647em; width: 7em; height: 2.2em; " type=submit tabIndex=40>OK</BUTTON>
+<BUTTON ID=btnCancel style="left: 31.36em; top: 3.6504em; width: 7em; height: 2.2em; " type=reset tabIndex=45 onClick="window.close();">Cancel</BUTTON>
+
+</BODY>
</HTML>
\ No newline at end of file
Modified: plog/trunk/js/htmlarea/popups/popup.js
===================================================================
--- plog/trunk/js/htmlarea/popups/popup.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/popup.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,113 +1,114 @@
-// htmlArea v3.0 - Copyright (c) 2002, 2003 interactivetools.com, inc.
-// This copyright notice MUST stay intact for use (see license.txt).
-//
-// Portions (c) dynarch.com, 2003
-//
-// A free WYSIWYG editor replacement for <textarea> fields.
-// For full source code and docs, visit http://www.interactivetools.com/
-//
-// Version 3.0 developed by Mihai Bazon.
-// http://dynarch.com/mishoo
-//
-// $Id: popup.js,v 1.8 2003/12/05 09:19:01 mishoo Exp $
-
-function getAbsolutePos(el) {
- var r = { x: el.offsetLeft, y: el.offsetTop };
- if (el.offsetParent) {
- var tmp = getAbsolutePos(el.offsetParent);
- r.x += tmp.x;
- r.y += tmp.y;
- }
- return r;
-};
-
-function comboSelectValue(c, val) {
- var ops = c.getElementsByTagName("option");
- for (var i = ops.length; --i >= 0;) {
- var op = ops[i];
- op.selected = (op.value == val);
- }
- c.value = val;
-};
-
-function __dlg_onclose() {
- opener.Dialog._return(null);
-};
-
-function __dlg_init(bottom) {
- var body = document.body;
- var body_height = 0;
- if (typeof bottom == "undefined") {
- var div = document.createElement("div");
- body.appendChild(div);
- var pos = getAbsolutePos(div);
- body_height = pos.y;
- } else {
- var pos = getAbsolutePos(bottom);
- body_height = pos.y + bottom.offsetHeight;
- }
- window.dialogArguments = opener.Dialog._arguments;
- if (!document.all) {
- window.sizeToContent();
- window.sizeToContent(); // for reasons beyond understanding,
- // only if we call it twice we get the
- // correct size.
- window.addEventListener("unload", __dlg_onclose, true);
- // center on parent
- var x = opener.screenX + (opener.outerWidth - window.outerWidth) / 2;
- var y = opener.screenY + (opener.outerHeight - window.outerHeight) / 2;
- window.moveTo(x, y);
- window.innerWidth = body.offsetWidth + 5;
- window.innerHeight = body_height + 2;
- } else {
- // window.dialogHeight = body.offsetHeight + 50 + "px";
- // window.dialogWidth = body.offsetWidth + "px";
- window.resizeTo(body.offsetWidth, body_height);
- var ch = body.clientHeight;
- var cw = body.clientWidth;
- window.resizeBy(body.offsetWidth - cw, body_height - ch);
- var W = body.offsetWidth;
- var H = 2 * body_height - ch;
- var x = (screen.availWidth - W) / 2;
- var y = (screen.availHeight - H) / 2;
- window.moveTo(x, y);
- }
- document.body.onkeypress = __dlg_close_on_esc;
-};
-
-function __dlg_translate(i18n) {
- var types = ["span", "option", "td", "button", "div"];
- for (var type in types) {
- var spans = document.getElementsByTagName(types[type]);
- for (var i = spans.length; --i >= 0;) {
- var span = spans[i];
- if (span.firstChild && span.firstChild.data) {
- //var txt = i18n[span.firstChild.data];
- //OSCAR:this doesn't work!!
- var txt = (i18n != null ? i18n[span.firstChild.data] : span.firstChild.data);
- if (txt)
- span.firstChild.data = txt;
- }
- }
- }
- //OSCAR: this doesn't work!
- //var txt = i18n[document.title];
- var txt = (i18n != null ? i18n[document.title] : document.title);
- if (txt)
- document.title = txt;
-};
-
-// closes the dialog and passes the return info upper.
-function __dlg_close(val) {
- opener.Dialog._return(val);
- window.close();
-};
-
-function __dlg_close_on_esc(ev) {
- ev || (ev = window.event);
- if (ev.keyCode == 27) {
- window.close();
- return false;
- }
- return true;
-};
+// htmlArea v3.0 - Copyright (c) 2002, 2003 interactivetools.com, inc.
+// This copyright notice MUST stay intact for use (see license.txt).
+//
+// Portions (c) dynarch.com, 2003
+//
+// A free WYSIWYG editor replacement for <textarea> fields.
+// For full source code and docs, visit http://www.htmlarea.com/
+//
+// Version 3.0 developed by Mihai Bazon.
+// http://dynarch.com/mishoo
+//
+// $Id: popup.js,v 1.12 2005/01/24 18:29:48 itools Exp $
+
+function getAbsolutePos(el) {
+ var r = { x: el.offsetLeft, y: el.offsetTop };
+ if (el.offsetParent) {
+ var tmp = getAbsolutePos(el.offsetParent);
+ r.x += tmp.x;
+ r.y += tmp.y;
+ }
+ return r;
+};
+
+function comboSelectValue(c, val) {
+ var ops = c.getElementsByTagName("option");
+ for (var i = ops.length; --i >= 0;) {
+ var op = ops[i];
+ op.selected = (op.value == val);
+ }
+ c.value = val;
+};
+
+function __dlg_onclose() {
+ opener.Dialog._return(null);
+};
+
+function __dlg_init(bottom) {
+ var body = document.body;
+ var body_height = 0;
+ if (typeof bottom == "undefined") {
+ var div = document.createElement("div");
+ body.appendChild(div);
+ var pos = getAbsolutePos(div);
+ body_height = pos.y;
+ } else {
+ var pos = getAbsolutePos(bottom);
+ body_height = pos.y + bottom.offsetHeight;
+ }
+ window.dialogArguments = opener.Dialog._arguments;
+ if (!document.all) {
+ window.sizeToContent();
+ window.sizeToContent(); // for reasons beyond understanding,
+ // only if we call it twice we get the
+ // correct size.
+ window.addEventListener("unload", __dlg_onclose, true);
+ window.innerWidth = body.offsetWidth + 5;
+ window.innerHeight = body_height + 2;
+ // center on parent
+ var x = opener.screenX + (opener.outerWidth - window.outerWidth) / 2;
+ var y = opener.screenY + (opener.outerHeight - window.outerHeight) / 2;
+ window.moveTo(x, y);
+ } else {
+ // window.dialogHeight = body.offsetHeight + 50 + "px";
+ // window.dialogWidth = body.offsetWidth + "px";
+ window.resizeTo(body.offsetWidth, body_height);
+ var ch = body.clientHeight;
+ var cw = body.clientWidth;
+ window.resizeBy(body.offsetWidth - cw, body_height - ch);
+ var W = body.offsetWidth;
+ var H = 2 * body_height - ch;
+ var x = (screen.availWidth - W) / 2;
+ var y = (screen.availHeight - H) / 2;
+ window.moveTo(x, y);
+ }
+ document.body.onkeypress = __dlg_close_on_esc;
+};
+
+function __dlg_translate(i18n) {
+ var types = ["input", "select", "legend", "span", "option", "td", "button", "div"];
+ for (var type = 0; type < types.length; ++type) {
+ var spans = document.getElementsByTagName(types[type]);
+ for (var i = spans.length; --i >= 0;) {
+ var span = spans[i];
+ if (span.firstChild && span.firstChild.data) {
+ var txt = i18n[span.firstChild.data];
+ if (txt)
+ span.firstChild.data = txt;
+ }
+ if (span.title) {
+ var txt = i18n[span.title];
+ if (txt)
+ span.title = txt;
+ }
+ }
+ }
+ var txt = i18n[document.title];
+ if (txt)
+ document.title = txt;
+};
+
+// closes the dialog and passes the return info upper.
+function __dlg_close(val) {
+ opener.Dialog._return(val);
+ window.close();
+};
+
+function __dlg_close_on_esc(ev) {
+ ev || (ev = window.event);
+ if (ev.keyCode == 27) {
+ window.close();
+ return false;
+ }
+ return true;
+};
Modified: plog/trunk/js/htmlarea/popups/select_color.html
===================================================================
--- plog/trunk/js/htmlarea/popups/select_color.html 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popups/select_color.html 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,347 +1,347 @@
-<!-- note: this version of the color picker is optimized for IE 5.5+ only -->
-
-<html><head><title>Select Color</title>
-
-<script type="text/javascript" src="popup.js"></script>
-
-<script type="text/javascript">
-
-window.resizeTo(240, 182);
-function _CloseOnEsc() {
- if (event.keyCode == 27) { window.close(); return; }
-}
-
-function Init() { // run on page load
- __dlg_init(); // <!-- this can be found in popup.js -->
- document.body.onkeypress = _CloseOnEsc;
-
- var color = window.dialogArguments;
- color = ValidateColor(color) || '000000';
- View(color); // set default color
-}
-
-function View(color) { // preview color
- document.getElementById("ColorPreview").style.backgroundColor = '#' + color;
- document.getElementById("ColorHex").value = '#' + color;
-}
-
-function Set(string) { // select color
- var color = ValidateColor(string);
- if (color == null) { alert("Invalid color code: " + string); } // invalid color
- else { // valid color
- View(color); // show selected color
- __dlg_close(color);
- }
-}
-
-function ValidateColor(string) { // return valid color code
- string = string || '';
- string = string + "";
- string = string.toUpperCase();
- var chars = '0123456789ABCDEF';
- var out = '';
-
- for (var i=0; i<string.length; i++) { // remove invalid color chars
- var schar = string.charAt(i);
- if (chars.indexOf(schar) != -1) { out += schar; }
- }
-
- if (out.length != 6) { return null; } // check length
- return out;
-}
-
-</script>
-</head>
-<body style="background:ButtonFace; margin:0px; padding:0px" onload="Init()">
-
-<form method="get" style="margin:0px; padding:0px" onSubmit="Set(document.getElementById('ColorHex').value); return false;">
-<table border="0px" cellspacing="0px" cellpadding="4" width="100%">
- <tr>
- <td style="background:buttonface" valign=center><div style="background-color: #000000; padding: 1; height: 21px; width: 50px"><div id="ColorPreview" style="height: 100%; width: 100%"></div></div></td>
- <td style="background:buttonface" valign=center><input type="text" name="ColorHex"
- id="ColorHex" value="" size=15 style="font-size: 12px"></td>
- <td style="background:buttonface" width=100%></td>
- </tr>
-</table>
-</form>
-
-<table border="0" cellspacing="1px" cellpadding="0px" width="100%" bgcolor="#000000" style="cursor: hand;">
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#003300 onMouseOver=View('003300') onClick=Set('003300') height="10px" width="10px"></td>
-<td bgcolor=#006600 onMouseOver=View('006600') onClick=Set('006600') height="10px" width="10px"></td>
-<td bgcolor=#009900 onMouseOver=View('009900') onClick=Set('009900') height="10px" width="10px"></td>
-<td bgcolor=#00CC00 onMouseOver=View('00CC00') onClick=Set('00CC00') height="10px" width="10px"></td>
-<td bgcolor=#00FF00 onMouseOver=View('00FF00') onClick=Set('00FF00') height="10px" width="10px"></td>
-<td bgcolor=#330000 onMouseOver=View('330000') onClick=Set('330000') height="10px" width="10px"></td>
-<td bgcolor=#333300 onMouseOver=View('333300') onClick=Set('333300') height="10px" width="10px"></td>
-<td bgcolor=#336600 onMouseOver=View('336600') onClick=Set('336600') height="10px" width="10px"></td>
-<td bgcolor=#339900 onMouseOver=View('339900') onClick=Set('339900') height="10px" width="10px"></td>
-<td bgcolor=#33CC00 onMouseOver=View('33CC00') onClick=Set('33CC00') height="10px" width="10px"></td>
-<td bgcolor=#33FF00 onMouseOver=View('33FF00') onClick=Set('33FF00') height="10px" width="10px"></td>
-<td bgcolor=#660000 onMouseOver=View('660000') onClick=Set('660000') height="10px" width="10px"></td>
-<td bgcolor=#663300 onMouseOver=View('663300') onClick=Set('663300') height="10px" width="10px"></td>
-<td bgcolor=#666600 onMouseOver=View('666600') onClick=Set('666600') height="10px" width="10px"></td>
-<td bgcolor=#669900 onMouseOver=View('669900') onClick=Set('669900') height="10px" width="10px"></td>
-<td bgcolor=#66CC00 onMouseOver=View('66CC00') onClick=Set('66CC00') height="10px" width="10px"></td>
-<td bgcolor=#66FF00 onMouseOver=View('66FF00') onClick=Set('66FF00') height="10px" width="10px"></td>
-</tr>
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#333333 onMouseOver=View('333333') onClick=Set('333333') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#000033 onMouseOver=View('000033') onClick=Set('000033') height="10px" width="10px"></td>
-<td bgcolor=#003333 onMouseOver=View('003333') onClick=Set('003333') height="10px" width="10px"></td>
-<td bgcolor=#006633 onMouseOver=View('006633') onClick=Set('006633') height="10px" width="10px"></td>
-<td bgcolor=#009933 onMouseOver=View('009933') onClick=Set('009933') height="10px" width="10px"></td>
-<td bgcolor=#00CC33 onMouseOver=View('00CC33') onClick=Set('00CC33') height="10px" width="10px"></td>
-<td bgcolor=#00FF33 onMouseOver=View('00FF33') onClick=Set('00FF33') height="10px" width="10px"></td>
-<td bgcolor=#330033 onMouseOver=View('330033') onClick=Set('330033') height="10px" width="10px"></td>
-<td bgcolor=#333333 onMouseOver=View('333333') onClick=Set('333333') height="10px" width="10px"></td>
-<td bgcolor=#336633 onMouseOver=View('336633') onClick=Set('336633') height="10px" width="10px"></td>
-<td bgcolor=#339933 onMouseOver=View('339933') onClick=Set('339933') height="10px" width="10px"></td>
-<td bgcolor=#33CC33 onMouseOver=View('33CC33') onClick=Set('33CC33') height="10px" width="10px"></td>
-<td bgcolor=#33FF33 onMouseOver=View('33FF33') onClick=Set('33FF33') height="10px" width="10px"></td>
-<td bgcolor=#660033 onMouseOver=View('660033') onClick=Set('660033') height="10px" width="10px"></td>
-<td bgcolor=#663333 onMouseOver=View('663333') onClick=Set('663333') height="10px" width="10px"></td>
-<td bgcolor=#666633 onMouseOver=View('666633') onClick=Set('666633') height="10px" width="10px"></td>
-<td bgcolor=#669933 onMouseOver=View('669933') onClick=Set('669933') height="10px" width="10px"></td>
-<td bgcolor=#66CC33 onMouseOver=View('66CC33') onClick=Set('66CC33') height="10px" width="10px"></td>
-<td bgcolor=#66FF33 onMouseOver=View('66FF33') onClick=Set('66FF33') height="10px" width="10px"></td>
-</tr>
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#666666 onMouseOver=View('666666') onClick=Set('666666') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#000066 onMouseOver=View('000066') onClick=Set('000066') height="10px" width="10px"></td>
-<td bgcolor=#003366 onMouseOver=View('003366') onClick=Set('003366') height="10px" width="10px"></td>
-<td bgcolor=#006666 onMouseOver=View('006666') onClick=Set('006666') height="10px" width="10px"></td>
-<td bgcolor=#009966 onMouseOver=View('009966') onClick=Set('009966') height="10px" width="10px"></td>
-<td bgcolor=#00CC66 onMouseOver=View('00CC66') onClick=Set('00CC66') height="10px" width="10px"></td>
-<td bgcolor=#00FF66 onMouseOver=View('00FF66') onClick=Set('00FF66') height="10px" width="10px"></td>
-<td bgcolor=#330066 onMouseOver=View('330066') onClick=Set('330066') height="10px" width="10px"></td>
-<td bgcolor=#333366 onMouseOver=View('333366') onClick=Set('333366') height="10px" width="10px"></td>
-<td bgcolor=#336666 onMouseOver=View('336666') onClick=Set('336666') height="10px" width="10px"></td>
-<td bgcolor=#339966 onMouseOver=View('339966') onClick=Set('339966') height="10px" width="10px"></td>
-<td bgcolor=#33CC66 onMouseOver=View('33CC66') onClick=Set('33CC66') height="10px" width="10px"></td>
-<td bgcolor=#33FF66 onMouseOver=View('33FF66') onClick=Set('33FF66') height="10px" width="10px"></td>
-<td bgcolor=#660066 onMouseOver=View('660066') onClick=Set('660066') height="10px" width="10px"></td>
-<td bgcolor=#663366 onMouseOver=View('663366') onClick=Set('663366') height="10px" width="10px"></td>
-<td bgcolor=#666666 onMouseOver=View('666666') onClick=Set('666666') height="10px" width="10px"></td>
-<td bgcolor=#669966 onMouseOver=View('669966') onClick=Set('669966') height="10px" width="10px"></td>
-<td bgcolor=#66CC66 onMouseOver=View('66CC66') onClick=Set('66CC66') height="10px" width="10px"></td>
-<td bgcolor=#66FF66 onMouseOver=View('66FF66') onClick=Set('66FF66') height="10px" width="10px"></td>
-</tr>
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#999999 onMouseOver=View('999999') onClick=Set('999999') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#000099 onMouseOver=View('000099') onClick=Set('000099') height="10px" width="10px"></td>
-<td bgcolor=#003399 onMouseOver=View('003399') onClick=Set('003399') height="10px" width="10px"></td>
-<td bgcolor=#006699 onMouseOver=View('006699') onClick=Set('006699') height="10px" width="10px"></td>
-<td bgcolor=#009999 onMouseOver=View('009999') onClick=Set('009999') height="10px" width="10px"></td>
-<td bgcolor=#00CC99 onMouseOver=View('00CC99') onClick=Set('00CC99') height="10px" width="10px"></td>
-<td bgcolor=#00FF99 onMouseOver=View('00FF99') onClick=Set('00FF99') height="10px" width="10px"></td>
-<td bgcolor=#330099 onMouseOver=View('330099') onClick=Set('330099') height="10px" width="10px"></td>
-<td bgcolor=#333399 onMouseOver=View('333399') onClick=Set('333399') height="10px" width="10px"></td>
-<td bgcolor=#336699 onMouseOver=View('336699') onClick=Set('336699') height="10px" width="10px"></td>
-<td bgcolor=#339999 onMouseOver=View('339999') onClick=Set('339999') height="10px" width="10px"></td>
-<td bgcolor=#33CC99 onMouseOver=View('33CC99') onClick=Set('33CC99') height="10px" width="10px"></td>
-<td bgcolor=#33FF99 onMouseOver=View('33FF99') onClick=Set('33FF99') height="10px" width="10px"></td>
-<td bgcolor=#660099 onMouseOver=View('660099') onClick=Set('660099') height="10px" width="10px"></td>
-<td bgcolor=#663399 onMouseOver=View('663399') onClick=Set('663399') height="10px" width="10px"></td>
-<td bgcolor=#666699 onMouseOver=View('666699') onClick=Set('666699') height="10px" width="10px"></td>
-<td bgcolor=#669999 onMouseOver=View('669999') onClick=Set('669999') height="10px" width="10px"></td>
-<td bgcolor=#66CC99 onMouseOver=View('66CC99') onClick=Set('66CC99') height="10px" width="10px"></td>
-<td bgcolor=#66FF99 onMouseOver=View('66FF99') onClick=Set('66FF99') height="10px" width="10px"></td>
-</tr>
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#CCCCCC onMouseOver=View('CCCCCC') onClick=Set('CCCCCC') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#0000CC onMouseOver=View('0000CC') onClick=Set('0000CC') height="10px" width="10px"></td>
-<td bgcolor=#0033CC onMouseOver=View('0033CC') onClick=Set('0033CC') height="10px" width="10px"></td>
-<td bgcolor=#0066CC onMouseOver=View('0066CC') onClick=Set('0066CC') height="10px" width="10px"></td>
-<td bgcolor=#0099CC onMouseOver=View('0099CC') onClick=Set('0099CC') height="10px" width="10px"></td>
-<td bgcolor=#00CCCC onMouseOver=View('00CCCC') onClick=Set('00CCCC') height="10px" width="10px"></td>
-<td bgcolor=#00FFCC onMouseOver=View('00FFCC') onClick=Set('00FFCC') height="10px" width="10px"></td>
-<td bgcolor=#3300CC onMouseOver=View('3300CC') onClick=Set('3300CC') height="10px" width="10px"></td>
-<td bgcolor=#3333CC onMouseOver=View('3333CC') onClick=Set('3333CC') height="10px" width="10px"></td>
-<td bgcolor=#3366CC onMouseOver=View('3366CC') onClick=Set('3366CC') height="10px" width="10px"></td>
-<td bgcolor=#3399CC onMouseOver=View('3399CC') onClick=Set('3399CC') height="10px" width="10px"></td>
-<td bgcolor=#33CCCC onMouseOver=View('33CCCC') onClick=Set('33CCCC') height="10px" width="10px"></td>
-<td bgcolor=#33FFCC onMouseOver=View('33FFCC') onClick=Set('33FFCC') height="10px" width="10px"></td>
-<td bgcolor=#6600CC onMouseOver=View('6600CC') onClick=Set('6600CC') height="10px" width="10px"></td>
-<td bgcolor=#6633CC onMouseOver=View('6633CC') onClick=Set('6633CC') height="10px" width="10px"></td>
-<td bgcolor=#6666CC onMouseOver=View('6666CC') onClick=Set('6666CC') height="10px" width="10px"></td>
-<td bgcolor=#6699CC onMouseOver=View('6699CC') onClick=Set('6699CC') height="10px" width="10px"></td>
-<td bgcolor=#66CCCC onMouseOver=View('66CCCC') onClick=Set('66CCCC') height="10px" width="10px"></td>
-<td bgcolor=#66FFCC onMouseOver=View('66FFCC') onClick=Set('66FFCC') height="10px" width="10px"></td>
-</tr>
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#FFFFFF onMouseOver=View('FFFFFF') onClick=Set('FFFFFF') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#0000FF onMouseOver=View('0000FF') onClick=Set('0000FF') height="10px" width="10px"></td>
-<td bgcolor=#0033FF onMouseOver=View('0033FF') onClick=Set('0033FF') height="10px" width="10px"></td>
-<td bgcolor=#0066FF onMouseOver=View('0066FF') onClick=Set('0066FF') height="10px" width="10px"></td>
-<td bgcolor=#0099FF onMouseOver=View('0099FF') onClick=Set('0099FF') height="10px" width="10px"></td>
-<td bgcolor=#00CCFF onMouseOver=View('00CCFF') onClick=Set('00CCFF') height="10px" width="10px"></td>
-<td bgcolor=#00FFFF onMouseOver=View('00FFFF') onClick=Set('00FFFF') height="10px" width="10px"></td>
-<td bgcolor=#3300FF onMouseOver=View('3300FF') onClick=Set('3300FF') height="10px" width="10px"></td>
-<td bgcolor=#3333FF onMouseOver=View('3333FF') onClick=Set('3333FF') height="10px" width="10px"></td>
-<td bgcolor=#3366FF onMouseOver=View('3366FF') onClick=Set('3366FF') height="10px" width="10px"></td>
-<td bgcolor=#3399FF onMouseOver=View('3399FF') onClick=Set('3399FF') height="10px" width="10px"></td>
-<td bgcolor=#33CCFF onMouseOver=View('33CCFF') onClick=Set('33CCFF') height="10px" width="10px"></td>
-<td bgcolor=#33FFFF onMouseOver=View('33FFFF') onClick=Set('33FFFF') height="10px" width="10px"></td>
-<td bgcolor=#6600FF onMouseOver=View('6600FF') onClick=Set('6600FF') height="10px" width="10px"></td>
-<td bgcolor=#6633FF onMouseOver=View('6633FF') onClick=Set('6633FF') height="10px" width="10px"></td>
-<td bgcolor=#6666FF onMouseOver=View('6666FF') onClick=Set('6666FF') height="10px" width="10px"></td>
-<td bgcolor=#6699FF onMouseOver=View('6699FF') onClick=Set('6699FF') height="10px" width="10px"></td>
-<td bgcolor=#66CCFF onMouseOver=View('66CCFF') onClick=Set('66CCFF') height="10px" width="10px"></td>
-<td bgcolor=#66FFFF onMouseOver=View('66FFFF') onClick=Set('66FFFF') height="10px" width="10px"></td>
-</tr>
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#FF0000 onMouseOver=View('FF0000') onClick=Set('FF0000') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#990000 onMouseOver=View('990000') onClick=Set('990000') height="10px" width="10px"></td>
-<td bgcolor=#993300 onMouseOver=View('993300') onClick=Set('993300') height="10px" width="10px"></td>
-<td bgcolor=#996600 onMouseOver=View('996600') onClick=Set('996600') height="10px" width="10px"></td>
-<td bgcolor=#999900 onMouseOver=View('999900') onClick=Set('999900') height="10px" width="10px"></td>
-<td bgcolor=#99CC00 onMouseOver=View('99CC00') onClick=Set('99CC00') height="10px" width="10px"></td>
-<td bgcolor=#99FF00 onMouseOver=View('99FF00') onClick=Set('99FF00') height="10px" width="10px"></td>
-<td bgcolor=#CC0000 onMouseOver=View('CC0000') onClick=Set('CC0000') height="10px" width="10px"></td>
-<td bgcolor=#CC3300 onMouseOver=View('CC3300') onClick=Set('CC3300') height="10px" width="10px"></td>
-<td bgcolor=#CC6600 onMouseOver=View('CC6600') onClick=Set('CC6600') height="10px" width="10px"></td>
-<td bgcolor=#CC9900 onMouseOver=View('CC9900') onClick=Set('CC9900') height="10px" width="10px"></td>
-<td bgcolor=#CCCC00 onMouseOver=View('CCCC00') onClick=Set('CCCC00') height="10px" width="10px"></td>
-<td bgcolor=#CCFF00 onMouseOver=View('CCFF00') onClick=Set('CCFF00') height="10px" width="10px"></td>
-<td bgcolor=#FF0000 onMouseOver=View('FF0000') onClick=Set('FF0000') height="10px" width="10px"></td>
-<td bgcolor=#FF3300 onMouseOver=View('FF3300') onClick=Set('FF3300') height="10px" width="10px"></td>
-<td bgcolor=#FF6600 onMouseOver=View('FF6600') onClick=Set('FF6600') height="10px" width="10px"></td>
-<td bgcolor=#FF9900 onMouseOver=View('FF9900') onClick=Set('FF9900') height="10px" width="10px"></td>
-<td bgcolor=#FFCC00 onMouseOver=View('FFCC00') onClick=Set('FFCC00') height="10px" width="10px"></td>
-<td bgcolor=#FFFF00 onMouseOver=View('FFFF00') onClick=Set('FFFF00') height="10px" width="10px"></td>
-</tr>
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#00FF00 onMouseOver=View('00FF00') onClick=Set('00FF00') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#990033 onMouseOver=View('990033') onClick=Set('990033') height="10px" width="10px"></td>
-<td bgcolor=#993333 onMouseOver=View('993333') onClick=Set('993333') height="10px" width="10px"></td>
-<td bgcolor=#996633 onMouseOver=View('996633') onClick=Set('996633') height="10px" width="10px"></td>
-<td bgcolor=#999933 onMouseOver=View('999933') onClick=Set('999933') height="10px" width="10px"></td>
-<td bgcolor=#99CC33 onMouseOver=View('99CC33') onClick=Set('99CC33') height="10px" width="10px"></td>
-<td bgcolor=#99FF33 onMouseOver=View('99FF33') onClick=Set('99FF33') height="10px" width="10px"></td>
-<td bgcolor=#CC0033 onMouseOver=View('CC0033') onClick=Set('CC0033') height="10px" width="10px"></td>
-<td bgcolor=#CC3333 onMouseOver=View('CC3333') onClick=Set('CC3333') height="10px" width="10px"></td>
-<td bgcolor=#CC6633 onMouseOver=View('CC6633') onClick=Set('CC6633') height="10px" width="10px"></td>
-<td bgcolor=#CC9933 onMouseOver=View('CC9933') onClick=Set('CC9933') height="10px" width="10px"></td>
-<td bgcolor=#CCCC33 onMouseOver=View('CCCC33') onClick=Set('CCCC33') height="10px" width="10px"></td>
-<td bgcolor=#CCFF33 onMouseOver=View('CCFF33') onClick=Set('CCFF33') height="10px" width="10px"></td>
-<td bgcolor=#FF0033 onMouseOver=View('FF0033') onClick=Set('FF0033') height="10px" width="10px"></td>
-<td bgcolor=#FF3333 onMouseOver=View('FF3333') onClick=Set('FF3333') height="10px" width="10px"></td>
-<td bgcolor=#FF6633 onMouseOver=View('FF6633') onClick=Set('FF6633') height="10px" width="10px"></td>
-<td bgcolor=#FF9933 onMouseOver=View('FF9933') onClick=Set('FF9933') height="10px" width="10px"></td>
-<td bgcolor=#FFCC33 onMouseOver=View('FFCC33') onClick=Set('FFCC33') height="10px" width="10px"></td>
-<td bgcolor=#FFFF33 onMouseOver=View('FFFF33') onClick=Set('FFFF33') height="10px" width="10px"></td>
-</tr>
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#0000FF onMouseOver=View('0000FF') onClick=Set('0000FF') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#990066 onMouseOver=View('990066') onClick=Set('990066') height="10px" width="10px"></td>
-<td bgcolor=#993366 onMouseOver=View('993366') onClick=Set('993366') height="10px" width="10px"></td>
-<td bgcolor=#996666 onMouseOver=View('996666') onClick=Set('996666') height="10px" width="10px"></td>
-<td bgcolor=#999966 onMouseOver=View('999966') onClick=Set('999966') height="10px" width="10px"></td>
-<td bgcolor=#99CC66 onMouseOver=View('99CC66') onClick=Set('99CC66') height="10px" width="10px"></td>
-<td bgcolor=#99FF66 onMouseOver=View('99FF66') onClick=Set('99FF66') height="10px" width="10px"></td>
-<td bgcolor=#CC0066 onMouseOver=View('CC0066') onClick=Set('CC0066') height="10px" width="10px"></td>
-<td bgcolor=#CC3366 onMouseOver=View('CC3366') onClick=Set('CC3366') height="10px" width="10px"></td>
-<td bgcolor=#CC6666 onMouseOver=View('CC6666') onClick=Set('CC6666') height="10px" width="10px"></td>
-<td bgcolor=#CC9966 onMouseOver=View('CC9966') onClick=Set('CC9966') height="10px" width="10px"></td>
-<td bgcolor=#CCCC66 onMouseOver=View('CCCC66') onClick=Set('CCCC66') height="10px" width="10px"></td>
-<td bgcolor=#CCFF66 onMouseOver=View('CCFF66') onClick=Set('CCFF66') height="10px" width="10px"></td>
-<td bgcolor=#FF0066 onMouseOver=View('FF0066') onClick=Set('FF0066') height="10px" width="10px"></td>
-<td bgcolor=#FF3366 onMouseOver=View('FF3366') onClick=Set('FF3366') height="10px" width="10px"></td>
-<td bgcolor=#FF6666 onMouseOver=View('FF6666') onClick=Set('FF6666') height="10px" width="10px"></td>
-<td bgcolor=#FF9966 onMouseOver=View('FF9966') onClick=Set('FF9966') height="10px" width="10px"></td>
-<td bgcolor=#FFCC66 onMouseOver=View('FFCC66') onClick=Set('FFCC66') height="10px" width="10px"></td>
-<td bgcolor=#FFFF66 onMouseOver=View('FFFF66') onClick=Set('FFFF66') height="10px" width="10px"></td>
-</tr>
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#FFFF00 onMouseOver=View('FFFF00') onClick=Set('FFFF00') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#990099 onMouseOver=View('990099') onClick=Set('990099') height="10px" width="10px"></td>
-<td bgcolor=#993399 onMouseOver=View('993399') onClick=Set('993399') height="10px" width="10px"></td>
-<td bgcolor=#996699 onMouseOver=View('996699') onClick=Set('996699') height="10px" width="10px"></td>
-<td bgcolor=#999999 onMouseOver=View('999999') onClick=Set('999999') height="10px" width="10px"></td>
-<td bgcolor=#99CC99 onMouseOver=View('99CC99') onClick=Set('99CC99') height="10px" width="10px"></td>
-<td bgcolor=#99FF99 onMouseOver=View('99FF99') onClick=Set('99FF99') height="10px" width="10px"></td>
-<td bgcolor=#CC0099 onMouseOver=View('CC0099') onClick=Set('CC0099') height="10px" width="10px"></td>
-<td bgcolor=#CC3399 onMouseOver=View('CC3399') onClick=Set('CC3399') height="10px" width="10px"></td>
-<td bgcolor=#CC6699 onMouseOver=View('CC6699') onClick=Set('CC6699') height="10px" width="10px"></td>
-<td bgcolor=#CC9999 onMouseOver=View('CC9999') onClick=Set('CC9999') height="10px" width="10px"></td>
-<td bgcolor=#CCCC99 onMouseOver=View('CCCC99') onClick=Set('CCCC99') height="10px" width="10px"></td>
-<td bgcolor=#CCFF99 onMouseOver=View('CCFF99') onClick=Set('CCFF99') height="10px" width="10px"></td>
-<td bgcolor=#FF0099 onMouseOver=View('FF0099') onClick=Set('FF0099') height="10px" width="10px"></td>
-<td bgcolor=#FF3399 onMouseOver=View('FF3399') onClick=Set('FF3399') height="10px" width="10px"></td>
-<td bgcolor=#FF6699 onMouseOver=View('FF6699') onClick=Set('FF6699') height="10px" width="10px"></td>
-<td bgcolor=#FF9999 onMouseOver=View('FF9999') onClick=Set('FF9999') height="10px" width="10px"></td>
-<td bgcolor=#FFCC99 onMouseOver=View('FFCC99') onClick=Set('FFCC99') height="10px" width="10px"></td>
-<td bgcolor=#FFFF99 onMouseOver=View('FFFF99') onClick=Set('FFFF99') height="10px" width="10px"></td>
-</tr>
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#00FFFF onMouseOver=View('00FFFF') onClick=Set('00FFFF') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#9900CC onMouseOver=View('9900CC') onClick=Set('9900CC') height="10px" width="10px"></td>
-<td bgcolor=#9933CC onMouseOver=View('9933CC') onClick=Set('9933CC') height="10px" width="10px"></td>
-<td bgcolor=#9966CC onMouseOver=View('9966CC') onClick=Set('9966CC') height="10px" width="10px"></td>
-<td bgcolor=#9999CC onMouseOver=View('9999CC') onClick=Set('9999CC') height="10px" width="10px"></td>
-<td bgcolor=#99CCCC onMouseOver=View('99CCCC') onClick=Set('99CCCC') height="10px" width="10px"></td>
-<td bgcolor=#99FFCC onMouseOver=View('99FFCC') onClick=Set('99FFCC') height="10px" width="10px"></td>
-<td bgcolor=#CC00CC onMouseOver=View('CC00CC') onClick=Set('CC00CC') height="10px" width="10px"></td>
-<td bgcolor=#CC33CC onMouseOver=View('CC33CC') onClick=Set('CC33CC') height="10px" width="10px"></td>
-<td bgcolor=#CC66CC onMouseOver=View('CC66CC') onClick=Set('CC66CC') height="10px" width="10px"></td>
-<td bgcolor=#CC99CC onMouseOver=View('CC99CC') onClick=Set('CC99CC') height="10px" width="10px"></td>
-<td bgcolor=#CCCCCC onMouseOver=View('CCCCCC') onClick=Set('CCCCCC') height="10px" width="10px"></td>
-<td bgcolor=#CCFFCC onMouseOver=View('CCFFCC') onClick=Set('CCFFCC') height="10px" width="10px"></td>
-<td bgcolor=#FF00CC onMouseOver=View('FF00CC') onClick=Set('FF00CC') height="10px" width="10px"></td>
-<td bgcolor=#FF33CC onMouseOver=View('FF33CC') onClick=Set('FF33CC') height="10px" width="10px"></td>
-<td bgcolor=#FF66CC onMouseOver=View('FF66CC') onClick=Set('FF66CC') height="10px" width="10px"></td>
-<td bgcolor=#FF99CC onMouseOver=View('FF99CC') onClick=Set('FF99CC') height="10px" width="10px"></td>
-<td bgcolor=#FFCCCC onMouseOver=View('FFCCCC') onClick=Set('FFCCCC') height="10px" width="10px"></td>
-<td bgcolor=#FFFFCC onMouseOver=View('FFFFCC') onClick=Set('FFFFCC') height="10px" width="10px"></td>
-</tr>
-<tr>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#FF00FF onMouseOver=View('FF00FF') onClick=Set('FF00FF') height="10px" width="10px"></td>
-<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
-<td bgcolor=#9900FF onMouseOver=View('9900FF') onClick=Set('9900FF') height="10px" width="10px"></td>
-<td bgcolor=#9933FF onMouseOver=View('9933FF') onClick=Set('9933FF') height="10px" width="10px"></td>
-<td bgcolor=#9966FF onMouseOver=View('9966FF') onClick=Set('9966FF') height="10px" width="10px"></td>
-<td bgcolor=#9999FF onMouseOver=View('9999FF') onClick=Set('9999FF') height="10px" width="10px"></td>
-<td bgcolor=#99CCFF onMouseOver=View('99CCFF') onClick=Set('99CCFF') height="10px" width="10px"></td>
-<td bgcolor=#99FFFF onMouseOver=View('99FFFF') onClick=Set('99FFFF') height="10px" width="10px"></td>
-<td bgcolor=#CC00FF onMouseOver=View('CC00FF') onClick=Set('CC00FF') height="10px" width="10px"></td>
-<td bgcolor=#CC33FF onMouseOver=View('CC33FF') onClick=Set('CC33FF') height="10px" width="10px"></td>
-<td bgcolor=#CC66FF onMouseOver=View('CC66FF') onClick=Set('CC66FF') height="10px" width="10px"></td>
-<td bgcolor=#CC99FF onMouseOver=View('CC99FF') onClick=Set('CC99FF') height="10px" width="10px"></td>
-<td bgcolor=#CCCCFF onMouseOver=View('CCCCFF') onClick=Set('CCCCFF') height="10px" width="10px"></td>
-<td bgcolor=#CCFFFF onMouseOver=View('CCFFFF') onClick=Set('CCFFFF') height="10px" width="10px"></td>
-<td bgcolor=#FF00FF onMouseOver=View('FF00FF') onClick=Set('FF00FF') height="10px" width="10px"></td>
-<td bgcolor=#FF33FF onMouseOver=View('FF33FF') onClick=Set('FF33FF') height="10px" width="10px"></td>
-<td bgcolor=#FF66FF onMouseOver=View('FF66FF') onClick=Set('FF66FF') height="10px" width="10px"></td>
-<td bgcolor=#FF99FF onMouseOver=View('FF99FF') onClick=Set('FF99FF') height="10px" width="10px"></td>
-<td bgcolor=#FFCCFF onMouseOver=View('FFCCFF') onClick=Set('FFCCFF') height="10px" width="10px"></td>
-<td bgcolor=#FFFFFF onMouseOver=View('FFFFFF') onClick=Set('FFFFFF') height="10px" width="10px"></td>
-</tr>
-</table>
-
-</body></html>
+<!-- note: this version of the color picker is optimized for IE 5.5+ only -->
+
+<html><head><title>Select Color</title>
+
+<script type="text/javascript" src="popup.js"></script>
+
+<script type="text/javascript">
+
+window.resizeTo(240, 182);
+function _CloseOnEsc() {
+ if (event.keyCode == 27) { window.close(); return; }
+}
+
+function Init() { // run on page load
+ __dlg_init(); // <!-- this can be found in popup.js -->
+ document.body.onkeypress = _CloseOnEsc;
+
+ var color = window.dialogArguments;
+ color = ValidateColor(color) || '000000';
+ View(color); // set default color
+}
+
+function View(color) { // preview color
+ document.getElementById("ColorPreview").style.backgroundColor = '#' + color;
+ document.getElementById("ColorHex").value = '#' + color;
+}
+
+function Set(string) { // select color
+ var color = ValidateColor(string);
+ if (color == null) { alert("Invalid color code: " + string); } // invalid color
+ else { // valid color
+ View(color); // show selected color
+ __dlg_close(color);
+ }
+}
+
+function ValidateColor(string) { // return valid color code
+ string = string || '';
+ string = string + "";
+ string = string.toUpperCase();
+ var chars = '0123456789ABCDEF';
+ var out = '';
+
+ for (var i=0; i<string.length; i++) { // remove invalid color chars
+ var schar = string.charAt(i);
+ if (chars.indexOf(schar) != -1) { out += schar; }
+ }
+
+ if (out.length != 6) { return null; } // check length
+ return out;
+}
+
+</script>
+</head>
+<body style="background:ButtonFace; margin:0px; padding:0px" onload="Init()">
+
+<form method="get" style="margin:0px; padding:0px" onSubmit="Set(document.getElementById('ColorHex').value); return false;">
+<table border="0px" cellspacing="0px" cellpadding="4" width="100%">
+ <tr>
+ <td style="background:buttonface" valign=center><div style="background-color: #000000; padding: 1; height: 21px; width: 50px"><div id="ColorPreview" style="height: 100%; width: 100%"></div></div></td>
+ <td style="background:buttonface" valign=center><input type="text" name="ColorHex"
+ id="ColorHex" value="" size=15 style="font-size: 12px"></td>
+ <td style="background:buttonface" width=100%></td>
+ </tr>
+</table>
+</form>
+
+<table border="0" cellspacing="1px" cellpadding="0px" width="100%" bgcolor="#000000" style="cursor: hand;">
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#003300 onMouseOver=View('003300') onClick=Set('003300') height="10px" width="10px"></td>
+<td bgcolor=#006600 onMouseOver=View('006600') onClick=Set('006600') height="10px" width="10px"></td>
+<td bgcolor=#009900 onMouseOver=View('009900') onClick=Set('009900') height="10px" width="10px"></td>
+<td bgcolor=#00CC00 onMouseOver=View('00CC00') onClick=Set('00CC00') height="10px" width="10px"></td>
+<td bgcolor=#00FF00 onMouseOver=View('00FF00') onClick=Set('00FF00') height="10px" width="10px"></td>
+<td bgcolor=#330000 onMouseOver=View('330000') onClick=Set('330000') height="10px" width="10px"></td>
+<td bgcolor=#333300 onMouseOver=View('333300') onClick=Set('333300') height="10px" width="10px"></td>
+<td bgcolor=#336600 onMouseOver=View('336600') onClick=Set('336600') height="10px" width="10px"></td>
+<td bgcolor=#339900 onMouseOver=View('339900') onClick=Set('339900') height="10px" width="10px"></td>
+<td bgcolor=#33CC00 onMouseOver=View('33CC00') onClick=Set('33CC00') height="10px" width="10px"></td>
+<td bgcolor=#33FF00 onMouseOver=View('33FF00') onClick=Set('33FF00') height="10px" width="10px"></td>
+<td bgcolor=#660000 onMouseOver=View('660000') onClick=Set('660000') height="10px" width="10px"></td>
+<td bgcolor=#663300 onMouseOver=View('663300') onClick=Set('663300') height="10px" width="10px"></td>
+<td bgcolor=#666600 onMouseOver=View('666600') onClick=Set('666600') height="10px" width="10px"></td>
+<td bgcolor=#669900 onMouseOver=View('669900') onClick=Set('669900') height="10px" width="10px"></td>
+<td bgcolor=#66CC00 onMouseOver=View('66CC00') onClick=Set('66CC00') height="10px" width="10px"></td>
+<td bgcolor=#66FF00 onMouseOver=View('66FF00') onClick=Set('66FF00') height="10px" width="10px"></td>
+</tr>
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#333333 onMouseOver=View('333333') onClick=Set('333333') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#000033 onMouseOver=View('000033') onClick=Set('000033') height="10px" width="10px"></td>
+<td bgcolor=#003333 onMouseOver=View('003333') onClick=Set('003333') height="10px" width="10px"></td>
+<td bgcolor=#006633 onMouseOver=View('006633') onClick=Set('006633') height="10px" width="10px"></td>
+<td bgcolor=#009933 onMouseOver=View('009933') onClick=Set('009933') height="10px" width="10px"></td>
+<td bgcolor=#00CC33 onMouseOver=View('00CC33') onClick=Set('00CC33') height="10px" width="10px"></td>
+<td bgcolor=#00FF33 onMouseOver=View('00FF33') onClick=Set('00FF33') height="10px" width="10px"></td>
+<td bgcolor=#330033 onMouseOver=View('330033') onClick=Set('330033') height="10px" width="10px"></td>
+<td bgcolor=#333333 onMouseOver=View('333333') onClick=Set('333333') height="10px" width="10px"></td>
+<td bgcolor=#336633 onMouseOver=View('336633') onClick=Set('336633') height="10px" width="10px"></td>
+<td bgcolor=#339933 onMouseOver=View('339933') onClick=Set('339933') height="10px" width="10px"></td>
+<td bgcolor=#33CC33 onMouseOver=View('33CC33') onClick=Set('33CC33') height="10px" width="10px"></td>
+<td bgcolor=#33FF33 onMouseOver=View('33FF33') onClick=Set('33FF33') height="10px" width="10px"></td>
+<td bgcolor=#660033 onMouseOver=View('660033') onClick=Set('660033') height="10px" width="10px"></td>
+<td bgcolor=#663333 onMouseOver=View('663333') onClick=Set('663333') height="10px" width="10px"></td>
+<td bgcolor=#666633 onMouseOver=View('666633') onClick=Set('666633') height="10px" width="10px"></td>
+<td bgcolor=#669933 onMouseOver=View('669933') onClick=Set('669933') height="10px" width="10px"></td>
+<td bgcolor=#66CC33 onMouseOver=View('66CC33') onClick=Set('66CC33') height="10px" width="10px"></td>
+<td bgcolor=#66FF33 onMouseOver=View('66FF33') onClick=Set('66FF33') height="10px" width="10px"></td>
+</tr>
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#666666 onMouseOver=View('666666') onClick=Set('666666') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#000066 onMouseOver=View('000066') onClick=Set('000066') height="10px" width="10px"></td>
+<td bgcolor=#003366 onMouseOver=View('003366') onClick=Set('003366') height="10px" width="10px"></td>
+<td bgcolor=#006666 onMouseOver=View('006666') onClick=Set('006666') height="10px" width="10px"></td>
+<td bgcolor=#009966 onMouseOver=View('009966') onClick=Set('009966') height="10px" width="10px"></td>
+<td bgcolor=#00CC66 onMouseOver=View('00CC66') onClick=Set('00CC66') height="10px" width="10px"></td>
+<td bgcolor=#00FF66 onMouseOver=View('00FF66') onClick=Set('00FF66') height="10px" width="10px"></td>
+<td bgcolor=#330066 onMouseOver=View('330066') onClick=Set('330066') height="10px" width="10px"></td>
+<td bgcolor=#333366 onMouseOver=View('333366') onClick=Set('333366') height="10px" width="10px"></td>
+<td bgcolor=#336666 onMouseOver=View('336666') onClick=Set('336666') height="10px" width="10px"></td>
+<td bgcolor=#339966 onMouseOver=View('339966') onClick=Set('339966') height="10px" width="10px"></td>
+<td bgcolor=#33CC66 onMouseOver=View('33CC66') onClick=Set('33CC66') height="10px" width="10px"></td>
+<td bgcolor=#33FF66 onMouseOver=View('33FF66') onClick=Set('33FF66') height="10px" width="10px"></td>
+<td bgcolor=#660066 onMouseOver=View('660066') onClick=Set('660066') height="10px" width="10px"></td>
+<td bgcolor=#663366 onMouseOver=View('663366') onClick=Set('663366') height="10px" width="10px"></td>
+<td bgcolor=#666666 onMouseOver=View('666666') onClick=Set('666666') height="10px" width="10px"></td>
+<td bgcolor=#669966 onMouseOver=View('669966') onClick=Set('669966') height="10px" width="10px"></td>
+<td bgcolor=#66CC66 onMouseOver=View('66CC66') onClick=Set('66CC66') height="10px" width="10px"></td>
+<td bgcolor=#66FF66 onMouseOver=View('66FF66') onClick=Set('66FF66') height="10px" width="10px"></td>
+</tr>
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#999999 onMouseOver=View('999999') onClick=Set('999999') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#000099 onMouseOver=View('000099') onClick=Set('000099') height="10px" width="10px"></td>
+<td bgcolor=#003399 onMouseOver=View('003399') onClick=Set('003399') height="10px" width="10px"></td>
+<td bgcolor=#006699 onMouseOver=View('006699') onClick=Set('006699') height="10px" width="10px"></td>
+<td bgcolor=#009999 onMouseOver=View('009999') onClick=Set('009999') height="10px" width="10px"></td>
+<td bgcolor=#00CC99 onMouseOver=View('00CC99') onClick=Set('00CC99') height="10px" width="10px"></td>
+<td bgcolor=#00FF99 onMouseOver=View('00FF99') onClick=Set('00FF99') height="10px" width="10px"></td>
+<td bgcolor=#330099 onMouseOver=View('330099') onClick=Set('330099') height="10px" width="10px"></td>
+<td bgcolor=#333399 onMouseOver=View('333399') onClick=Set('333399') height="10px" width="10px"></td>
+<td bgcolor=#336699 onMouseOver=View('336699') onClick=Set('336699') height="10px" width="10px"></td>
+<td bgcolor=#339999 onMouseOver=View('339999') onClick=Set('339999') height="10px" width="10px"></td>
+<td bgcolor=#33CC99 onMouseOver=View('33CC99') onClick=Set('33CC99') height="10px" width="10px"></td>
+<td bgcolor=#33FF99 onMouseOver=View('33FF99') onClick=Set('33FF99') height="10px" width="10px"></td>
+<td bgcolor=#660099 onMouseOver=View('660099') onClick=Set('660099') height="10px" width="10px"></td>
+<td bgcolor=#663399 onMouseOver=View('663399') onClick=Set('663399') height="10px" width="10px"></td>
+<td bgcolor=#666699 onMouseOver=View('666699') onClick=Set('666699') height="10px" width="10px"></td>
+<td bgcolor=#669999 onMouseOver=View('669999') onClick=Set('669999') height="10px" width="10px"></td>
+<td bgcolor=#66CC99 onMouseOver=View('66CC99') onClick=Set('66CC99') height="10px" width="10px"></td>
+<td bgcolor=#66FF99 onMouseOver=View('66FF99') onClick=Set('66FF99') height="10px" width="10px"></td>
+</tr>
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#CCCCCC onMouseOver=View('CCCCCC') onClick=Set('CCCCCC') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#0000CC onMouseOver=View('0000CC') onClick=Set('0000CC') height="10px" width="10px"></td>
+<td bgcolor=#0033CC onMouseOver=View('0033CC') onClick=Set('0033CC') height="10px" width="10px"></td>
+<td bgcolor=#0066CC onMouseOver=View('0066CC') onClick=Set('0066CC') height="10px" width="10px"></td>
+<td bgcolor=#0099CC onMouseOver=View('0099CC') onClick=Set('0099CC') height="10px" width="10px"></td>
+<td bgcolor=#00CCCC onMouseOver=View('00CCCC') onClick=Set('00CCCC') height="10px" width="10px"></td>
+<td bgcolor=#00FFCC onMouseOver=View('00FFCC') onClick=Set('00FFCC') height="10px" width="10px"></td>
+<td bgcolor=#3300CC onMouseOver=View('3300CC') onClick=Set('3300CC') height="10px" width="10px"></td>
+<td bgcolor=#3333CC onMouseOver=View('3333CC') onClick=Set('3333CC') height="10px" width="10px"></td>
+<td bgcolor=#3366CC onMouseOver=View('3366CC') onClick=Set('3366CC') height="10px" width="10px"></td>
+<td bgcolor=#3399CC onMouseOver=View('3399CC') onClick=Set('3399CC') height="10px" width="10px"></td>
+<td bgcolor=#33CCCC onMouseOver=View('33CCCC') onClick=Set('33CCCC') height="10px" width="10px"></td>
+<td bgcolor=#33FFCC onMouseOver=View('33FFCC') onClick=Set('33FFCC') height="10px" width="10px"></td>
+<td bgcolor=#6600CC onMouseOver=View('6600CC') onClick=Set('6600CC') height="10px" width="10px"></td>
+<td bgcolor=#6633CC onMouseOver=View('6633CC') onClick=Set('6633CC') height="10px" width="10px"></td>
+<td bgcolor=#6666CC onMouseOver=View('6666CC') onClick=Set('6666CC') height="10px" width="10px"></td>
+<td bgcolor=#6699CC onMouseOver=View('6699CC') onClick=Set('6699CC') height="10px" width="10px"></td>
+<td bgcolor=#66CCCC onMouseOver=View('66CCCC') onClick=Set('66CCCC') height="10px" width="10px"></td>
+<td bgcolor=#66FFCC onMouseOver=View('66FFCC') onClick=Set('66FFCC') height="10px" width="10px"></td>
+</tr>
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#FFFFFF onMouseOver=View('FFFFFF') onClick=Set('FFFFFF') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#0000FF onMouseOver=View('0000FF') onClick=Set('0000FF') height="10px" width="10px"></td>
+<td bgcolor=#0033FF onMouseOver=View('0033FF') onClick=Set('0033FF') height="10px" width="10px"></td>
+<td bgcolor=#0066FF onMouseOver=View('0066FF') onClick=Set('0066FF') height="10px" width="10px"></td>
+<td bgcolor=#0099FF onMouseOver=View('0099FF') onClick=Set('0099FF') height="10px" width="10px"></td>
+<td bgcolor=#00CCFF onMouseOver=View('00CCFF') onClick=Set('00CCFF') height="10px" width="10px"></td>
+<td bgcolor=#00FFFF onMouseOver=View('00FFFF') onClick=Set('00FFFF') height="10px" width="10px"></td>
+<td bgcolor=#3300FF onMouseOver=View('3300FF') onClick=Set('3300FF') height="10px" width="10px"></td>
+<td bgcolor=#3333FF onMouseOver=View('3333FF') onClick=Set('3333FF') height="10px" width="10px"></td>
+<td bgcolor=#3366FF onMouseOver=View('3366FF') onClick=Set('3366FF') height="10px" width="10px"></td>
+<td bgcolor=#3399FF onMouseOver=View('3399FF') onClick=Set('3399FF') height="10px" width="10px"></td>
+<td bgcolor=#33CCFF onMouseOver=View('33CCFF') onClick=Set('33CCFF') height="10px" width="10px"></td>
+<td bgcolor=#33FFFF onMouseOver=View('33FFFF') onClick=Set('33FFFF') height="10px" width="10px"></td>
+<td bgcolor=#6600FF onMouseOver=View('6600FF') onClick=Set('6600FF') height="10px" width="10px"></td>
+<td bgcolor=#6633FF onMouseOver=View('6633FF') onClick=Set('6633FF') height="10px" width="10px"></td>
+<td bgcolor=#6666FF onMouseOver=View('6666FF') onClick=Set('6666FF') height="10px" width="10px"></td>
+<td bgcolor=#6699FF onMouseOver=View('6699FF') onClick=Set('6699FF') height="10px" width="10px"></td>
+<td bgcolor=#66CCFF onMouseOver=View('66CCFF') onClick=Set('66CCFF') height="10px" width="10px"></td>
+<td bgcolor=#66FFFF onMouseOver=View('66FFFF') onClick=Set('66FFFF') height="10px" width="10px"></td>
+</tr>
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#FF0000 onMouseOver=View('FF0000') onClick=Set('FF0000') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#990000 onMouseOver=View('990000') onClick=Set('990000') height="10px" width="10px"></td>
+<td bgcolor=#993300 onMouseOver=View('993300') onClick=Set('993300') height="10px" width="10px"></td>
+<td bgcolor=#996600 onMouseOver=View('996600') onClick=Set('996600') height="10px" width="10px"></td>
+<td bgcolor=#999900 onMouseOver=View('999900') onClick=Set('999900') height="10px" width="10px"></td>
+<td bgcolor=#99CC00 onMouseOver=View('99CC00') onClick=Set('99CC00') height="10px" width="10px"></td>
+<td bgcolor=#99FF00 onMouseOver=View('99FF00') onClick=Set('99FF00') height="10px" width="10px"></td>
+<td bgcolor=#CC0000 onMouseOver=View('CC0000') onClick=Set('CC0000') height="10px" width="10px"></td>
+<td bgcolor=#CC3300 onMouseOver=View('CC3300') onClick=Set('CC3300') height="10px" width="10px"></td>
+<td bgcolor=#CC6600 onMouseOver=View('CC6600') onClick=Set('CC6600') height="10px" width="10px"></td>
+<td bgcolor=#CC9900 onMouseOver=View('CC9900') onClick=Set('CC9900') height="10px" width="10px"></td>
+<td bgcolor=#CCCC00 onMouseOver=View('CCCC00') onClick=Set('CCCC00') height="10px" width="10px"></td>
+<td bgcolor=#CCFF00 onMouseOver=View('CCFF00') onClick=Set('CCFF00') height="10px" width="10px"></td>
+<td bgcolor=#FF0000 onMouseOver=View('FF0000') onClick=Set('FF0000') height="10px" width="10px"></td>
+<td bgcolor=#FF3300 onMouseOver=View('FF3300') onClick=Set('FF3300') height="10px" width="10px"></td>
+<td bgcolor=#FF6600 onMouseOver=View('FF6600') onClick=Set('FF6600') height="10px" width="10px"></td>
+<td bgcolor=#FF9900 onMouseOver=View('FF9900') onClick=Set('FF9900') height="10px" width="10px"></td>
+<td bgcolor=#FFCC00 onMouseOver=View('FFCC00') onClick=Set('FFCC00') height="10px" width="10px"></td>
+<td bgcolor=#FFFF00 onMouseOver=View('FFFF00') onClick=Set('FFFF00') height="10px" width="10px"></td>
+</tr>
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#00FF00 onMouseOver=View('00FF00') onClick=Set('00FF00') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#990033 onMouseOver=View('990033') onClick=Set('990033') height="10px" width="10px"></td>
+<td bgcolor=#993333 onMouseOver=View('993333') onClick=Set('993333') height="10px" width="10px"></td>
+<td bgcolor=#996633 onMouseOver=View('996633') onClick=Set('996633') height="10px" width="10px"></td>
+<td bgcolor=#999933 onMouseOver=View('999933') onClick=Set('999933') height="10px" width="10px"></td>
+<td bgcolor=#99CC33 onMouseOver=View('99CC33') onClick=Set('99CC33') height="10px" width="10px"></td>
+<td bgcolor=#99FF33 onMouseOver=View('99FF33') onClick=Set('99FF33') height="10px" width="10px"></td>
+<td bgcolor=#CC0033 onMouseOver=View('CC0033') onClick=Set('CC0033') height="10px" width="10px"></td>
+<td bgcolor=#CC3333 onMouseOver=View('CC3333') onClick=Set('CC3333') height="10px" width="10px"></td>
+<td bgcolor=#CC6633 onMouseOver=View('CC6633') onClick=Set('CC6633') height="10px" width="10px"></td>
+<td bgcolor=#CC9933 onMouseOver=View('CC9933') onClick=Set('CC9933') height="10px" width="10px"></td>
+<td bgcolor=#CCCC33 onMouseOver=View('CCCC33') onClick=Set('CCCC33') height="10px" width="10px"></td>
+<td bgcolor=#CCFF33 onMouseOver=View('CCFF33') onClick=Set('CCFF33') height="10px" width="10px"></td>
+<td bgcolor=#FF0033 onMouseOver=View('FF0033') onClick=Set('FF0033') height="10px" width="10px"></td>
+<td bgcolor=#FF3333 onMouseOver=View('FF3333') onClick=Set('FF3333') height="10px" width="10px"></td>
+<td bgcolor=#FF6633 onMouseOver=View('FF6633') onClick=Set('FF6633') height="10px" width="10px"></td>
+<td bgcolor=#FF9933 onMouseOver=View('FF9933') onClick=Set('FF9933') height="10px" width="10px"></td>
+<td bgcolor=#FFCC33 onMouseOver=View('FFCC33') onClick=Set('FFCC33') height="10px" width="10px"></td>
+<td bgcolor=#FFFF33 onMouseOver=View('FFFF33') onClick=Set('FFFF33') height="10px" width="10px"></td>
+</tr>
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#0000FF onMouseOver=View('0000FF') onClick=Set('0000FF') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#990066 onMouseOver=View('990066') onClick=Set('990066') height="10px" width="10px"></td>
+<td bgcolor=#993366 onMouseOver=View('993366') onClick=Set('993366') height="10px" width="10px"></td>
+<td bgcolor=#996666 onMouseOver=View('996666') onClick=Set('996666') height="10px" width="10px"></td>
+<td bgcolor=#999966 onMouseOver=View('999966') onClick=Set('999966') height="10px" width="10px"></td>
+<td bgcolor=#99CC66 onMouseOver=View('99CC66') onClick=Set('99CC66') height="10px" width="10px"></td>
+<td bgcolor=#99FF66 onMouseOver=View('99FF66') onClick=Set('99FF66') height="10px" width="10px"></td>
+<td bgcolor=#CC0066 onMouseOver=View('CC0066') onClick=Set('CC0066') height="10px" width="10px"></td>
+<td bgcolor=#CC3366 onMouseOver=View('CC3366') onClick=Set('CC3366') height="10px" width="10px"></td>
+<td bgcolor=#CC6666 onMouseOver=View('CC6666') onClick=Set('CC6666') height="10px" width="10px"></td>
+<td bgcolor=#CC9966 onMouseOver=View('CC9966') onClick=Set('CC9966') height="10px" width="10px"></td>
+<td bgcolor=#CCCC66 onMouseOver=View('CCCC66') onClick=Set('CCCC66') height="10px" width="10px"></td>
+<td bgcolor=#CCFF66 onMouseOver=View('CCFF66') onClick=Set('CCFF66') height="10px" width="10px"></td>
+<td bgcolor=#FF0066 onMouseOver=View('FF0066') onClick=Set('FF0066') height="10px" width="10px"></td>
+<td bgcolor=#FF3366 onMouseOver=View('FF3366') onClick=Set('FF3366') height="10px" width="10px"></td>
+<td bgcolor=#FF6666 onMouseOver=View('FF6666') onClick=Set('FF6666') height="10px" width="10px"></td>
+<td bgcolor=#FF9966 onMouseOver=View('FF9966') onClick=Set('FF9966') height="10px" width="10px"></td>
+<td bgcolor=#FFCC66 onMouseOver=View('FFCC66') onClick=Set('FFCC66') height="10px" width="10px"></td>
+<td bgcolor=#FFFF66 onMouseOver=View('FFFF66') onClick=Set('FFFF66') height="10px" width="10px"></td>
+</tr>
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#FFFF00 onMouseOver=View('FFFF00') onClick=Set('FFFF00') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#990099 onMouseOver=View('990099') onClick=Set('990099') height="10px" width="10px"></td>
+<td bgcolor=#993399 onMouseOver=View('993399') onClick=Set('993399') height="10px" width="10px"></td>
+<td bgcolor=#996699 onMouseOver=View('996699') onClick=Set('996699') height="10px" width="10px"></td>
+<td bgcolor=#999999 onMouseOver=View('999999') onClick=Set('999999') height="10px" width="10px"></td>
+<td bgcolor=#99CC99 onMouseOver=View('99CC99') onClick=Set('99CC99') height="10px" width="10px"></td>
+<td bgcolor=#99FF99 onMouseOver=View('99FF99') onClick=Set('99FF99') height="10px" width="10px"></td>
+<td bgcolor=#CC0099 onMouseOver=View('CC0099') onClick=Set('CC0099') height="10px" width="10px"></td>
+<td bgcolor=#CC3399 onMouseOver=View('CC3399') onClick=Set('CC3399') height="10px" width="10px"></td>
+<td bgcolor=#CC6699 onMouseOver=View('CC6699') onClick=Set('CC6699') height="10px" width="10px"></td>
+<td bgcolor=#CC9999 onMouseOver=View('CC9999') onClick=Set('CC9999') height="10px" width="10px"></td>
+<td bgcolor=#CCCC99 onMouseOver=View('CCCC99') onClick=Set('CCCC99') height="10px" width="10px"></td>
+<td bgcolor=#CCFF99 onMouseOver=View('CCFF99') onClick=Set('CCFF99') height="10px" width="10px"></td>
+<td bgcolor=#FF0099 onMouseOver=View('FF0099') onClick=Set('FF0099') height="10px" width="10px"></td>
+<td bgcolor=#FF3399 onMouseOver=View('FF3399') onClick=Set('FF3399') height="10px" width="10px"></td>
+<td bgcolor=#FF6699 onMouseOver=View('FF6699') onClick=Set('FF6699') height="10px" width="10px"></td>
+<td bgcolor=#FF9999 onMouseOver=View('FF9999') onClick=Set('FF9999') height="10px" width="10px"></td>
+<td bgcolor=#FFCC99 onMouseOver=View('FFCC99') onClick=Set('FFCC99') height="10px" width="10px"></td>
+<td bgcolor=#FFFF99 onMouseOver=View('FFFF99') onClick=Set('FFFF99') height="10px" width="10px"></td>
+</tr>
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#00FFFF onMouseOver=View('00FFFF') onClick=Set('00FFFF') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#9900CC onMouseOver=View('9900CC') onClick=Set('9900CC') height="10px" width="10px"></td>
+<td bgcolor=#9933CC onMouseOver=View('9933CC') onClick=Set('9933CC') height="10px" width="10px"></td>
+<td bgcolor=#9966CC onMouseOver=View('9966CC') onClick=Set('9966CC') height="10px" width="10px"></td>
+<td bgcolor=#9999CC onMouseOver=View('9999CC') onClick=Set('9999CC') height="10px" width="10px"></td>
+<td bgcolor=#99CCCC onMouseOver=View('99CCCC') onClick=Set('99CCCC') height="10px" width="10px"></td>
+<td bgcolor=#99FFCC onMouseOver=View('99FFCC') onClick=Set('99FFCC') height="10px" width="10px"></td>
+<td bgcolor=#CC00CC onMouseOver=View('CC00CC') onClick=Set('CC00CC') height="10px" width="10px"></td>
+<td bgcolor=#CC33CC onMouseOver=View('CC33CC') onClick=Set('CC33CC') height="10px" width="10px"></td>
+<td bgcolor=#CC66CC onMouseOver=View('CC66CC') onClick=Set('CC66CC') height="10px" width="10px"></td>
+<td bgcolor=#CC99CC onMouseOver=View('CC99CC') onClick=Set('CC99CC') height="10px" width="10px"></td>
+<td bgcolor=#CCCCCC onMouseOver=View('CCCCCC') onClick=Set('CCCCCC') height="10px" width="10px"></td>
+<td bgcolor=#CCFFCC onMouseOver=View('CCFFCC') onClick=Set('CCFFCC') height="10px" width="10px"></td>
+<td bgcolor=#FF00CC onMouseOver=View('FF00CC') onClick=Set('FF00CC') height="10px" width="10px"></td>
+<td bgcolor=#FF33CC onMouseOver=View('FF33CC') onClick=Set('FF33CC') height="10px" width="10px"></td>
+<td bgcolor=#FF66CC onMouseOver=View('FF66CC') onClick=Set('FF66CC') height="10px" width="10px"></td>
+<td bgcolor=#FF99CC onMouseOver=View('FF99CC') onClick=Set('FF99CC') height="10px" width="10px"></td>
+<td bgcolor=#FFCCCC onMouseOver=View('FFCCCC') onClick=Set('FFCCCC') height="10px" width="10px"></td>
+<td bgcolor=#FFFFCC onMouseOver=View('FFFFCC') onClick=Set('FFFFCC') height="10px" width="10px"></td>
+</tr>
+<tr>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#FF00FF onMouseOver=View('FF00FF') onClick=Set('FF00FF') height="10px" width="10px"></td>
+<td bgcolor=#000000 onMouseOver=View('000000') onClick=Set('000000') height="10px" width="10px"></td>
+<td bgcolor=#9900FF onMouseOver=View('9900FF') onClick=Set('9900FF') height="10px" width="10px"></td>
+<td bgcolor=#9933FF onMouseOver=View('9933FF') onClick=Set('9933FF') height="10px" width="10px"></td>
+<td bgcolor=#9966FF onMouseOver=View('9966FF') onClick=Set('9966FF') height="10px" width="10px"></td>
+<td bgcolor=#9999FF onMouseOver=View('9999FF') onClick=Set('9999FF') height="10px" width="10px"></td>
+<td bgcolor=#99CCFF onMouseOver=View('99CCFF') onClick=Set('99CCFF') height="10px" width="10px"></td>
+<td bgcolor=#99FFFF onMouseOver=View('99FFFF') onClick=Set('99FFFF') height="10px" width="10px"></td>
+<td bgcolor=#CC00FF onMouseOver=View('CC00FF') onClick=Set('CC00FF') height="10px" width="10px"></td>
+<td bgcolor=#CC33FF onMouseOver=View('CC33FF') onClick=Set('CC33FF') height="10px" width="10px"></td>
+<td bgcolor=#CC66FF onMouseOver=View('CC66FF') onClick=Set('CC66FF') height="10px" width="10px"></td>
+<td bgcolor=#CC99FF onMouseOver=View('CC99FF') onClick=Set('CC99FF') height="10px" width="10px"></td>
+<td bgcolor=#CCCCFF onMouseOver=View('CCCCFF') onClick=Set('CCCCFF') height="10px" width="10px"></td>
+<td bgcolor=#CCFFFF onMouseOver=View('CCFFFF') onClick=Set('CCFFFF') height="10px" width="10px"></td>
+<td bgcolor=#FF00FF onMouseOver=View('FF00FF') onClick=Set('FF00FF') height="10px" width="10px"></td>
+<td bgcolor=#FF33FF onMouseOver=View('FF33FF') onClick=Set('FF33FF') height="10px" width="10px"></td>
+<td bgcolor=#FF66FF onMouseOver=View('FF66FF') onClick=Set('FF66FF') height="10px" width="10px"></td>
+<td bgcolor=#FF99FF onMouseOver=View('FF99FF') onClick=Set('FF99FF') height="10px" width="10px"></td>
+<td bgcolor=#FFCCFF onMouseOver=View('FFCCFF') onClick=Set('FFCCFF') height="10px" width="10px"></td>
+<td bgcolor=#FFFFFF onMouseOver=View('FFFFFF') onClick=Set('FFFFFF') height="10px" width="10px"></td>
+</tr>
+</table>
+
+</body></html>
Modified: plog/trunk/js/htmlarea/popupwin.js
===================================================================
--- plog/trunk/js/htmlarea/popupwin.js 2005-02-05 13:57:52 UTC (rev 948)
+++ plog/trunk/js/htmlarea/popupwin.js 2005-02-05 15:29:38 UTC (rev 949)
@@ -1,139 +1,139 @@
-// (c) dynarch.com 2003-2004
-// Distributed under the same terms as HTMLArea itself.
-
-function PopupWin(editor, title, handler, initFunction) {
- this.editor = editor;
- this.handler = handler;
- var dlg = window.open("", "__ha_dialog",
- "toolbar=no,menubar=no,personalbar=no,width=600,height=600,left=20,top=40" +
- "scrollbars=no,resizable=no");
- this.window = dlg;
- var doc = dlg.document;
- this.doc = doc;
- var self = this;
-
- var base = document.baseURI || document.URL;
- if (base && base.match(/(.*)\/([^\/]+)/)) {
- base = RegExp.$1 + "/";
- }
- if (typeof _editor_url != "undefined" && !/^\//.test(_editor_url)) {
- // _editor_url doesn't start with '/' which means it's relative
- // FIXME: there's a problem here, it could be http:// which
- // doesn't start with slash but it's not relative either.
- base += _editor_url;
- } else
- base = _editor_url;
- if (!/\/$/.test(base)) {
- // base does not end in slash, add it now
- base += '/';
- }
- this.baseURL = base;
-
- doc.open();
- var html = "<html><head><title>" + title + "</title>\n";
- // html += "<base href='" + base + "htmlarea.js' />\n";
- html += "<style type='text/css'>@import url(" + base + "htmlarea.css);</style></head>\n";
- html += "<body class='dialog popupwin' id='--HA-body'></body></html>";
- doc.write(html);
- doc.close();
-
- // sometimes I Hate Mozilla... ;-(
- function init2() {
- var body = doc.body;
- if (!body) {
- setTimeout(init2, 25);
- return false;
- }
- dlg.title = title;
- doc.documentElement.style.padding = "0px";
- doc.documentElement.style.margin = "0px";
- var content = doc.createElement("div");
- content.className = "content";
- self.content = content;
- body.appendChild(content);
- self.element = body;
- initFunction(self);
- dlg.focus();
- };
- init2();
-};
-
-PopupWin.prototype.callHandler = function() {
- var tags = ["input", "textarea", "select"];
- var params = new Object();
- for (var ti in tags) {
- var tag = tags[ti];
- var els = this.content.getElementsByTagName(tag);
- for (var j = 0; j < els.length; ++j) {
- var el = els[j];
- var val = el.value;
- if (el.tagName.toLowerCase() == "input") {
- if (el.type == "checkbox") {
- val = el.checked;
- }
- }
- params[el.name] = val;
- }
- }
- this.handler(this, params);
- return false;
-};
-
-PopupWin.prototype.close = function() {
- this.window.close();
-};
-
-PopupWin.prototype.addButtons = function() {
- var self = this;
- var div = this.doc.createElement("div");
- this.content.appendChild(div);
- div.className = "buttons";
- for (var i = 0; i < arguments.length; ++i) {
- var btn = arguments[i];
- var button = this.doc.createElement("button");
- div.appendChild(button);
- button.innerHTML = HTMLArea.I18N.buttons[btn];
- switch (btn) {
- case "ok":
- button.onclick = function() {
- self.callHandler();
- self.close();
- return false;
- };
- break;
- case "cancel":
- button.onclick = function() {
- self.close();
- return false;
- };
- break;
- }
- }
-};
-
-PopupWin.prototype.showAtElement = function() {
- var self = this;
- // Mozilla needs some time to realize what's goin' on..
- setTimeout(function() {
- var w = self.content.offsetWidth + 4;
- var h = self.content.offsetHeight + 4;
- // size to content -- that's fuckin' buggy in all fuckin' browsers!!!
- // so that we set a larger size for the dialog window and then center
- // the element inside... phuck!
-
- // center...
- var el = self.content;
- var s = el.style;
- // s.width = el.offsetWidth + "px";
- // s.height = el.offsetHeight + "px";
- s.position = "absolute";
- s.left = (w - el.offsetWidth) / 2 + "px";
- s.top = (h - el.offsetHeight) / 2 + "px";
- if (HTMLArea.is_gecko) {
- self.window.innerWidth = w;
- self.window.innerHeight = h;
- } else {
- self.window.resizeTo(w + 8, h + 35);
- }
- }, 25);
-};
+// (c) dynarch.com 2003-2005
+// Distributed under the same terms as HTMLArea itself.
+
+function PopupWin(editor, title, handler, initFunction) {
+ this.editor = editor;
+ this.handler = handler;
+ var dlg = window.open("", "__ha_dialog",
+ "toolbar=no,menubar=no,personalbar=no,width=600,height=600,left=20,top=40" +
+ "scrollbars=no,resizable=no");
+ this.window = dlg;
+ var doc = dlg.document;
+ this.doc = doc;
+ var self = this;
+
+ var base = document.baseURI || document.URL;
+ if (base && base.match(/(.*)\/([^\/]+)/)) {
+ base = RegExp.$1 + "/";
+ }
+ if (typeof _editor_url != "undefined" && !/^\//.test(_editor_url) && !/http:\/\//.test(_editor_url)) {
+ // _editor_url doesn't start with '/' which means it's relative
+ // FIXME: there's a problem here, it could be http:// which
+ // doesn't start with slash but it's not relative either.
+ base += _editor_url;
+ } else
+ base = _editor_url;
+ if (!/\/$/.test(base)) {
+ // base does not end in slash, add it now
+ base += '/';
+ }
+ this.baseURL = base;
+
+ doc.open();
+ var html = "<html><head><title>" + title + "</title>\n";
+ // html += "<base href='" + base + "htmlarea.js' />\n";
+ html += "<style type='text/css'>@import url(" + base + "htmlarea.css);</style></head>\n";
+ html += "<body class='dialog popupwin' id='--HA-body'></body></html>";
+ doc.write(html);
+ doc.close();
+
+ // sometimes I Hate Mozilla... ;-(
+ function init2() {
+ var body = doc.body;
+ if (!body) {
+ setTimeout(init2, 25);
+ return false;
+ }
+ dlg.title = title;
+ doc.documentElement.style.padding = "0px";
+ doc.documentElement.style.margin = "0px";
+ var content = doc.createElement("div");
+ content.className = "content";
+ self.content = content;
+ body.appendChild(content);
+ self.element = body;
+ initFunction(self);
+ dlg.focus();
+ };
+ init2();
+};
+
+PopupWin.prototype.callHandler = function() {
+ var tags = ["input", "textarea", "select"];
+ var params = new Object();
+ for (var ti = tags.length; --ti >= 0;) {
+ var tag = tags[ti];
+ var els = this.content.getElementsByTagName(tag);
+ for (var j = 0; j < els.length; ++j) {
+ var el = els[j];
+ var val = el.value;
+ if (el.tagName.toLowerCase() == "input") {
+ if (el.type == "checkbox") {
+ val = el.checked;
+ }
+ }
+ params[el.name] = val;
+ }
+ }
+ this.handler(this, params);
+ return false;
+};
+
+PopupWin.prototype.close = function() {
+ this.window.close();
+};
+
+PopupWin.prototype.addButtons = function() {
+ var self = this;
+ var div = this.doc.createElement("div");
+ this.content.appendChild(div);
+ div.className = "buttons";
+ for (var i = 0; i < arguments.length; ++i) {
+ var btn = arguments[i];
+ var button = this.doc.createElement("button");
+ div.appendChild(button);
+ button.innerHTML = HTMLArea.I18N.buttons[btn];
+ switch (btn) {
+ case "ok":
+ button.onclick = function() {
+ self.callHandler();
+ self.close();
+ return false;
+ };
+ break;
+ case "cancel":
+ button.onclick = function() {
+ self.close();
+ return false;
+ };
+ break;
+ }
+ }
+};
+
+PopupWin.prototype.showAtElement = function() {
+ var self = this;
+ // Mozilla needs some time to realize what's goin' on..
+ setTimeout(function() {
+ var w = self.content.offsetWidth + 4;
+ var h = self.content.offsetHeight + 4;
+ // size to content -- that's fuckin' buggy in all fuckin' browsers!!!
+ // so that we set a larger size for the dialog window and then center
+ // the element inside... phuck!
+
+ // center...
+ var el = self.content;
+ var s = el.style;
+ // s.width = el.offsetWidth + "px";
+ // s.height = el.offsetHeight + "px";
+ s.position = "absolute";
+ s.left = (w - el.offsetWidth) / 2 + "px";
+ s.top = (h - el.offsetHeight) / 2 + "px";
+ if (HTMLArea.is_gecko) {
+ self.window.innerWidth = w;
+ self.window.innerHeight = h;
+ } else {
+ self.window.resizeTo(w + 8, h + 35);
+ }
+ }, 25);
+};
More information about the pLog-svn
mailing list